久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 單片機(jī)智能溫度檢測(cè)控制系統(tǒng)程序設(shè)計(jì) [打印本頁(yè)]

作者: 各不相    時(shí)間: 2020-9-17 16:35
標(biāo)題: 單片機(jī)智能溫度檢測(cè)控制系統(tǒng)程序設(shè)計(jì)
實(shí)驗(yàn)說(shuō)明:
        根據(jù)自己使用的LCD1602是否帶有轉(zhuǎn)接板,如果帶有轉(zhuǎn)接板的即為4位,需在LCD.H頭文件中
        將宏#define LCD1602_4PINS打開(kāi),我們這里使用的LCD1602是8位,所以默認(rèn)將該宏注釋。
實(shí)驗(yàn)接線(xiàn):
        1,LCD1602液晶模塊-->單片機(jī)管腳
        參考LCD1602液晶顯示實(shí)驗(yàn)接線(xiàn)(開(kāi)發(fā)攻略?xún)?nèi)在對(duì)應(yīng)的實(shí)驗(yàn)章節(jié)內(nèi)實(shí)驗(yàn)現(xiàn)象有接線(xiàn)說(shuō)明)
        2,獨(dú)立按鍵模塊-->單片機(jī)管腳
        K1-->P34
        K2-->P35
        K3-->P32
        3,蜂鳴器模塊-->單片機(jī)管腳
        BEEP-->P15
        4,LED模塊-->單片機(jī)管腳
        D1-->P24
        5,LED模塊-->單片機(jī)管腳
        D1-->P24
        6,繼電器模塊-->單片機(jī)管腳
        RELAY-->P14
        7,直流電機(jī)模塊-->單片機(jī)管腳
        IN1-->P10(參考直流電機(jī)實(shí)驗(yàn)接線(xiàn))
        8,EEPROM模塊-->單片機(jī)管腳
        參考EEPROM實(shí)驗(yàn)接線(xiàn)
        9,DS18B20模塊-->單片機(jī)管腳
        參考DS18B20溫度傳感器實(shí)驗(yàn)接線(xiàn)
        
實(shí)驗(yàn)現(xiàn)象:
        首先它能顯示環(huán)境的溫度并能設(shè)置上下限閥值,這是最基本的功能,系統(tǒng)上電的時(shí)候顯示的是當(dāng)前環(huán)境溫度
        和設(shè)定的溫度閥值,我們可以通過(guò)按鍵來(lái)修改溫度上下限閥值。我們看,按下這個(gè)K1鍵會(huì)進(jìn)入溫度閥值設(shè)置
        界面,每按一下,切換一次閥值設(shè)置(上下閥值)界面,按第3次時(shí),會(huì)自動(dòng)回到主界面,如此循環(huán)。
        在進(jìn)入溫度閥值設(shè)計(jì)界面時(shí),可以通過(guò)K2、K3鍵對(duì)閥值進(jìn)行加減,這里我們只對(duì)溫度整數(shù)部分進(jìn)行設(shè)置,
        小數(shù)部分我們就不需要了,將設(shè)置好的上下限閥值保存到AT24C02(EEPROM)內(nèi),當(dāng)下一次開(kāi)啟系統(tǒng)時(shí)只需
        從AT24C02內(nèi)讀取保存的閥值數(shù)據(jù),而不需要重復(fù)設(shè)置上下限閥值。這樣的話(huà),我們用3個(gè)按鍵就實(shí)現(xiàn)了溫度上下
        限閥值的設(shè)定,這是溫度檢測(cè)控制系統(tǒng)基本的功能。假如我們把溫度上限設(shè)置為32°C,下限設(shè)置為30°C。
        另外還有恒定溫度的功能。當(dāng)設(shè)定好上下限閥值時(shí),系統(tǒng)即會(huì)把當(dāng)前的溫度與設(shè)定的上下限閥值對(duì)比,
        如果高于上限溫度,開(kāi)啟散熱進(jìn)行降溫,同時(shí)報(bào)警;如果低于下限溫度,開(kāi)啟加熱,同時(shí)報(bào)警;
        如果當(dāng)前溫度處于下限和上限溫度之間時(shí),關(guān)閉散熱、加熱及報(bào)警。從而可將溫度控制在閥值的范圍內(nèi)。

單片機(jī)源程序如下:
  1. #include "public.h"
  2. #include "lcd.h"
  3. #include "temp.h"
  4. #include "i2c.h"


  5. sbit k3=P3^2;        //設(shè)置溫度上下限   
  6. sbit k1=P3^4;        //加                          
  7. sbit k2=P3^5;        //減                          

  8. sbit led=P2^4; //報(bào)警指示燈

  9. sbit beep=P1^5;          //蜂鳴器報(bào)警
  10. sbit relay=P1^4;  //加熱設(shè)備
  11. sbit moto=P1^0;   //電機(jī)散熱


  12. char set_templ=22,set_temph=40;  //設(shè)定溫度上下限默認(rèn)值
  13. u16 temp_val;  //檢測(cè)的實(shí)際溫度
  14. u8 mode;  //溫度模式

  15. void Temp_DataPros()
  16. {
  17.         short temp;
  18.         u8 temp_buf[5];
  19.         temp=Ds18b20ReadTemp();
  20.         temp_val=temp;       
  21.         if(temp<0)
  22.         {
  23.                 temp=-temp;
  24.                 LCD_Dispstring(2+5,0,"-");
  25.         }
  26.         else
  27.         {
  28.                 LCD_Dispstring(2+5,0," ");
  29.         }

  30.         temp_buf[0]=temp/100+0x30;
  31.         temp_buf[1]=temp%100/10+0x30;
  32.         temp_buf[2]='.';
  33.         temp_buf[3]=temp%100%10+0x30;
  34.         temp_buf[4]='\0';
  35.         LCD_Dispstring(2+6,0,temp_buf);                 //顯示檢測(cè)的溫度xx.x

  36.         temp_buf[0]=set_temph/10+0x30;
  37.            temp_buf[1]=set_temph%10+0x30;
  38.         temp_buf[2]='\0';
  39.         LCD_Dispstring(5,1,temp_buf);          //顯示設(shè)定的溫度上限值xx

  40.         temp_buf[0]=set_templ/10+0x30;
  41.            temp_buf[1]=set_templ%10+0x30;
  42.         temp_buf[2]='\0';
  43.         LCD_Dispstring(14,1,temp_buf);         //顯示設(shè)定的溫度下限值xx
  44. }



  45. #define  K1_MODE  1
  46. #define  K2_ADD  2
  47. #define  K3_DEC  3

  48. //mode:  0-單次掃描   1-連續(xù)掃描
  49. u8 KEY_Scan(u8 mode)
  50. {
  51.         static u8 key=1;
  52.         if(key&&(k1==0||k2==0||k3==0))
  53.         {
  54.                 delay(1000);   //消抖
  55.                 key=0;
  56.                 if(k3==0)
  57.                 {
  58.                         return K1_MODE;
  59.                 }
  60.                 else if(k1==0)
  61.                 {
  62.                         return K2_ADD;
  63.                 }
  64.                 else if(k2==0)
  65.                 {
  66.                         return K3_DEC;       
  67.                 }
  68.         }
  69.         else if(k1==1&&k2==1&&k3==1)
  70.         {
  71.                 key=1;       
  72.         }
  73.         if(mode)
  74.         {
  75.                 key=1;
  76.         }
  77.         return 0;       
  78. }

  79. void KEY_Pros()
  80. {
  81.         u8 key;
  82.         u8 temph_buf[3];

  83.         key=KEY_Scan(0);
  84.        
  85.         if(key==K1_MODE)   //模式選擇
  86.         {
  87.                 mode++;
  88.                 LCD_Clear();

  89.                 if(mode==1)
  90.                 {
  91.                         LCD_Dispstring(0,0,"SETH:   C");               
  92.                 }
  93.                 else if(mode==2)
  94.                 {
  95.                         LCD_Dispstring(0,1,"SETL:   C");       
  96.                 }
  97.                 else
  98.                 {
  99.                         mode=0;
  100.                         LCD_Dispstring(2,0,"Temp:     C");
  101.                         LCD_Dispstring(0,1,"SETH:  ");
  102.                         LCD_Dispstring(9,1,"SETL:  ");       
  103.                 }
  104.         }
  105.         if(mode==1)         //溫度上限設(shè)置
  106.         {
  107.                 switch(key)       
  108.                 {
  109.                         case K2_ADD:            //加
  110.                                                 set_temph++;
  111.                                                 if(set_temph>=80)set_temph=80;
  112.                                                 break;
  113.                         case K3_DEC:          //減
  114.                                                 set_temph--;
  115.                                                 if(set_temph<=0)set_temph=0;
  116.                                                 break;
  117.                 }

  118.                 temph_buf[0]=set_temph/10+0x30;
  119.                 temph_buf[1]=set_temph%10+0x30;
  120.                 temph_buf[2]='\0';
  121.                    LCD_Dispstring(6,0,temph_buf);
  122.                 At24c02Write(0,set_temph);
  123.         }

  124.         else if(mode==2)  //溫度下限設(shè)置
  125.         {
  126.                 switch(key)       
  127.                 {
  128.                         case K2_ADD:            //加
  129.                                                 set_templ++;
  130.                                                 if(set_templ>=80)set_templ=80;
  131.                                                 break;
  132.                         case K3_DEC:          //減
  133.                                                 set_templ--;
  134.                                                 if(set_templ<=0)set_templ=0;
  135.                                                 break;
  136.                 }

  137.                 temph_buf[0]=set_templ/10+0x30;
  138.                 temph_buf[1]=set_templ%10+0x30;
  139.                 temph_buf[2]='\0';
  140.                    LCD_Dispstring(6,1,temph_buf);
  141.                 At24c02Write(2,set_templ);
  142.         }
  143.        


  144. }



  145. void sound()
  146. {
  147.         u8 i=50;
  148.         while(i--)
  149.         {
  150.                 beep=!beep;
  151.                 delay(10);
  152.         }
  153. }
  154. void TempData_Compare()
  155. {
  156.         if(temp_val>set_temph*10)        //實(shí)際溫度高于上限值   報(bào)警  散熱
  157.         {
  158.                 led=1;
  159.                 moto=1;
  160.                 relay=1;
  161.                 sound();               
  162.         }
  163.         else if(temp_val<set_templ*10)         //實(shí)際溫度低于下限值   報(bào)警  加熱
  164.         {
  165.                 led=1;
  166.                 moto=0;
  167.                 relay=0;
  168.                 sound();               
  169.         }
  170.         else                      //實(shí)際溫度在下限值和上限值之間   取消報(bào)警  取消加熱  取消散熱
  171.         {
  172.                 moto=0;
  173.                 led=0;
  174.                 relay=1;
  175.         }
  176. }

  177. void kai_display()
  178. {
  179.         if(At24c02Read(255)!=18)
  180.         {
  181.                 At24c02Write(0,set_temph);
  182.                 At24c02Write(2,set_templ);
  183.                 At24c02Write(255,18);       
  184.         }
  185.         else
  186.         {
  187.                 set_temph=At24c02Read(0);
  188.                 set_templ=At24c02Read(2);       
  189.         }

  190.         LCD_Dispstring(2,0,"Temp:     C");
  191.         LCD_Dispstring(0,1,"SETH:  ");
  192.         LCD_Dispstring(9,1,"SETL:  ");
  193. }

  194. void main()
  195. {
  196.         moto=0;
  197.         led=0;
  198.         relay=1;

  199.         LCD_Init();
  200.         kai_display();
  201.         while(1)
  202.         {
  203.                 if(mode==0)
  204.                         Temp_DataPros();
  205.                 KEY_Pros();       
  206.                 TempData_Compare();                               
  207.         }
  208. }
復(fù)制代碼

所有程序51hei提供下載:
智能溫度檢測(cè)控制系統(tǒng)設(shè)計(jì).rar (41.86 KB, 下載次數(shù): 31)







歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久国产一区二区三区 | 日韩在线视频一区 | 中文字幕在线观看 | 久久午夜电影 | 国产三区在线观看视频 | 91一区二区三区 | 久久天堂 | caoporn国产 | 伊人激情网 | 一区二区免费在线观看 | 91免费看片| 亚洲第一女人av | 日本久久福利 | 中文字幕一区二区三区精彩视频 | 国产精品欧美一区二区三区 | 欧美一区免费 | 久热国产精品视频 | 中文字幕一区在线观看视频 | 婷婷综合五月天 | 91精品久久 | 日韩精品一区二区三区中文字幕 | 中文字幕在线视频一区二区三区 | 久久一| 九热在线 | 国产精品精品3d动漫 | 成人免费视频 | 欧美成人免费在线 | 亚洲精品电影网在线观看 | 欧美精品乱码99久久影院 | 国产成在线观看免费视频 | 国产精品美女久久久久久免费 | 免费性视频 | 亚洲字幕在线观看 | 国产97色| 亚洲天堂一区二区 | 97精品超碰一区二区三区 | 97精品国产一区二区三区 | 国产一区影院 | 懂色av蜜桃av| 欧美日韩国产在线 | av一区二区在线观看 |