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

下載本文檔

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

文檔簡介

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

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

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

4、果,然后切去測量結(jié)果中的最低有效位(LSB),得到所測實(shí)際溫度的整數(shù)部分Tz,然后再利用BEH指令取計(jì)數(shù)器1的計(jì)數(shù)剩余值Cs和每度計(jì)數(shù)值CD??紤]到DS18B20測量溫度的整數(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ù)碼管以動態(tài)掃描法實(shí)現(xiàn)溫度顯示,由四個PNP型晶體管Q2,Q3,Q4,Q5和8個電阻組成?;鶚O與單片機(jī)的P1.0,P1.1,P1.2連接,DS18B20的數(shù)據(jù)I/O端與單片機(jī)P3.6引腳連接

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

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

7、ins.h>#define  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

8、 ss;                /中間的一個變量int dd;int j;uchar data b;/定時器中斷次數(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 &#

9、160;k4=P24; /切換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;      &

10、#160; /初始化bit 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ù)*/void delay(uint num)        while(num-) ;/DS18b20溫度傳感器所需函數(shù),分為初始化,讀寫字節(jié),讀取溫度4個函數(shù)Init_DS18B20(void)        &#

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

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

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

14、;=1;                  DATA = 1; / 給脈沖信號                  if(DATA)                   dat|=0x80;              &#

15、160;   delay(8);                return(dat);WriteOneChar(unsigned char dat)        /寫一個字節(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();      &#

18、160; WriteOneChar(0xCC); / 跳過讀序號列號的操作        WriteOneChar(0x44); / 啟動溫度轉(zhuǎn)換        Init_DS18B20();        WriteOneChar(0xCC); /跳過讀序號列號的操作        WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度        a=

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

20、 display00()     /*顯示負(fù)值子函數(shù)            dd=-(temp-1);    buf1=dd/100;        buf2=dd/100;        buf3=dd%100/10;        buf0=dd%10;        /動態(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);    &

23、#160;   P2=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                del

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

26、10;/顯示個位        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=tablebu

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

30、60; delay(300);        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;      &#

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

33、hile(k1!=1)                   key_to1();                    for(n=0;n<8;n+)                    Show();      

34、0;                                   if(k2!=1)                        delay(20);                if(k

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

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

37、                                           if(k3!=1)                TR0=1; /復(fù)位,開定時        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)定時器        temp+=10;                if(temp>=1100)&#

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

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

43、p=1100;        if(set=0)                alarmH=temp;                else alarmL=temp;void alarm(void)    if(temp>alarmH|temp<alarmL)            

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

45、xf7;        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()            TC

溫馨提示

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

最新文檔

評論

0/150

提交評論