基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)說(shuō)明_第1頁(yè)
基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)說(shuō)明_第2頁(yè)
基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)說(shuō)明_第3頁(yè)
基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)說(shuō)明_第4頁(yè)
基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)說(shuō)明_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)一課題選擇隨著時(shí)代的發(fā)展,控制智能化,儀器小型化,功耗微量化得到廣泛關(guān)注。單片機(jī)控制系統(tǒng)無(wú)疑在這方面起到了舉足輕重的作用。單片機(jī)的應(yīng)用系統(tǒng)設(shè)計(jì)業(yè)已成為新的技術(shù)熱點(diǎn),其中數(shù)字溫度計(jì)就是一個(gè)典型的例子,它可廣泛應(yīng)用與生產(chǎn)生活的各個(gè)方面,具有巨大的市場(chǎng)前景。二設(shè)計(jì)目的1. 理解掌握51單片機(jī)的功能和實(shí)際應(yīng)用。2. 掌握仿真開發(fā)軟件的使用。3. 掌握數(shù)字式溫度計(jì)電路的設(shè)計(jì)、組裝與調(diào)試方法。三實(shí)驗(yàn)要求1. 以51系列單片機(jī)為核心器件,組成一個(gè)數(shù)字式溫度計(jì)。2. 采用數(shù)字式溫度傳感器為檢測(cè)器件,進(jìn)行單點(diǎn)溫度檢測(cè)。3. 溫度顯示采用4位LED數(shù)碼管顯示,三位整數(shù),一位小數(shù)。四設(shè)

2、計(jì)思路1. 根據(jù)設(shè)計(jì)要求,選擇STC89C51RC單片機(jī)為核心器件。2. 溫度檢測(cè)采用DS18B20數(shù)字式溫度傳感器。與單片機(jī)的接口為P3.6引腳。3. 采用usb數(shù)據(jù)線連接充電寶供電,接電后由按鈕開關(guān)控制電路供電。硬件電路設(shè)計(jì)總體框圖為圖1:五系統(tǒng)的硬件構(gòu)成與功能1. 主控制器單片機(jī)STC89C51RC具有低電壓供電和體積小等特點(diǎn),有40個(gè)引腳,其仿真圖像如下圖所示:2. 顯示電路顯示電路采用4位共陽(yáng)LED數(shù)碼管,從P3口RXD,TXD串口輸出段碼。LED數(shù)碼管在仿真軟件中如下圖所示:3. 溫度傳感器DS18B20是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電

3、阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)912位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下:1. 獨(dú)特的單線接口僅需一個(gè)端口引腳進(jìn)行通訊。2. 簡(jiǎn)單的多點(diǎn)分布應(yīng)用。3. 無(wú)需外部器件。4. 可通過(guò)數(shù)據(jù)線供電。5. 零待機(jī)功耗。6. 測(cè)溫圍-55+125攝氏度。其電路圖如下圖所示:在仿真軟件中如下圖所示:DS18B20的測(cè)溫原理圖如下圖所示:在正常測(cè)溫情況下,DS18B20的測(cè)溫分辨力為0.5攝氏度,可采用下述方法獲得高分辨率的溫度測(cè)量結(jié)果。:首先用DS18B20提供的讀暫存器指令(BEH)讀出以0.5攝氏度為分辨率的溫度測(cè)量結(jié)果,然后切去測(cè)量結(jié)果中的最低

4、有效位(LSB),得到所測(cè)實(shí)際溫度的整數(shù)部分Tz,然后再利用BEH指令取計(jì)數(shù)器1的計(jì)數(shù)剩余值Cs和每度計(jì)數(shù)值CD??紤]到DS18B20測(cè)量溫度的整數(shù)部分以0.25、0.75攝氏度為進(jìn)位界限的關(guān)系,實(shí)際溫度Ts可以用下式計(jì)算:Ts=(Tz-0.25)+(CD-Cs)/CD六系統(tǒng)整體硬件電路根據(jù)設(shè)計(jì)要求與設(shè)計(jì)思路,硬件電路設(shè)計(jì)框圖如下圖所示,在仿真軟件Proteus上完成,其中LED數(shù)碼管以動(dòng)態(tài)掃描法實(shí)現(xiàn)溫度顯示,由四個(gè)PNP型晶體管Q2,Q3,Q4,Q5和8個(gè)電阻組成?;鶚O與單片機(jī)的P1.0,P1.1,P1.2連接,DS18B20的數(shù)據(jù)I/O端與單片機(jī)P3.6引腳連接。外部晶振為12MHZ。七系

5、統(tǒng)程序設(shè)計(jì)數(shù)字式溫度計(jì)的應(yīng)用程序主要包括主程序,溫度檢測(cè)程序,溫度轉(zhuǎn)換程序,LED顯示程序等。其思路如下圖所示:八測(cè)量與其結(jié)果分析1. Proteus仿真結(jié)果軟件方面,在Proteus編譯下進(jìn)行,源程序編譯與仿真調(diào)試。在軟件中選定傳感器后可對(duì)其進(jìn)行環(huán)境溫度設(shè)置,如下圖,將環(huán)境溫度設(shè)為34.9.2. 硬件測(cè)試結(jié)果在硬件測(cè)試方面,檢查電路板與焊接的質(zhì)量情況,在焊接無(wú)誤后通電檢查L(zhǎng)ED顯示器。其中成品圖如圖所示:通電后,室溫下LED的示數(shù)如圖所示九設(shè)計(jì)心得體會(huì)本次實(shí)驗(yàn)對(duì)我們組來(lái)說(shuō)是一次難得的經(jīng)歷,首先是第一次接觸了仿真軟件Proteus,在使用時(shí)經(jīng)歷了很多次失敗,因?yàn)檫@款軟件與以前使用過(guò)的軟件有很大

6、不同,使用時(shí)不停出錯(cuò),接線時(shí)由于原件放置不合理而接的雜亂無(wú)章,輸入源程序時(shí)還算順利,顯示結(jié)果比較滿意。其次是程序設(shè)計(jì),我們?cè)趨⒖紕e人成功先例的基礎(chǔ)上根據(jù)自己設(shè)計(jì)的需要進(jìn)行編程,其中經(jīng)歷了不少曲折,最后我的收獲是編程一定要細(xì)心,針對(duì)每一個(gè)細(xì)節(jié),稍有疏忽程序就不能正常運(yùn)行。在這次的實(shí)踐與學(xué)習(xí)中,盡管期間困難重重,但我們還是從中學(xué)習(xí)了不少新的知識(shí)和技能,也體會(huì)到了經(jīng)歷失敗最終成功的喜悅??傊ㄟ^(guò)這次電工電子綜合設(shè)計(jì),我收獲了很多,我希望自己在今后的各項(xiàng)研究工作中也堅(jiān)持這種精神。十附錄 源程序#include<reg52.h>#include <intrins.h>#defi

7、ne  uchar  unsigned  char #define  uint   unsigned  intsbit  DATA = P11; /DS18B20接入口uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/共陰極字型碼int temp;  /溫度值int ss;  

8、60;             /中間的一個(gè)變量int dd;int j;uchar data b;/定時(shí)器中斷次數(shù)uchar data buf4;/字型顯示中間變量int alarmH=320;          /默認(rèn)報(bào)警值int alarmL=100;/定義開關(guān)的接入口sbit  k1=P25;/+sbit  k2=P26;/-sbit  k3=P27;/確認(rèn)sbit  k4=P24; /切

9、換sbit  bell=P10; /蜂鳴器sbit  HLight=P12; /正溫指示燈sbit  LLight=P13; /負(fù)溫度指示燈sbit  warn=P14;  /報(bào)警指示燈sbit  Red=P16;          /溫度上限設(shè)置指示燈sbit  Green=P17; /溫度下限設(shè)置指示燈bit set=0;        /初始化bit

10、Flag=0;        /設(shè)置標(biāo)志int n;/函數(shù)的聲明區(qū)void key_to1();void key_to2();void delay(uint); void key();void Show();/函數(shù)的定義區(qū)/*延時(shí)子函數(shù)*/void delay(uint num)        while(num-) ;/DS18b20溫度傳感器所需函數(shù),分為初始化,讀寫字節(jié),讀取溫度4個(gè)函數(shù)Init_DS18B20(void)            &#

11、160;      /傳感器初始化        uchar x=0;        DATA = 1;    /DQ復(fù)位        delay(10);  /稍做延時(shí)        DATA = 0;    /單片機(jī)將DQ拉低        delay(80); /精確延時(shí) 大于 480us 

12、   /450        DATA = 1;    /拉高總線        delay(20);        x=DATA;      /稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗        delay(30);ReadOneChar(void)  /讀一個(gè)字節(jié)        ucha

13、r i=0;        uchar dat = 0;        for (i=8;i>0;i-)                          DATA = 0; / 給脈沖信號(hào)                  dat>>=1; 

14、0;                DATA = 1; / 給脈沖信號(hào)                  if(DATA)                   dat|=0x80;                  de

15、lay(8);                return(dat);WriteOneChar(unsigned char dat)        /寫一個(gè)字節(jié)        uchar i=0;        for (i=8; i>0; i-)                   

16、;       DATA = 0;                  DATA = dat&0x01;          delay(10);          DATA = 1;          dat>>=1;       

17、         delay(8);int ReadTemperature(void) /讀取溫度        uchar a=0;        uchar b=0;        int t=0;        float tt=0;        Init_DS18B20();        WriteOneC

18、har(0xCC); / 跳過(guò)讀序號(hào)列號(hào)的操作        WriteOneChar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換        Init_DS18B20();        WriteOneChar(0xCC); /跳過(guò)讀序號(hào)列號(hào)的操作        WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度        a=ReadOneChar();

19、/低位        b=ReadOneChar();/高位        t=b;        t<<=8;        t=t|a;        tt=t*0.0625;        t= tt*10+0.5;         return(t);void  display0

20、0()     /*顯示負(fù)值子函數(shù)            dd=-(temp-1);    buf1=dd/100;        buf2=dd/100;        buf3=dd%100/10;        buf0=dd%10;        /動(dòng)態(tài)顯示       

21、 for(j=0;j<5;j+)            P2=0xff;                                    / 初始燈為滅的    P0=0x00;        P2=0xfd; /顯示小數(shù)點(diǎn)      &

22、#160; P0=0x80; /顯示小數(shù)點(diǎn)        delay(100);                    P2=0xff;  / 初始燈為滅的    P0=0x00;    P2=0xf7; /片選LCD1    P0=0x40;        delay(100);        P

23、2=0xff;    P0=0x00;    P2=0xfb;  /片選LCD2    P0=tablebuf2;        delay(100);        P2=0xff;    P0=0x00;        P2=0Xfd;/片選LCD3        P0=tablebuf3;      &

24、#160; delay(100);        P2=0xff;    P0=0x00;        P2=0Xfe;        P0=tablebuf0;                  /片選LCD4                delay(100); 

25、       P2=0xff;       /顯示正值子函數(shù)void  display()                        buf1=temp/1000;/顯示百位        buf2=temp/100%10;/顯示十位        buf3=temp%100/10;/顯示個(gè)位 

26、       buf0=temp%10; /小數(shù)位        for(j=0;j<3;j+)                 P2=0xff;                                    / 初始燈為滅的 

27、;   P0=0x00;        P2=0xfd; /顯示小數(shù)點(diǎn)        P0=0x80; /顯示小數(shù)點(diǎn)        delay(300);                    P2=0xff;                     

28、;               / 初始燈為滅的    P0=0x00;    P2=0xf7;                                     /片選LCD1    P0=tablebuf1;  

29、0;     delay(300);        P2=0xff;    P0=0x00;    P2=0xfb;                              /片選LCD2    P0=tablebuf2;        delay(300)

30、;        P2=0xff;    P0=0x00;        P2=0Xfd;                  /片選LCD3        P0=tablebuf3;        delay(300);        P2=0xff;   

31、P0=0x00;        P2=0Xfe;        P0=tablebuf0;                  /片選LCD4                delay(300);        P2=0xff;        void key(

32、)        /按鍵掃描子程序   if(k1!=1)                   delay(20);           if(k1!=1)                           while(k1!=1)

33、60;                  key_to1();                    for(n=0;n<8;n+)                    Show();          

34、;                                if(k2!=1)                        delay(20);                if(k2!=1)  &#

35、160;                               while(k2!=1)                        key_to2();                       &

36、#160;   for(n=0;n<8;n+)                      Show();                                                 

37、                                       if(k3!=1)                TR0=1; /復(fù)位,開定時(shí)        temp=ReadTemperature();    &#

38、160;           if(k4!=1)          delay(20);           if(k4!=1)             while(k4!=1);              set=!set;      &

39、#160;            if(set=0)                   Red=0;Green=1;                   else Green=0;Red=1;                    

40、60;    void key_to1()            TR0=0;               /關(guān)定時(shí)器        temp+=10;                if(temp>=1100)    &#

41、160;              temp=-550;        if(set=0)                alarmH=temp;                else alarmL=temp;        void key_to2() 

42、          TR0=0;       /關(guān)定時(shí)器        temp-=10;                if(temp<=-550)                    temp=1100; 

43、      if(set=0)                alarmH=temp;                else alarmL=temp;void alarm(void)    if(temp>alarmH|temp<alarmL)            /bell=1; 

44、           /delay(50);                /bell=0;                Flag=1;     else Flag=0;logo()/開機(jī)的Logo     P0=0x40;    P2=0xf7;  

45、60;     delay(50);    P2=0xfb;        delay(50);        P2=0Xfd;        delay(50);        P2=0Xfe;        delay(50);    P1 = 0xff;         /

46、關(guān)閉顯示void Show()  /顯示函數(shù),分別表示溫度正負(fù)值            if(temp>=0)                HLight=1;LLight=0;display();                if(temp<0)                HLight=0;LLight=1;display00();void  main()            TCO

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論