欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8288|回復: 4
打印 上一主題 下一主題
收起左側

51單片機簡易溫度控制器設計與制作

[復制鏈接]
跳轉到指定樓層
樓主
ID:573686 發表于 2019-6-27 20:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1.基于AT89C52單片機和DS18B02溫度測量接口的溫度控制調節完整電路;
2.采用4位共陽極數碼管顯示設定溫度值與實際溫度值(℃);
3.利用蜂鳴器實現達到預設溫度的報警

2 總體方案設計

2.1 硬件方案

圖1.1系統結構框圖


圖1.1為簡易溫度控制器的系統結構框圖,由鍵盤,DS18B20溫度采集接口,數碼管,蜂鳴器,繼電器連接加熱設備組成。。

2.1.1.溫度檢測部分

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

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

結構:該器件有3個引腳:輸入/輸出引腳及電源和地;內部有三個主要器件:64位ROM、溫度傳感器和報警觸發器。

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

圖1.2 DS18B20內部結構

圖1.3 DS18B20封裝圖

2.1.2.顯示部分

顯示模塊電路采用4個共陽極八位數碼管顯示。位選口為單片機 P1.0~P1.3 I/O口,四個數碼管共用一組段選口為單片機 P0~P7 I/O口。采用動態顯示方法。電路如圖1.4所示:

圖1.4 數碼管電路圖


2.1.3.鍵盤部分

鍵盤部分采用單一按鍵形式,設置兩個鍵:加1鍵、減1鍵用來調節溫度顯示。

圖1.5 鍵盤電路圖

2.1.4.溫度控制部分

繼電器

2.2 軟件方案

2.2.1.主程序

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


2.2.2.讀出溫度子程序

讀出溫度子程序的主要功能是讀出RAM中的9字節,在讀出時需要進行CRC校驗,校驗有錯時不進行溫度數據的改寫,其程序框圖如下圖所示:

圖2.1系統程序框圖


3 硬件設計與實踐
3.1 測量電路

本系統由主控模塊、信號顯示模塊、溫度檢測模塊、報警模塊、設定報警溫度和自動調溫6個模塊。


3.2 硬件連接

圖3.2硬件連接



3.2.1溫度檢測

                    

模數轉換器ADC0808引腳圖

  電壓信號模擬溫度信號,通過ADC0808的轉換,將模擬信號變成數字信號傳輸給AT89C52單片機.單片機根據程序做出反應,控制各個引腳輸出相應高低電平信號使外圍模塊做出相應的反應,從而達到當溫度超出或低于溫度上限時蜂鳴器報警,且指示燈點亮,繼電器閉合。


4 軟件設計與實踐

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

  21.                             display(ldata);                            //顯示相應的數值,這里用函數的形式調用顯示
  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. }
復制代碼

4.2 子程序

1.鍵盤部分

  1. unsigned char ReadKey(void)            
  2. {
  3.               unsigned char lkey=0;
  4.               if((P3&0xe0)!=0xe0){              //檢測所有按鍵是否有按鍵按下
  5.                             FMQ=0;                                                        //按鍵按下則蜂鳴器發聲
  6.                             delay(10);                                          //有按鍵按下則延時一段時間,以消除按鍵拌動
  7.                             if(oldkey!=(P3&0xe0)){//檢測按鍵未松開而且不是之前按下的按健就進入讀鍵值,否則不作處理
  8.                                           oldkey=P3&0xe0;                            //保存當前狀態,為下一次掃描做判斷,請看上一行                           
  9.                                           if(key1==0)
  10.                                                         lkey=1;                            //第一個鍵按下復值1
  11.                                           else if(key2==0)
  12.                                                         lkey=2;                            //第二個鍵按下復值2
  13.                                           else if(key3==0)
  14.                                                         lkey=3;                            //第三個鍵按下復值3
  15.                             }
  16.               }
  17.               else{
  18.                             oldkey=0xe0;                            //如果都沒有按鍵按下,將復值初始狀態
  19.                             FMQ=1;                                                        //無按鍵按下則退出蜂鳴
  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:                            //選擇千位數碼管,關閉其它位
  30.                             SMG_q=1;
  31.                             SMG_b=0;            
  32.                             SMG_s=0;                           
  33.                             SMG_g=0;
  34.                             P0=table[da/1000];              //輸出顯示內容
  35.                             break;
  36.               case 1:                            //選擇百位數碼管,關閉其它位
  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:                            //選擇十位數碼管,關閉其它位
  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:                            //選擇個位數碼管,關閉其它位
  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++;                            //每調用一次將輪流顯示一位
  59.               if(l_posit>3)
  60.                             l_posit=0;              }
復制代碼


5 調試及性能分析
5.1調試分析

  本次設計溫度控制器根據溫度傳感器測得的溫度值,由軟件查詢判斷是否達到編程設定的值,如果超過溫度上限,即預置溫度小于當前溫度,蜂鳴器響報警,啟動風扇以溫度值返回到閾值以下;如果溫度達到下線閾值,則同樣使溫度返回。

5.2性能分析

1、對于設計采用89C52單片機作為溫度控制的主CPU芯片,系統硬件設備結構簡單合理,成本低,實時性好。

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

3、針對采用數碼管顯示溫度值,直觀、穩定,易于實現。

4、溫度控制器的功能還有待進一步擴充,如高溫斷電;電路布局、和抗干擾方面。

結    論

本文給出了一種單片機實現簡易溫度控制系統,克服了傳統方法的不足,可以達到低溫加熱,高溫報警的效果。該溫度控制系統具有測量溫度準,調節溫度快的優點。主要通過學習了DS18B02溫度測量接口、89C52單片機、數碼管顯示等知識,查閱了相關資料,簡易溫度控制器的基本要求,低溫上電,高溫報警,對溫度上下限進行合理地設置,實時顯示溫度。所設計的系統具有以下功能:

1、對于設計采用89C52單片機作為溫度控制的主CPU芯片,系統硬件設備結構簡單合理,成本低,實時性好。

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

3、針對采用數碼管顯示溫度值,直觀、穩定,易于實現。

4、溫度控制器的功能還有待進一步擴充,如高溫斷電;電路布局、和抗干擾方面。

還有很大的提升空間。


調試系統照片


附錄3 程序全文

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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:650914 發表于 2019-11-28 09:02 | 只看該作者
有沒有清晰一點的原理圖
回復

使用道具 舉報

板凳
ID:658226 發表于 2019-12-7 15:19 | 只看該作者
有原理圖和源程序嗎
回復

使用道具 舉報

地板
ID:632209 發表于 2020-9-16 11:15 | 只看該作者
這里有仿真文件嗎
回復

使用道具 舉報

5#
ID:869966 發表于 2020-12-29 09:44 | 只看該作者
顯示第19行有誤,怎么改
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表