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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機DS18B20溫度超出閾值報警,調上下限程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:228755 發表于 2017-8-23 15:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
DS18B20溫度,調上下限,數碼管顯示,超出閾值報警

單片機源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. bit flag;
  6. sbit ds=P2^2;
  7. sbit beep=P1^0;
  8. uint temp;
  9. sbit led3=P1^2;
  10. sbit dula=P2^6;
  11. sbit wela=P2^7;
  12. sbit key1=P3^4;
  13. sbit key2=P3^6;
  14. sbit key3=P3^7;
  15. uchar num,num_shang=0,num_xia=0,numled,flag_qiehuan;
  16. uchar code table_du[]={
  17. 0x3f,0x06,0x5b,0x4f,
  18. 0x66,0x6d,0x7d,0x07,
  19. 0x7f,0x6f,0x77,0x7c,
  20. 0x39,0x5e,0x79,0x71};
  21. void delay(xms)                                   //延時函數
  22. {
  23.         uint i,j;
  24.         for(i=xms;i>0;i--)
  25.                 for(j=100;j>0;j--);
  26. }
  27. void delayus(uint t)
  28. {
  29.         while(t--);
  30. }
  31. void init()                                                   //初始化函數
  32. {
  33.         TMOD=0x01;                                                   //設置定時器0位工作方式(00000001)
  34.         TH0=(65536-22500)/256;                           //裝初值
  35.         TL0=(65536-22500)%256;                          
  36.         EA=1;                                                             //開總中斷
  37.         ET0=1;                                                           //開定時器0中斷
  38.         TR0=1;
  39. }
  40. void display_shumaguan()                                        //顯示子函數,中間兩位數碼管
  41. {                                                                               
  42.         uchar qian,bai,shi,ge;;
  43.         qian=num_shang/10;                                   //分離要顯示的函數
  44.         bai=num_shang%10;
  45.         dula=1;
  46.         P0=table_du[qian];                                                 //送千位段選
  47.         dula=0;
  48.         P0=0xff;                                                         //送位選數據前關閉所有顯示
  49.         wela=1;                                                                 
  50.         P0=0xfb;                                                         //送位選數據
  51.         wela=0;
  52.         delay(4);
  53.         dula=1;                                                                 //送各位段選函數
  54.         P0=table_du[bai];
  55.         dula=0;
  56.         P0=0xff;
  57.         wela=1;
  58.         P0=0xf7;
  59.         wela=0;
  60.         delay(4);
  61.        
  62.         shi=num_xia/10;
  63.         ge=num_xia%10;
  64.         dula=1;
  65.         P0=table_du[shi];
  66.         dula=0;
  67.         P0=0xff;
  68.         wela=1;
  69.         P0=0xef;
  70.         wela=0;
  71.         delay(4);
  72.         dula=1;
  73.         P0=table_du[ge];
  74.         dula=0;
  75.         P0=0xff;
  76.         wela=1;
  77.         P0=0xdf;
  78.         wela=0;
  79. //        delay(1);
  80. }

  81. void ds_reset()           //復位函數
  82. {
  83.         ds=1;
  84.         delayus(5);     //         延時
  85.         ds=0;
  86.         delayus(80);
  87.         ds=1;
  88.         delayus(14);
  89.         if(ds==0)
  90.                 flag=1;
  91.         else
  92.                 flag=0;                                //flag作為標志位,等1表示18b20存在
  93.         delayus(20);
  94. }
  95. bit ds_read_bit(void)                        //讀一位數據函數
  96. {
  97.         bit dat;
  98.         ds=0;
  99.         _nop_();                                   //延時機器周期
  100.         _nop_();
  101.         ds=1;                                                //釋放總線
  102.         _nop_();
  103.         dat=ds;
  104.         delayus(10);               //延時100us
  105.         return dat;
  106. }
  107. uchar ds_read_byte()                   //讀一個字節函數
  108. {
  109.         uchar i,j,k;
  110.         for(i=0;i<8;i++)                  //一個字節8位組成,循環八次
  111.         {
  112.                 j=ds_read_bit();
  113.                 k=(j<<7)|(k>>1);                //讀出的數據最低位在最前面
  114.         }
  115.         return k;
  116. }
  117. void ds_write_byte(uchar dat)      //寫一個字節的函數
  118. {
  119.         uchar i;
  120.         for(i=0;i<8;i++)                        //循環八位將一個字節由低到高寫入
  121.         {
  122.                 ds=0;
  123.                 _nop_();
  124.                 ds=dat&0x01;                        //保留dat的最低位
  125.                 delayus(6);
  126.                 ds=1;                 //釋放總線
  127.                 dat=dat>>1;
  128.         }
  129.         delayus(6);
  130. }
  131. uint read_temp()                //讀取溫度函數
  132. {
  133.         uchar a,b;
  134.         ds_reset();
  135.         ds_write_byte(0xcc);
  136.         ds_write_byte(0xbe);
  137.         a=ds_read_byte();           //讀低八位
  138.         b=ds_read_byte();                        //讀高八位
  139.         temp=b;
  140.         temp=temp<<8;
  141.         temp=temp|a;
  142.         temp=temp*0.0625;                //得到實際溫度值
  143.         return temp;
  144. }
  145. void display(uint temp)
  146. {
  147.         P0=table_du[temp/10];
  148.         dula=1;
  149.         dula=0;
  150.         P0=0xff;
  151.         wela=1;
  152.         P0=0xfe;
  153.         wela=0;
  154.         delay(4);
  155.         P0=table_du[temp%10];
  156.         dula=1;
  157.         dula=0;
  158.         P0=0xff;
  159.         wela=1;
  160.         P0=0xfd;
  161.         wela=0;
  162. //        delay(1);
  163. }
  164. void keyscan()
  165. {
  166.         if(key1==0)//按鍵1處理
  167.         {        
  168.                 if(flag_qiehuan==0)
  169.                 {
  170.                         flag_qiehuan=1;                                           //切換設置上限                       
  171.                 }               
  172.                 else if(flag_qiehuan==1)
  173.                 {
  174.                         flag_qiehuan=0;                                        //切換設置下限
  175.                 }                       
  176.         }       
  177.         if((key2==0)&&(flag_qiehuan==0))                                                                                          //k2長按
  178.         {       
  179.                 delay(30);
  180.                 if((key2==0)&&(flag_qiehuan==0))
  181.                 {                         
  182.                         num_xia++;
  183.                 }       
  184.         }
  185.         else if((key2==0)&&(flag_qiehuan==0))                                                                           //K2短按
  186.         {
  187.                 delay(3);
  188.                 if((key2==0)&&(flag_qiehuan==0))
  189.                 {
  190.                         num_xia++;
  191.                         while(!key2);                 
  192.                 }
  193.         }
  194.         if((key3==0)&&(flag_qiehuan==0))
  195.         {
  196.                 delay(30);
  197.                 if((key3==0)&&(flag_qiehuan==0))
  198.                 {
  199.                         num_xia--;
  200.                 }       
  201.         }
  202.         else if((key3==0)&&(flag_qiehuan==0))                                                                                //K3短按
  203.         {
  204.                 delay(3);
  205.                 if((key3==0)&&(flag_qiehuan==0))
  206.                 {
  207.                         num_xia--;
  208.                         while(!key3);                 
  209.                 }       
  210.         }
  211.         if((key2==0)&&(flag_qiehuan==1))                                         
  212.         {
  213.                 delay(30);
  214.                 if((key2==0)&&(flag_qiehuan==1))
  215.                 {
  216.                         num_shang++;
  217.                 }       
  218.         }
  219.         else if((key2==0)&&(flag_qiehuan==1))                                  
  220.         {
  221.                 delay(3);
  222.                 if((key2==0)&&(flag_qiehuan==1))
  223.                 {
  224.                         num_shang++;
  225.                         while(!key2);                 
  226.                 }
  227.         }
  228.         if((key3==0)&&(flag_qiehuan==1))
  229.         {
  230.                 delay(30);
  231.                 if((key3==0)&&(flag_qiehuan==1))
  232.                 {
  233.                         num_shang--;
  234.                 }
  235.         }       
  236.         else if((key3==0)&&(flag_qiehuan==1))
  237.         {
  238.                 delay(3);
  239.                 if((key3==0)&&(flag_qiehuan==1))
  240.                 {
  241.                         num_shang--;
  242.                         while(!key3);                 
  243.                 }
  244.         }       
  245. }
  246. void deal()
  247. {
  248.         if((temp>=num_xia)||(temp<=num_shang))
  249.         {
  250.                 beep=0;
  251.         }
  252.         if((temp<num_xia)&&(temp>num_shang))
  253. ……………………

  254. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
完全品.zip (39.28 KB, 下載次數: 108)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:189773 發表于 2017-8-26 10:27 | 只看該作者
不錯不錯。
回復

使用道具 舉報

板凳
ID:189773 發表于 2017-8-26 10:28 | 只看該作者
很詳細,正好有需要。
回復

使用道具 舉報

地板
ID:294554 發表于 2018-5-5 16:01 | 只看該作者
很詳細
回復

使用道具 舉報

5#
ID:323386 發表于 2018-5-10 11:43 | 只看該作者
感謝分享,借鑒學習
回復

使用道具 舉報

6#
ID:357000 發表于 2018-7-18 16:14 | 只看該作者
學到了
回復

使用道具 舉報

7#
ID:80372 發表于 2018-10-13 11:17 | 只看該作者
很好、不錯
回復

使用道具 舉報

8#
ID:18797 發表于 2021-7-13 09:47 | 只看該作者
做了個小溫度計,放在窗外,夜深了的時候,當室外溫度低于25度的時候,關閉空調,很不錯的
回復

使用道具 舉報

9#
ID:18797 發表于 2021-7-13 09:54 | 只看該作者
正在擴展程序,精確到小數后一位,看能否成功
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费国产视频 | 亚洲a在线观看 | 蜜桃免费一区二区三区 | 国产欧美一区二区三区日本久久久 | 午夜资源| 久久久久久久久久久91 | 小h片免费观看久久久久 | 欧美精品一区三区 | 黄色一级电影免费观看 | 黄视频网站免费观看 | 男人的天堂在线视频 | 欧美11一13sex性hd | 在线欧美 | 久久国产99| 欧美男人天堂 | 国产女人第一次做爰毛片 | 国产重口老太伦 | 国产日韩av一区二区 | 在线不卡| 天天曰天天干 | 免费一二区 | 日本久久网| 欧美精品三区 | 日本高清不卡视频 | 黄色大片视频 | 国产一区不卡 | 中文字幕99| 国产黄色在线观看 | 成人久久网 | 国产分类视频 | 国产精品久久国产精品99 | 国产免费让你躁在线视频 | 91精品国产乱码久久久久久久久 | 91美女在线观看 | 久草网免费 | 亚洲精品欧洲 | 亚洲国产精品久久久久秋霞不卡 | 国产精品 欧美精品 | 精品视频999| 夜夜操天天艹 | 国产成人免费视频网站高清观看视频 |