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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機實現上下限的溫度檢測與報警Proteus仿真設計

[復制鏈接]
跳轉到指定樓層
樓主
做的單片機課設,簡單易理解。
使用DS18B20 和 LCD顯示。可實現上下限的溫度報警。
含HEX文件,C語言文檔,proteus仿真,keil文件。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源碼:
  1. #include "reg51.H"
  2. #include "INTRINS.H"
  3. sbit DQ = P3^3;
  4. sbit p3_2 = P3^7;
  5. sbit a = P3^6;
  6. sbit p3_5 = P3^5;
  7. sbit rs=P2^1;
  8. sbit rw=P2^2;
  9. sbit en=P2^3;
  10. unsigned char temp1;//溫度值高位
  11. unsigned char temp0;//溫度值低位
  12. unsigned char idata TMP;
  13. unsigned char idata TMP_d;
  14. unsigned char f;
  15. unsigned char code zc[]="^_^ COSY";
  16. unsigned char code jg[]="HOT";
  17. unsigned char code jc[]="COLD";
  18. unsigned char code  temper[]= "TEMP IS  ";
  19. unsigned char code wendu[]="0123456789";
  20. unsigned char code fuhao[]="C";
  21. unsigned char code jh=0xdf;
  22. float tem;
  23. void delay_18B20(int i)
  24. {
  25.   while(i--);
  26.   return;

  27. }
  28. void delay(unsigned int count)
  29. {
  30.         unsigned int i;
  31.         while(count)
  32.         {
  33.                 i=200;
  34.                 while(i>0)i--;
  35.                 count--;
  36.         }
  37. }
  38. void Delay_us(unsigned char n)
  39. {
  40.         unsigned char i;
  41.         i=0;
  42.         while(i<n)
  43.         {i++;}
  44.         return;
  45. }
  46. void wr_ds18_1(char dat)
  47. {
  48.             signed char  idata i=0;
  49.             unsigned char idata j;
  50.             bit testb;

  51.             for(j=1;j<=8;j++)         
  52.             {
  53.                 testb=dat & 0x01;
  54.                 dat = dat>>1;
  55.                 if(testb)             //寫一
  56.                 {
  57.                             DQ=0;
  58.                              _nop_();
  59.                                 _nop_();
  60.                                 
  61.                             DQ=1;
  62.                           delay_18B20(8);   
  63.                    }
  64.                
  65.                 else                 //寫0
  66.                 {
  67.                             DQ=0;
  68.                             delay_18B20(8);
  69.                   
  70.                             DQ=1;
  71.                              _nop_();
  72.                                 _nop_();
  73.                                  
  74.                 }
  75.             }
  76. }
  77. void Init_18B20(void)
  78. {
  79. //  unsigned char x;
  80.   
  81.    DQ=0;
  82.    delay_18B20(103);
  83.    DQ=1;
  84.    delay_18B20(4);
  85.    delay(1);

  86.   // x=DQ;
  87.   // DQ=0;
  88.   // delay_18B20(480);
  89.   // DQ=1;
  90.    wr_ds18_1(0xcc);
  91.   // wr_ds18_1(0xbe);
  92.    wr_ds18_1(0x44);
  93.    
  94. }



  95. unsigned char ReadByte(void)
  96. {
  97.         unsigned char i,k;
  98.         i=8;
  99.         k=0;
  100.         while(i--)
  101.         {        
  102.                 DQ=1;
  103.         //        Delay_us(1);
  104.         _nop_();
  105.                 _nop_();
  106.             DQ=0;
  107.             k=k>>1;
  108.      
  109.                 DQ=1;
  110.         //        Delay_us(60);
  111.         //        _nop_();
  112.                 if(DQ) k|= 0x80;
  113.                 Delay_us(60);
  114.         }
  115.         return(k);
  116. }


  117. void tempture(void)
  118. {

  119. // delay_18B20(12);
  120. // Init_18B20();
  121. // wr_ds18_1(0xcc);
  122.   //wr_ds18_1(0x44);
  123. // delay_18B20(12);
  124.   //Init_18B20();
  125.    DQ=0;
  126.    delay_18B20(103);
  127.    DQ=1;
  128.    delay_18B20(4);

  129.    delay(1);
  130.   
  131.   wr_ds18_1(0xcc);
  132.   wr_ds18_1(0xbe);
  133.   
  134.   //delay_18B20(12);
  135.   temp0=ReadByte();//diwei
  136.   temp1=ReadByte();//gaowei
  137.   f=temp1&0xf8;
  138.           if(f)
  139.         {
  140.                 temp1=~temp1;
  141.                 if(temp0==0)temp1++;        
  142.                 temp0=~temp0+1;        
  143.         }
  144. tem=(temp1*256+temp0)/16;

  145. }
  146. /********************lcd*****************************/
  147.    void write_com(unsigned char com)
  148. {
  149.    rs=0;
  150.    rw=0;
  151.    P0=com;
  152.    Delay_us(550);
  153.    en=1;
  154.    Delay_us(550);
  155.    en=0;
  156.    
  157. }
  158.    void write_data(unsigned char dat)
  159. {
  160.    rs=1;
  161.    rw=0;
  162.    P0=dat;
  163.    Delay_us(550);
  164.    en=1;
  165.    Delay_us(550);
  166.    en=0;
  167. }
  168. void init1602()
  169. {
  170.   rw=0;
  171.   en=0;
  172.   write_com(0x3c);
  173.   write_com(0x0c);
  174.   write_com(0x06);
  175.   write_com(0x01);
  176.   write_com(0x80);
  177. }
  178. void lcd_clear()
  179. {
  180.    int i,j;
  181.    for(i=0;i<32;i++){ write_data(0); }
  182. }
  183. void main()
  184. {
  185.                                                    
  186.     p3_2=0;
  187.           a=0;
  188.    
  189.           while(1)
  190.           {   
  191.         unsigned char i,j;
  192.         int h,l;
  193.             init1602();                 //lcd初始化
  194.         Init_18B20();               //18B20初始化
  195.         //        lcd_clear();
  196.                 tempture();                                        //使用該函數獲得溫度
  197.             
  198.         if(tem>30)
  199.            {
  200.                                                  p3_2=1;
  201.                                            a=1;
  202.                                                  write_com(0x80);
  203.                                                  for(i=0;i<3;i++)
  204.                                                                 {
  205.                                                                         write_data(jg[i]);
  206.                                                                 }
  207.                                          }
  208.                                 else if (tem<10)
  209.                                          {
  210.                                                  p3_2=1;
  211.                                            a=1;
  212.                                                  write_com(0x80);
  213.                                                  for(i=0;i<4;i++)
  214.                                                                 {
  215.                                                                         write_data(jc[i]);
  216.                                                                 }
  217.                                          }
  218.                     else
  219.                                         {
  220.                                                 p3_2=0;
  221.                                                 a=0;
  222.                                                  //init1602();  
  223.                                                  write_com(0x80);
  224.                                                         for(i=0;i<8;i++)
  225.                                                                 {
  226.                                                                         write_data(zc[i]);
  227.                                                                 }
  228.                                         }
  229.          h=(int)tem/10;
  230.          l=(int)tem%10;
  231.       

  232.         write_com(0x80+0x41);
  233.                                 for(i=0;i<8;i++)
  234.                                                                 {
  235.                                                                         write_data(temper[i]);
  236.                                                                 }
  237.         write_data(wendu[h]);
  238.         write_data(wendu[l]);
  239.                           write_data(jh);
  240.         write_data(fuhao[0]);
  241.                
  242.         delay_18B20(20000);                   //等待轉換結束,不然轉換結果會不穩定
  243.         delay_18B20(20000);      
  244.         
  245.            
  246.                                                                
  247. }
  248. }
復制代碼
全部資料51hei下載地址:
新建文件夾.zip (80.62 KB, 下載次數: 61)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:526896 發表于 2019-5-11 14:11 | 只看該作者
大神 這個程序能改成多點測溫和按鍵調整多個上下限的程序嗎
回復

使用道具 舉報

板凳
ID:66287 發表于 2019-5-17 14:37 | 只看該作者
比較佩服這些不寫注釋的高人,時間久了,你看不累?
回復

使用道具 舉報

地板
ID:521983 發表于 2019-5-23 10:46 | 只看該作者
感謝樓主,不知增么調節上下限?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美一区二区三区国产幕精品 | 午夜视频一区二区三区 | 国产视频在线一区二区 | 久久久久久久一区二区三区 | 欧美国产亚洲一区二区 | 久久精品色欧美aⅴ一区二区 | 日本不卡一区 | 午夜网址 | 中文字幕 国产精品 | 亚州毛片 | 日本一区二区高清视频 | 国产区视频在线观看 | 农夫在线精品视频免费观看 | 国产成人免费在线 | 久久久久久九九九九 | 做a网站| 亚洲午夜av| 久久久久成人精品亚洲国产 | 国产色网站 | 国产精品爱久久久久久久 | 涩涩操| 免费一区 | av日韩在线播放 | 伊人久久一区二区 | 国产婷婷精品 | 三级成人在线 | 99久久免费精品国产男女高不卡 | 日本三级线观看 视频 | 午夜视频在线播放 | 91网站视频在线观看 | 色综合色综合色综合 | 欧美一区二区小视频 | 成年人免费在线视频 | 91免费福利在线 | 久久视频精品 | 欧美久久电影 | 日本aa毛片a级毛片免费观看 | 日韩一区二区在线观看 | 精品乱子伦一区二区三区 | 99这里只有精品视频 | 天天干成人网 |