找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8330|回復(fù): 4
收起左側(cè)

51單片機(jī)簡(jiǎn)易溫度控制器設(shè)計(jì)與制作

[復(fù)制鏈接]
ID:573686 發(fā)表于 2019-6-27 20:07 | 顯示全部樓層 |閱讀模式
1.基于AT89C52單片機(jī)和DS18B02溫度測(cè)量接口的溫度控制調(diào)節(jié)完整電路;
2.采用4位共陽(yáng)極數(shù)碼管顯示設(shè)定溫度值與實(shí)際溫度值(℃);
3.利用蜂鳴器實(shí)現(xiàn)達(dá)到預(yù)設(shè)溫度的報(bào)警

2 總體方案設(shè)計(jì)

2.1 硬件方案

圖1.1系統(tǒng)結(jié)構(gòu)框圖


圖1.1為簡(jiǎn)易溫度控制器的系統(tǒng)結(jié)構(gòu)框圖,由鍵盤(pán),DS18B20溫度采集接口,數(shù)碼管,蜂鳴器,繼電器連接加熱設(shè)備組成。。

2.1.1.溫度檢測(cè)部分

采用美國(guó)DALLAS半導(dǎo)體公司的DS18B20智能型溫度傳感器,使用方便、接口簡(jiǎn)單,與CPU通信采用并口通信方式。

  • 測(cè)量范圍:-55~125℃(在-10~85℃范圍內(nèi)測(cè)量誤差為±0.5℃;12位分辨率時(shí),最多750ms完成溫度值的數(shù)字轉(zhuǎn)換,溫度分辨率為0.0625

結(jié)構(gòu):該器件有3個(gè)引腳:輸入/輸出引腳及電源和地;內(nèi)部有三個(gè)主要器件:64位ROM、溫度傳感器和報(bào)警觸發(fā)器。

  • 電源連接:該器件可由外部5V電源VDD供電,也可以從單總線上取得電源。

圖1.2 DS18B20內(nèi)部結(jié)構(gòu)

圖1.3 DS18B20封裝圖

2.1.2.顯示部分

顯示模塊電路采用4個(gè)共陽(yáng)極八位數(shù)碼管顯示。位選口為單片機(jī) P1.0~P1.3 I/O口,四個(gè)數(shù)碼管共用一組段選口為單片機(jī) P0~P7 I/O口。采用動(dòng)態(tài)顯示方法。電路如圖1.4所示:

圖1.4 數(shù)碼管電路圖


2.1.3.鍵盤(pán)部分

鍵盤(pán)部分采用單一按鍵形式,設(shè)置兩個(gè)鍵:加1鍵、減1鍵用來(lái)調(diào)節(jié)溫度顯示。

圖1.5 鍵盤(pán)電路圖

2.1.4.溫度控制部分

繼電器

2.2 軟件方案

2.2.1.主程序

主要功能是完成DS18的初始化工作,并進(jìn)行讀溫度,將溫度轉(zhuǎn)化為壓縮BCD碼并在顯示器上顯示傳感器實(shí)際溫度。


2.2.2.讀出溫度子程序

讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需要進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫(xiě),其程序框圖如下圖所示:

圖2.1系統(tǒng)程序框圖


3 硬件設(shè)計(jì)與實(shí)踐
3.1 測(cè)量電路

本系統(tǒng)由主控模塊、信號(hào)顯示模塊、溫度檢測(cè)模塊、報(bào)警模塊、設(shè)定報(bào)警溫度和自動(dòng)調(diào)溫6個(gè)模塊。


3.2 硬件連接

圖3.2硬件連接



3.2.1溫度檢測(cè)

                    

模數(shù)轉(zhuǎn)換器ADC0808引腳圖

  電壓信號(hào)模擬溫度信號(hào),通過(guò)ADC0808的轉(zhuǎn)換,將模擬信號(hào)變成數(shù)字信號(hào)傳輸給AT89C52單片機(jī).單片機(jī)根據(jù)程序做出反應(yīng),控制各個(gè)引腳輸出相應(yīng)高低電平信號(hào)使外圍模塊做出相應(yīng)的反應(yīng),從而達(dá)到當(dāng)溫度超出或低于溫度上限時(shí)蜂鳴器報(bào)警,且指示燈點(diǎn)亮,繼電器閉合。


4 軟件設(shè)計(jì)與實(shí)踐

4.1 主程序
  1. void main(void)
  2. {
  3.               unsigned char c=0;
  4.               unsigned char c0=0;
  5.               unsigned long ldata=2500;                            //作為顯示的數(shù)據(jù)            
  6.               while(1)
  7.               {                                                                      //循環(huán)掃描按鍵及顯示
  8.                             c0=c;
  9.                             c=ReadTemperature();
  10.                             c=(c/7);
  11.                             ldata=(ldata-c0+c);
  12.                             switch(ReadKey())
  13.                             {                                                                                                                //讀取鍵值做以下相應(yīng)處理
  14.                             case 1:ldata=ldata+100;                                          //1鍵顯示內(nèi)容加1
  15.                                           break;
  16.                             case 2:ldata=ldata-100;                                          //2鍵顯示內(nèi)容減1
  17.                                           break;
  18.                             case 3:ldata=c;                            //3鍵顯示內(nèi)容清0
  19.                                           break;
  20.                             }                           

  21.                             display(ldata);                            //顯示相應(yīng)的數(shù)值,這里用函數(shù)的形式調(diào)用顯示
  22.                             delay(10);
  23.                             if(c>30)
  24.                                           Warning();
  25.                             else if(c<(ldata/100))
  26.                             {
  27.                                           JDQ=0;
  28.                                           EJG=1;
  29.                                           FMQ=1;
  30.                             }
  31.                             else
  32.                             {            
  33.                                           JDQ=1;
  34.                                           EJG=1;
  35.                                           FMQ=1;
  36.                             }

  37.               }
  38. }
復(fù)制代碼

4.2 子程序

1.鍵盤(pán)部分

  1. unsigned char ReadKey(void)            
  2. {
  3.               unsigned char lkey=0;
  4.               if((P3&0xe0)!=0xe0){              //檢測(cè)所有按鍵是否有按鍵按下
  5.                             FMQ=0;                                                        //按鍵按下則蜂鳴器發(fā)聲
  6.                             delay(10);                                          //有按鍵按下則延時(shí)一段時(shí)間,以消除按鍵拌動(dòng)
  7.                             if(oldkey!=(P3&0xe0)){//檢測(cè)按鍵未松開(kāi)而且不是之前按下的按健就進(jìn)入讀鍵值,否則不作處理
  8.                                           oldkey=P3&0xe0;                            //保存當(dāng)前狀態(tài),為下一次掃描做判斷,請(qǐng)看上一行                           
  9.                                           if(key1==0)
  10.                                                         lkey=1;                            //第一個(gè)鍵按下復(fù)值1
  11.                                           else if(key2==0)
  12.                                                         lkey=2;                            //第二個(gè)鍵按下復(fù)值2
  13.                                           else if(key3==0)
  14.                                                         lkey=3;                            //第三個(gè)鍵按下復(fù)值3
  15.                             }
  16.               }
  17.               else{
  18.                             oldkey=0xe0;                            //如果都沒(méi)有按鍵按下,將復(fù)值初始狀態(tài)
  19.                             FMQ=1;                                                        //無(wú)按鍵按下則退出蜂鳴
  20.               }
  21.               return lkey;
  22. }
  23. 2. 顯示部分
  24. void display(unsigned int da)
  25. {
  26.               P0=0XFF;                                          //
  27.               da=da%10000;            
  28.               switch(l_posit){
  29.               case 0:                            //選擇千位數(shù)碼管,關(guān)閉其它位
  30.                             SMG_q=1;
  31.                             SMG_b=0;            
  32.                             SMG_s=0;                           
  33.                             SMG_g=0;
  34.                             P0=table[da/1000];              //輸出顯示內(nèi)容
  35.                             break;
  36.               case 1:                            //選擇百位數(shù)碼管,關(guān)閉其它位
  37.                             SMG_q=0;
  38.                             SMG_b=1;            
  39.                             SMG_s=0;                           
  40.                             SMG_g=0;
  41.                             P0=table[da%1000/100];
  42.                             break;
  43.               case 2:                            //選擇十位數(shù)碼管,關(guān)閉其它位
  44.                             SMG_q=0;
  45.                             SMG_b=0;            
  46.                             SMG_s=1;                           
  47.                             SMG_g=0;
  48.                             P0=table[da%100/10];
  49.                             break;
  50.               case 3:                            //選擇個(gè)位數(shù)碼管,關(guān)閉其它位
  51.                             SMG_q=0;
  52.                             SMG_b=0;            
  53.                             SMG_s=0;                           
  54.                             SMG_g=1;
  55.                             P0=table[da%10];
  56.                             break;
  57.               }
  58.               l_posit++;                            //每調(diào)用一次將輪流顯示一位
  59.               if(l_posit>3)
  60.                             l_posit=0;              }
復(fù)制代碼


5 調(diào)試及性能分析
5.1調(diào)試分析

  本次設(shè)計(jì)溫度控制器根據(jù)溫度傳感器測(cè)得的溫度值,由軟件查詢判斷是否達(dá)到編程設(shè)定的值,如果超過(guò)溫度上限,即預(yù)置溫度小于當(dāng)前溫度,蜂鳴器響報(bào)警,啟動(dòng)風(fēng)扇以溫度值返回到閾值以下;如果溫度達(dá)到下線閾值,則同樣使溫度返回。

5.2性能分析

1、對(duì)于設(shè)計(jì)采用89C52單片機(jī)作為溫度控制的主CPU芯片,系統(tǒng)硬件設(shè)備結(jié)構(gòu)簡(jiǎn)單合理,成本低,實(shí)時(shí)性好。

2、采用DS18B20作為溫度測(cè)量接口,它是具有單總線接口的數(shù)字溫度傳感器。該器件具有接線簡(jiǎn)單,功耗低,體積小等特點(diǎn)。

3、針對(duì)采用數(shù)碼管顯示溫度值,直觀、穩(wěn)定,易于實(shí)現(xiàn)。

4、溫度控制器的功能還有待進(jìn)一步擴(kuò)充,如高溫?cái)嚯;電路布局、和抗干擾方面。

結(jié)    論

本文給出了一種單片機(jī)實(shí)現(xiàn)簡(jiǎn)易溫度控制系統(tǒng),克服了傳統(tǒng)方法的不足,可以達(dá)到低溫加熱,高溫報(bào)警的效果。該溫度控制系統(tǒng)具有測(cè)量溫度準(zhǔn),調(diào)節(jié)溫度快的優(yōu)點(diǎn)。主要通過(guò)學(xué)習(xí)了DS18B02溫度測(cè)量接口、89C52單片機(jī)、數(shù)碼管顯示等知識(shí),查閱了相關(guān)資料,簡(jiǎn)易溫度控制器的基本要求,低溫上電,高溫報(bào)警,對(duì)溫度上下限進(jìn)行合理地設(shè)置,實(shí)時(shí)顯示溫度。所設(shè)計(jì)的系統(tǒng)具有以下功能:

1、對(duì)于設(shè)計(jì)采用89C52單片機(jī)作為溫度控制的主CPU芯片,系統(tǒng)硬件設(shè)備結(jié)構(gòu)簡(jiǎn)單合理,成本低,實(shí)時(shí)性好。

2、采用DS18B20作為溫度測(cè)量接口,它是具有單總線接口的數(shù)字溫度傳感器。該器件具有接線簡(jiǎn)單,功耗低,體積小等特點(diǎn)。

3、針對(duì)采用數(shù)碼管顯示溫度值,直觀、穩(wěn)定,易于實(shí)現(xiàn)。

4、溫度控制器的功能還有待進(jìn)一步擴(kuò)充,如高溫?cái)嚯;電路布局、和抗干擾方面。

還有很大的提升空間。


調(diào)試系統(tǒng)照片


附錄3 程序全文

完整的Word格式文檔51黑下載地址:
好萊塢的單片機(jī)課程設(shè)計(jì)報(bào)告.doc (2.44 MB, 下載次數(shù): 54)


回復(fù)

使用道具 舉報(bào)

ID:650914 發(fā)表于 2019-11-28 09:02 | 顯示全部樓層
有沒(méi)有清晰一點(diǎn)的原理圖
回復(fù)

使用道具 舉報(bào)

ID:658226 發(fā)表于 2019-12-7 15:19 | 顯示全部樓層
有原理圖和源程序嗎
回復(fù)

使用道具 舉報(bào)

ID:632209 發(fā)表于 2020-9-16 11:15 | 顯示全部樓層
這里有仿真文件嗎
回復(fù)

使用道具 舉報(bào)

ID:869966 發(fā)表于 2020-12-29 09:44 | 顯示全部樓層
顯示第19行有誤,怎么改
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表