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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

原創STC15單片機+DS18B20做的溫度異常超溫報警器

  [復制鏈接]
跳轉到指定樓層
樓主


  1.簡介:通過按鍵可以設定溫度上限和溫度下限的值,當溫度低于溫度下限值或者當溫度高于上限值時,蜂鳴器發出聲音提醒。
   2.元件:STC15W408AS單片機+共陰數碼管+有源蜂鳴器+3個按鍵+DS18B20
   3.設計思路:利用單片機逐點掃描的方式直接驅動三位共陰數碼管,通過DS18B20讀取溫度與設定的溫度進行比較,如果溫度異常則蜂鳴器發出滴滴的聲音提醒,按下K3鍵則清除報警聲(溫度恢復正常后再次異常時自動報警)。
   4.使用方法:程序下載后首次使用前需同時按下K2鍵和K3鍵(對最初的溫度上下限值寫入EEPROM中)以后斷電自動保存無需進行此操作
   5.按下K1鍵則進入溫度上限設置菜單,可以通過按K2進行加   K3進行減,再次按K1鍵則進入溫度下限報警值的設定界面。設置后5秒無操作則自動保存設定的數據并返回溫度顯示界面。

所有資料下載:
溫度控制超溫報警stc15w.rar (80.31 KB, 下載次數: 407)

  1. //2016.10.15編寫

  2. /*********************************************************************************************/

  3. //作者:劉海龍
  4. //硬件:三位共陰數碼管+stc15單片機+DS18B20溫度芯片+蜂鳴器//選擇內部12M晶振
  5. #include <STC15W.h>
  6. #include <intrins.h>
  7. #include<4LED_YIN.H>//數碼管驅動顯示程序
  8. #include<DS18B20.H>//DS18B20溫度芯片驅動程序
  9. #include<EEPROM.H>//STC15系列內部EEPROM
  10. bit w=0,q;//報警標志位
  11. sbit beep=P5^4;//蜂鳴器負極連接IO正極接vcc
  12. sbit k1=P1^3;//設置鍵
  13. sbit k2=P1^4;//        加鍵
  14. sbit k3=P1^5;//         減鍵
  15. //sbit led1=P1^6;//
  16. //sbit led2=P1^7;//
  17. unsigned char menu=0,cou,HH,HL,LH,LL;//HH為溫度上限高8位HL為溫度上限低8位
  18. //LH為溫度下限高8位LL為溫度下限低8位
  19. unsigned int L,H;//H為溫度上限,L為溫度下限
  20. /************************************************************************/
  21. void delay1ms (unsigned int a){ // 1ms延時程序
  22.         unsigned int i;
  23.         while( --a != 0){
  24.                 for(i = 0; i < 629; i++);//STC15單片機在外部晶振為12MHz時i值上限為629  
  25.         }                                                      
  26. }
  27. /*****************************************************************************/
  28. void disp(unsigned int t){//數碼管顯示
  29. unsigned int i;
  30. i=        t/100;//第一位數碼管顯示溫度十位
  31. diplay_data (1,disdata);
  32. i=t%100/10;//第二位數碼管顯示溫度個位
  33. diplay_data (2,disdata+0x80);//0x80為個位數后面的小數點
  34. i=t%100%10;//第三位數碼管顯示溫度小數位
  35. diplay_data (3,disdata);
  36. }
  37. /***********************************************/
  38. void di(){//蜂鳴器驅動程序
  39.         beep=0;
  40.         delay1ms(500);
  41.         beep=1;
  42.         delay1ms(500);
  43.         }
  44. /*********************************************************************************************
  45. 函數名:定時/計數器初始化函數
  46. 調  用:T_C_init();
  47. /**********************************************************************************************/
  48. void T_C_init (void){
  49.         TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
  50.         EA = 1;        //中斷總開關
  51.         TH0 = 0x3c; //16位計數寄存器T0高8位(寫入初值)
  52.         TL0 = 0xb0; //16位計數寄存器T0低8位
  53.         ET0 = 1; //T/C1中斷開關
  54.         TR0 = 0; //T/C1關閉開關        
  55. }
  56. /*********************************************************************************************
  57. 函數名:定時/計數器1中斷處理函數
  58. 調  用:[T/C1溢出后中斷處理]
  59. /*****************************/
  60. void T_C0 (void) interrupt 1  using 1{ //切換寄存器組到1
  61.     cou++;                      // 軟計數器加1   
  62.     if(cou > 99){// 計數值到(5s)
  63.         cou = 0;// 軟計數器清零
  64.         IapEraseSector(0x00); //擦除整個扇區
  65.         IapProgramByte(0x00,HH );//將 新的溫度上限值高8位寫入 EEPROM
  66.         IapProgramByte(0x01, HL);//將 新的溫度上限值低8位寫入 EEPROM
  67.         IapProgramByte(0x02,LH );//將 新的溫度下限值高8位寫入 EEPROM
  68.         IapProgramByte(0x03, LL);//將 新的溫度下限值低8位寫入 EEPROM         
  69.         TR0 = 0; //T/C1停止計數
  70.         menu=0;//返回 主菜單的溫度顯示界面                 
  71.     }               
  72.         TH0 = 0x3c; //16位計數寄存器T0高8位(重新寫入初值)
  73.         TL0 = 0xb0; //16位計數寄存器T0低8位
  74. }
  75. /**********************************************************************************************/
  76. /**********************************************************************************************/
  77. void main (void){
  78.         unsigned char i;
  79.         delay1ms(300); //延時待系統穩定
  80.         init();//IO工作方式初始化
  81.         T_C_init();//定時器初始化
  82.         
  83.         ReadTemperature(); //讀取溫度
  84.         HH = IapReadByte(0x00);//開機時從EEPROM中讀取H高8位參數
  85.         HL = IapReadByte(0x01);//開機時從EEPROM中讀取H的低8位參數
  86.         H=HH*256+HL;//讀出溫度上限值
  87.         LH = IapReadByte(0x02);//開機時從EEPROM中讀取L高8位參數
  88.         LL = IapReadByte(0x03);//開機時從EEPROM中讀取L的低8位參數
  89.         L=LH*256+LL;//讀出溫度下限值
  90.         while(1){//主循環
  91.                           
  92. /**********************顯示溫度界面******************************/
  93.                   if(menu==0){
  94.                            for(i=15;i>0;i--){
  95.                            disp(ReadTemperature());}
  96.                           if(tem>=H&&w==0||tem<=L&&w==0){
  97.                             di();//超溫或者低溫報警
  98.                           q=1;
  99.                             }
  100.                   
  101.                           if(k3==0&&q==1){w=1;}//如果報警時按下K1則關閉報警聲
  102.                           if(tem<=H&&tem>=L){w=0;}//如果溫度恢復正常把報警標志清除
  103.                         if(k2==0&&k3==0){//k2k3同時按下溫度上限下限值恢復出廠設置
  104.                                 delay1ms(10);
  105.                                 if(k2==0&&k3==0){
  106.                                         H=380;//溫度上限38度
  107.                                         L=370;//溫度下限37度
  108.                                         LL=L;
  109.                                         LH=(L>>8);
  110.                                         HL=H;
  111.                                         HH=(H>>8);
  112.                                         IapEraseSector(0x00); //擦除整個扇區
  113.                                         IapProgramByte(0x00,HH );//將 新的溫度上限值高8位寫入 EEPROM
  114.                                         IapProgramByte(0x01, HL);//將 新的溫度上限值低8位寫入 EEPROM
  115.                                         IapProgramByte(0x02,LH );//將 新的溫度下限值高8位寫入 EEPROM
  116.                                         IapProgramByte(0x03, LL);//將 新的溫度下限值低8位寫入 EEPROM         
  117.                                         di();
  118.                                 }
  119.                         }        
  120.                    }
  121. /*********************進入調溫度上限界面*******************************/
  122.                   if(menu==1){
  123.                          diplay_data (1,disdata[H/100]);
  124.                          diplay_data (2,disdata[H%100/10]+0x80);
  125.                           diplay_data (3,disdata[H%10]);
  126.                          if(k2==0){
  127.                                 delay1ms(10);
  128.                                  if(k2==0){
  129.                                 H++; //按下K1鍵則溫度上限加零點一度
  130.                                  cou=0;//重新計數
  131.                                  TR0 = 1; //T/C1啟動開關
  132.                                     
  133.                                  while(!k2);
  134.                                 HL=H;
  135.                                 HH=(H>>8);
  136.                                 }
  137.                           }
  138.                          if(k3==0){
  139.                                 delay1ms(10);
  140.                                  if(k3==0){
  141.                                 H--; //按下K1鍵則溫度上限減零點一度
  142.                                  cou=0;//重新計數
  143.                                  TR0 = 1; //T/C1啟動開關
  144.                                     
  145.                                  while(!k3);
  146.                                 HL=H;
  147.                                 HH=(H>>8);
  148.                                 }
  149.                           }
  150.                         
  151.                   }
  152. /*******************進入調溫度下限界面****************************/
  153.                    if(menu==2){
  154.                          diplay_data (1,disdata[L/100]);
  155.                          diplay_data (2,disdata[L%100/10]+0x80);
  156.                           diplay_data (3,disdata[L%10]);
  157.                          if(k2==0){
  158.                                 delay1ms(10);
  159.                                  if(k2==0){
  160.                                  cou=0;//重新計數
  161.                                  TR0 = 1; //T/C1啟動開關
  162.                                     L++; //按下K1鍵則溫度下限加零點一度
  163.                                  while(!k2);
  164.                                 LL=L;
  165.                                 LH=(L>>8);
  166.                                 }
  167.                          }

  168.                          if(k3==0){
  169.                                 delay1ms(10);
  170.                                  if(k3==0){
  171.                                 cou=0;//重新計數
  172.                                  TR0 = 1; //T/C1啟動開關
  173.                                     L--; //按下K1鍵則溫度下限減零點一度
  174.                                  while(!k3);
  175.                                 LL=L;
  176.                                 LH=(L>>8);                                
  177.                              }
  178.                         }
  179.                   }
  180. /*************************按下K1鍵進入菜單設置界面***************************/
  181.                   if(k1==0){
  182.                          delay1ms(10);
  183.                          if(k1==0){
  184.                          cou=0;//重新計數
  185.                          TR0 = 1; //T/C1啟動開關
  186.                             menu++; //按下K1鍵則菜單加一
  187.                            if(menu>2){menu=0;}
  188.                          while(!k1);
  189.                         }
  190.                    }                                
  191.         }        
  192. }
  193. /*****************************************************************************/
復制代碼

評分

參與人數 4黑幣 +136 收起 理由
qwe29600 + 8 贊一個!
brave_ruan + 20 感謝大哥的資料分享與細心指導,很給力!
xmd1972 + 8 共享資料的黑幣獎勵!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:108868 發表于 2016-10-30 20:38 | 只看該作者
謝謝分享!已制作成功
回復

使用道具 舉報

板凳
ID:152422 發表于 2016-12-9 22:38 | 只看該作者
樓主是個有思想的人。贊\
回復

使用道具 舉報

地板
ID:158407 發表于 2017-1-1 13:13 | 只看該作者
請教:原創STC15單片機+DS18B20做的溫度異常超溫報警器,keil顯示錯誤,如何解決?STC15W.h(526): warning C322: unknown identifier
STC15W.h(528): warning C322: unknown identifier
STC15W.h(530): warning C322: unknown identifier
STC15W.h(532): warning C322: unknown identifier
STC15W.h(534): warning C322: unknown identifier
STC15W.h(536): warning C322: unknown identifier
STC15W.h(538): warning C322: unknown identifier
溫度控制器.C(64): warning C206: 'IapEraseSector': missing function-prototype
溫度控制器.C(64): error C267: 'IapEraseSector': requires ANSI-style prototype
溫度控制器.c - 1 Error(s), 8 Warning(s).
回復

使用道具 舉報

5#
ID:123732 發表于 2017-1-3 21:32 | 只看該作者
bpdy168 發表于 2017-1-1 13:13
請教:原創STC15單片機+DS18B20做的溫度異常超溫報警器,keil顯示錯誤,如何解決?STC15W.h(526): warning  ...

IapEraseSector這個函數在編譯時無法獲取其原型。
要么把IapEraseSector()函數體放在調用它的函數前面,要么在前面添加IapEraseSector()函數的原型聲明。
回復

使用道具 舉報

6#
ID:160399 發表于 2017-1-6 12:20 | 只看該作者
給一下ds18b20的初始化函數啊
回復

使用道具 舉報

7#
ID:146603 發表于 2017-4-13 11:10 | 只看該作者
不錯不錯,需要下載才能看到其他文件的。
回復

使用道具 舉報

8#
ID:207298 發表于 2017-6-3 09:21 | 只看該作者
怎么無法下載啊
回復

使用道具 舉報

9#
ID:203336 發表于 2017-6-8 22:33 | 只看該作者
好資料~模塊很清晰非常好用~謝謝
回復

使用道具 舉報

10#
ID:168444 發表于 2017-6-16 11:07 | 只看該作者
 謝謝分享!已制作成功
回復

使用道具 舉報

11#
ID:168444 發表于 2017-6-16 11:27 | 只看該作者
樓主,Delay_us();微秒延時怎么寫?
回復

使用道具 舉報

12#
ID:220402 發表于 2017-7-17 21:02 | 只看該作者
不錯不錯,感謝分享
回復

使用道具 舉報

13#
ID:159139 發表于 2017-8-8 21:28 來自手機 | 只看該作者
謝謝分享,學習一下EEPROM的操作。
回復

使用道具 舉報

14#
ID:226801 發表于 2017-8-11 01:39 | 只看該作者

謝謝分享,學習一下18B20的寫法
回復

使用道具 舉報

15#
ID:233015 發表于 2017-9-20 08:47 | 只看該作者
制作成功了,在制作過程中犯了一些低級小錯誤,最后請教了樓主南瓜大哥,感謝南瓜大哥的昨天細心指導與分析,謝謝,很給力。
回復

使用道具 舉報

16#
ID:233015 發表于 2017-9-20 08:48 | 只看該作者
感謝南瓜大哥的分享與指導,很給力,  謝謝
回復

使用道具 舉報

17#
ID:240443 發表于 2017-10-18 05:52 | 只看該作者
試試看看,正需要
回復

使用道具 舉報

18#
ID:226801 發表于 2017-12-13 10:26 | 只看該作者
正在使用樓主的程序,改在我的學習板上,謝謝樓主的程序
回復

使用道具 舉報

19#
ID:254251 發表于 2018-6-7 00:10 | 只看該作者
劉海龍老師這里什么改

1.png (22.37 KB, 下載次數: 145)

1.png
回復

使用道具 舉報

20#
ID:254251 發表于 2018-6-7 00:12 | 只看該作者

回復

使用道具 舉報

21#
ID:346614 發表于 2018-6-7 01:22 | 只看該作者
謝謝,寫的很實用,亨給利
回復

使用道具 舉報

22#
ID:352183 發表于 2018-6-14 23:12 | 只看該作者
謝謝,寫的很實用
回復

使用道具 舉報

23#
ID:233214 發表于 2018-6-16 14:48 | 只看該作者
謝謝分享,不錯
回復

使用道具 舉報

24#
ID:343102 發表于 2018-6-17 10:50 | 只看該作者
謝謝分享,下來學習學習
回復

使用道具 舉報

25#
ID:72576 發表于 2018-12-2 10:22 | 只看該作者
好資料~模塊很清晰非常好用~謝謝
回復

使用道具 舉報

26#
ID:350104 發表于 2018-12-2 23:01 | 只看該作者
不錯 很喜歡樓主的設計 有實用性
回復

使用道具 舉報

27#
ID:63317 發表于 2018-12-3 05:55 | 只看該作者
謝謝分享資料
回復

使用道具 舉報

28#
ID:441855 發表于 2018-12-13 13:39 | 只看該作者
大佬這個程序可以用單片機編程嗎
回復

使用道具 舉報

29#
ID:378706 發表于 2019-6-18 11:06 | 只看該作者
不錯 很喜歡樓主的設計 有實用性
回復

使用道具 舉報

30#
ID:1051901 發表于 2022-11-14 15:06 | 只看該作者
劉海龍 發表于 2017-1-3 21:32
IapEraseSector這個函數在編譯時無法獲取其原型。
要么把IapEraseSector()函數體放在調用它的函數前面, ...

今天做了很多次,時序總是不對,只有請教高手了
回復

使用道具 舉報

31#
ID:1051901 發表于 2022-11-14 15:08 | 只看該作者
代碼真的很好,借鑒了
回復

使用道具 舉報

32#
ID:1051661 發表于 2022-11-18 21:40 | 只看該作者
Animals 發表于 2016-10-30 20:38
謝謝分享!已制作成功

請問程序怎么燒錄呀
回復

使用道具 舉報

33#
ID:262 發表于 2022-11-18 22:15 | 只看該作者
liziwen 發表于 2022-11-18 21:40
請問程序怎么燒錄呀

給你做好的板子通電,用串口線連接好電腦,打開stcisp軟件,載入hex文件,點擊下載程序,按提示冷啟動即可
回復

使用道具 舉報

34#
ID:1001745 發表于 2023-2-8 19:20 | 只看該作者
大師,請問數碼管有筆畫暗是什么原因?數碼管沒有問題,已經全部點亮看過的。
回復

使用道具 舉報

35#
ID:894868 發表于 2023-2-10 15:06 | 只看該作者
我只是來點贊一下,支持一下作者··
回復

使用道具 舉報

36#
ID:1077165 發表于 2023-5-12 23:19 | 只看該作者
DS18B20做的溫度
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品五月天 | 欧美成人精品在线观看 | 日日干夜夜操 | 日韩视频一区在线观看 | 久热久| 精品国产一二三区 | 国产乱码精品1区2区3区 | 青青久在线视频 | 最新毛片网站 | 日韩欧美国产一区二区三区 | 欧美日韩亚 | 欧美精品乱码99久久影院 | 国产精品一区二区免费看 | 一区二区在线看 | 天堂在线一区 | 久久国产高清 | 国产美女一区 | 亚洲第一黄色网 | 亚洲最新在线视频 | 欧美精品日韩 | 午夜精品| 国产美女视频 | 狠狠久久 | 久干网| 国产91视频播放 | 成人欧美一区二区三区在线观看 | 最新中文字幕在线 | 国产精品久久欧美久久一区 | 一区欧美 | 日本涩涩网 | 91麻豆精品一区二区三区 | 天天草天天干天天 | 成人国产精品久久 | 91精品国产91久久久久游泳池 | 亚洲www啪成人一区二区 | 精品在线一区二区三区 | 精品国产一区二区三区久久久蜜月 | 色综合一区二区 | 国产区一区 | 成人永久免费视频 | 国产精品伦一区二区三级视频 |