<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于msp430單片機1602 DS1802溫度顯示

          基于msp430單片機1602 DS1802溫度顯示

          作者: 時間:2016-08-25 來源:網絡 收藏

            最近調好了DS1802溫度傳感器,用的是430G2553單片機,溫度保留兩位小數(shù)。把源代碼分享給大家。

          本文引用地址:http://www.ex-cimer.com/article/201608/296038.htm

            /*****************************************

            g2553實現(xiàn)1602溫度顯示

            來源:汪中原的博客

            ******************************************/

            #include

            #define uchar unsigned char

            #define uint unsigned int

            #define CPU_F ((double)1000000)

            #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //延時x us

            #define ds_1 P2OUT |=BIT3 //DS18B20數(shù)據(jù)端高電平輸入(P2.3端口)

            #define ds_0 P2OUT &=~BIT3 //DS18B20數(shù)據(jù)端低電平輸入(P2.3端口)

            #define lcdrs_1 P2OUT |=BIT1; //RS寫數(shù)據(jù)(P2.1端口)

            #define lcdrs_0 P2OUT &=~BIT1; //RS寫指令(P2.1端口)

            #define lcden_1 P2OUT |=BIT0; //1602使能信號開(P2.0端口)

            #define lcden_0 P2OUT &=~BIT0; //1602使能信號關(P2.0端口)

            uchar table[]="wzy,come on"; //開機第一行顯示

            uchar table1[]="believe yourself"; //開機第二行顯示

            uint temp,T;

            float temp_f;

            uchar shi,ge,dian1,dian2,num; //定義溫度十位、各位、小數(shù)點后一位、后二位

            /*************************************************************

            * 名 稱:void init(void)

            * 功 能:1602顯示配置端口初始化

            * 入口參數(shù):無

            * 出口參數(shù):無

            * 說 明: P1、P2端口設為輸出低電平

            *************************************************************/

            void init(void)

            {

            WDTCTL=WDTPW + WDTHOLD;

            P1DIR=0xff;

            P2DIR=0x1f;

            P1OUT=0x00;

            P2OUT=0x00;

            }

            /*************************************************************

            * 名 稱:void delay(uint a)

            * 功 能:簡單的延時

            * 入口參數(shù):uint a

            * 出口參數(shù):無

            * 說 明: 可作為1602顯示簡單的延時

            *************************************************************/

            void delay(uint a)

            {

            uint i,j;

            for(i=a;i>0;i--)

            for(j=110;j>0;j--);

            }

            /*************************************************************

            * 名 稱:void write_date(uchar date)

            * 功 能:1602寫數(shù)據(jù)

            * 入口參數(shù):date

            * 出口參數(shù):無

            * 說 明: 用P1口輸入數(shù)據(jù)

            *************************************************************/

            void write_date(uchar date)

            {

            lcdrs_1;

            P1OUT=date;

            delay(5);

            lcden_1;

            delay(5);

            lcden_0;

            }

            /*************************************************************

            * 名 稱:void write_com(uchar com)

            * 功 能:1602寫指令

            * 入口參數(shù):com

            * 出口參數(shù):無

            * 說 明: 用P1口輸入指令

            *************************************************************/

            void write_com(uchar com)

            {

            lcdrs_0;

            P1OUT=com;

            delay(5);

            lcden_1;

            delay(5);

            lcden_0;

            }

            /*************************************************************

            * 名 稱:void uinit()

            * 功 能:初始化及其他顯示設置指令

            * 入口參數(shù):無

            * 出口參數(shù):無

            * 說 明: 1602初始化設置

            *************************************************************/

            void uinit()

            {

            lcden_0;

            write_com(0x38);

            write_com(0x0c);

            write_com(0x06);

            write_com(0x01);

            }

            /*************************************************************

            * 名 稱:void LCD_display()

            * 功 能:1602顯示

            * 入口參數(shù):無

            * 出口參數(shù):無

            * 說 明: 將前幾個函數(shù)綜合起來,顯示字符內容及區(qū)域

            *************************************************************/

            void LCD_display()

            {

            init();

            uinit();

            write_com(0x80);

            for(num=0;num<11;num++)

            {

            write_date(table[num]);

            delay(5);

            }

            write_com(0x80+0x40);

            for(num=0;num<16;num++)

            {

            write_date(table1[num]);

            delay(5);

            }

            }

            /*************************************************************

            * 名 稱:uchar DS18B20_init(void)

            * 功 能:DS18B20初始化

            * 入口參數(shù):無

            * 出口參數(shù):error

            * 說 明: DS18B20初始化,返回參數(shù)用于判斷是否完成初始化

            *************************************************************/

            uchar DS18B20_init(void)

            {

            uchar error;

            ds_0;

            delay_us(500);

            ds_1;

            delay_us(55);

            P2DIR &=~BIT3;

            _NOP();

            if(P2IN & BIT3)

            {

            error=1;

            P2DIR |= BIT3;

            }

            else

            {

            error=0;

            P2DIR |= BIT3;

            ds_1;

            }

            delay_us(400);

            return error;

            }

            /*************************************************************

            * 名 稱:uint read_temp(void)

            * 功 能:讀取DS18B20數(shù)據(jù)

            * 入口參數(shù):無

            * 出口參數(shù):temp

            * 說 明: 讀取一個字節(jié)

            *************************************************************/

            uint read_temp(void)

            {

            uchar i;

            uchar temp = 0;

            for(i=0;i<8;i++)

            {

            temp >>= 1;

            ds_0;

            delay_us(6);

            ds_1;

            delay_us(8);

            P2DIR &= ~BIT3;

            _NOP();

            if(P2IN & BIT3)

            temp |= 0x80;

            delay_us(45);

            P2DIR |=BIT3;

            ds_1;

            delay_us(10);

            }

            return temp;

            }

            /*************************************************************

            * 名 稱:void write_temp(uchar data)

            * 功 能:DS18B20寫入數(shù)據(jù)

            * 入口參數(shù):data

            * 出口參數(shù):無

            * 說 明: 寫入一個字節(jié)

            *************************************************************/

            void write_temp(uchar data)

            {

            uchar i;

            for(i = 0; i < 8;i++)

            {

            ds_0;

            delay_us(15);

            if(data & 0x01)

            {

            ds_1;

            delay_us(60);

            }

            else

            {

            ds_0;

            delay_us(60);

            }

            data >>= 1;

            ds_1;

            delay_us(10);

            }

            }

            /*************************************************************

            * 名 稱:void temp_change(void)

            * 功 能:DS18B20溫度轉化指令

            * 入口參數(shù):無

            * 出口參數(shù):無

            * 說 明: 跳過rom并溫度轉化

            *************************************************************/

            void temp_change(void)

            {

            write_temp(0xcc);

            write_temp(0x44);

            }

            /*************************************************************

            * 名 稱:uint temp_get()

            * 功 能:DS18B20溫度獲取

            * 入口參數(shù):無

            * 出口參數(shù):T

            * 說 明: 獲取溫度并四舍五入為保留兩位小數(shù)

            *************************************************************/

            uint temp_get()

            {

            uchar a,b;

            DS18B20_init();

            delay(1);

            write_temp(0xcc);

            write_temp(0xbe);

            a=read_temp(); //讀低8位

            b=read_temp(); //讀高8位

            T=b;

            T<<=8;

            T=T |a;

            temp_f=T*0.0625; //乘以分辨率為實際溫度值

            T=(uint)(temp_f*100+0.5);

            return T;

            }

            /*************************************************************

            * 名 稱:void dis_temp(uint t)

            * 功 能:分出十位、個位等

            * 入口參數(shù):t

            * 出口參數(shù):無

            * 說 明: 送到1602顯示

            *************************************************************/

            void dis_temp(uint t)

            {

            shi=t/1000;

            ge=t%1000/100;

            dian1=t%1000%100/10;

            dian2=t%1000%100%10;

            }

            /*************************************************************

            * 名 稱:

            * 功 能:

            * 入口參數(shù):

            * 出口參數(shù):

            * 說 明:

            *************************************************************/

            void main(void)

            {

            uchar a;

            WDTCTL=WDTPW + WDTHOLD;

            LCD_display();

            while(1)

            {

            do

            {

            a =DS18B20_init();

            }

            while(a); //判斷初始化是否完成

            temp_change();

            for(a = 20;a > 0;a--)

            delay_us(60000);

            do

            {

            a = DS18B20_init();

            }

            while(a);

            dis_temp(temp_get());

            init();

            uinit();

            write_com(0x80+0x0b);

            write_date('0'+shi);

            delay(5);

            write_date('0'+ge);

            delay(5);

            write_date('.');

            delay(5);

            write_date('0'+dian1);

            delay(5);

            write_date('0'+dian2);

            delay(5);

            }

            }

            效果圖:上面的數(shù)字即為當前溫度

            



          關鍵詞: msp430 1602

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();