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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 18686|回復(fù): 35
打印 上一主題 下一主題
收起左側(cè)

原創(chuàng)STC15單片機(jī)+DS18B20做的溫度異常超溫報(bào)警器

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:123732 發(fā)表于 2016-10-15 18:30 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


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

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

  1. //2016.10.15編寫(xiě)

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

  3. //作者:劉海龍
  4. //硬件:三位共陰數(shù)碼管+stc15單片機(jī)+DS18B20溫度芯片+蜂鳴器//選擇內(nèi)部12M晶振
  5. #include <STC15W.h>
  6. #include <intrins.h>
  7. #include<4LED_YIN.H>//數(shù)碼管驅(qū)動(dòng)顯示程序
  8. #include<DS18B20.H>//DS18B20溫度芯片驅(qū)動(dòng)程序
  9. #include<EEPROM.H>//STC15系列內(nèi)部EEPROM
  10. bit w=0,q;//報(bào)警標(biāo)志位
  11. sbit beep=P5^4;//蜂鳴器負(fù)極連接IO正極接vcc
  12. sbit k1=P1^3;//設(shè)置鍵
  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延時(shí)程序
  22.         unsigned int i;
  23.         while( --a != 0){
  24.                 for(i = 0; i < 629; i++);//STC15單片機(jī)在外部晶振為12MHz時(shí)i值上限為629  
  25.         }                                                      
  26. }
  27. /*****************************************************************************/
  28. void disp(unsigned int t){//數(shù)碼管顯示
  29. unsigned int i;
  30. i=        t/100;//第一位數(shù)碼管顯示溫度十位
  31. diplay_data (1,disdata);
  32. i=t%100/10;//第二位數(shù)碼管顯示溫度個(gè)位
  33. diplay_data (2,disdata+0x80);//0x80為個(gè)位數(shù)后面的小數(shù)點(diǎn)
  34. i=t%100%10;//第三位數(shù)碼管顯示溫度小數(shù)位
  35. diplay_data (3,disdata);
  36. }
  37. /***********************************************/
  38. void di(){//蜂鳴器驅(qū)動(dòng)程序
  39.         beep=0;
  40.         delay1ms(500);
  41.         beep=1;
  42.         delay1ms(500);
  43.         }
  44. /*********************************************************************************************
  45. 函數(shù)名:定時(shí)/計(jì)數(shù)器初始化函數(shù)
  46. 調(diào)  用: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;        //中斷總開(kāi)關(guān)
  51.         TH0 = 0x3c; //16位計(jì)數(shù)寄存器T0高8位(寫(xiě)入初值)
  52.         TL0 = 0xb0; //16位計(jì)數(shù)寄存器T0低8位
  53.         ET0 = 1; //T/C1中斷開(kāi)關(guān)
  54.         TR0 = 0; //T/C1關(guān)閉開(kāi)關(guān)        
  55. }
  56. /*********************************************************************************************
  57. 函數(shù)名:定時(shí)/計(jì)數(shù)器1中斷處理函數(shù)
  58. 調(diào)  用:[T/C1溢出后中斷處理]
  59. /*****************************/
  60. void T_C0 (void) interrupt 1  using 1{ //切換寄存器組到1
  61.     cou++;                      // 軟計(jì)數(shù)器加1   
  62.     if(cou > 99){// 計(jì)數(shù)值到(5s)
  63.         cou = 0;// 軟計(jì)數(shù)器清零
  64.         IapEraseSector(0x00); //擦除整個(gè)扇區(qū)
  65.         IapProgramByte(0x00,HH );//將 新的溫度上限值高8位寫(xiě)入 EEPROM
  66.         IapProgramByte(0x01, HL);//將 新的溫度上限值低8位寫(xiě)入 EEPROM
  67.         IapProgramByte(0x02,LH );//將 新的溫度下限值高8位寫(xiě)入 EEPROM
  68.         IapProgramByte(0x03, LL);//將 新的溫度下限值低8位寫(xiě)入 EEPROM         
  69.         TR0 = 0; //T/C1停止計(jì)數(shù)
  70.         menu=0;//返回 主菜單的溫度顯示界面                 
  71.     }               
  72.         TH0 = 0x3c; //16位計(jì)數(shù)寄存器T0高8位(重新寫(xiě)入初值)
  73.         TL0 = 0xb0; //16位計(jì)數(shù)寄存器T0低8位
  74. }
  75. /**********************************************************************************************/
  76. /**********************************************************************************************/
  77. void main (void){
  78.         unsigned char i;
  79.         delay1ms(300); //延時(shí)待系統(tǒng)穩(wěn)定
  80.         init();//IO工作方式初始化
  81.         T_C_init();//定時(shí)器初始化
  82.         
  83.         ReadTemperature(); //讀取溫度
  84.         HH = IapReadByte(0x00);//開(kāi)機(jī)時(shí)從EEPROM中讀取H高8位參數(shù)
  85.         HL = IapReadByte(0x01);//開(kāi)機(jī)時(shí)從EEPROM中讀取H的低8位參數(shù)
  86.         H=HH*256+HL;//讀出溫度上限值
  87.         LH = IapReadByte(0x02);//開(kāi)機(jī)時(shí)從EEPROM中讀取L高8位參數(shù)
  88.         LL = IapReadByte(0x03);//開(kāi)機(jī)時(shí)從EEPROM中讀取L的低8位參數(shù)
  89.         L=LH*256+LL;//讀出溫度下限值
  90.         while(1){//主循環(huán)
  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();//超溫或者低溫報(bào)警
  98.                           q=1;
  99.                             }
  100.                   
  101.                           if(k3==0&&q==1){w=1;}//如果報(bào)警時(shí)按下K1則關(guān)閉報(bào)警聲
  102.                           if(tem<=H&&tem>=L){w=0;}//如果溫度恢復(fù)正常把報(bào)警標(biāo)志清除
  103.                         if(k2==0&&k3==0){//k2k3同時(shí)按下溫度上限下限值恢復(fù)出廠設(shè)置
  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); //擦除整個(gè)扇區(qū)
  113.                                         IapProgramByte(0x00,HH );//將 新的溫度上限值高8位寫(xiě)入 EEPROM
  114.                                         IapProgramByte(0x01, HL);//將 新的溫度上限值低8位寫(xiě)入 EEPROM
  115.                                         IapProgramByte(0x02,LH );//將 新的溫度下限值高8位寫(xiě)入 EEPROM
  116.                                         IapProgramByte(0x03, LL);//將 新的溫度下限值低8位寫(xiě)入 EEPROM         
  117.                                         di();
  118.                                 }
  119.                         }        
  120.                    }
  121. /*********************進(jìn)入調(diào)溫度上限界面*******************************/
  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鍵則溫度上限加零點(diǎn)一度
  130.                                  cou=0;//重新計(jì)數(shù)
  131.                                  TR0 = 1; //T/C1啟動(dòng)開(kāi)關(guān)
  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鍵則溫度上限減零點(diǎn)一度
  142.                                  cou=0;//重新計(jì)數(shù)
  143.                                  TR0 = 1; //T/C1啟動(dòng)開(kāi)關(guān)
  144.                                     
  145.                                  while(!k3);
  146.                                 HL=H;
  147.                                 HH=(H>>8);
  148.                                 }
  149.                           }
  150.                         
  151.                   }
  152. /*******************進(jìn)入調(diào)溫度下限界面****************************/
  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;//重新計(jì)數(shù)
  161.                                  TR0 = 1; //T/C1啟動(dòng)開(kāi)關(guān)
  162.                                     L++; //按下K1鍵則溫度下限加零點(diǎn)一度
  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;//重新計(jì)數(shù)
  172.                                  TR0 = 1; //T/C1啟動(dòng)開(kāi)關(guān)
  173.                                     L--; //按下K1鍵則溫度下限減零點(diǎn)一度
  174.                                  while(!k3);
  175.                                 LL=L;
  176.                                 LH=(L>>8);                                
  177.                              }
  178.                         }
  179.                   }
  180. /*************************按下K1鍵進(jìn)入菜單設(shè)置界面***************************/
  181.                   if(k1==0){
  182.                          delay1ms(10);
  183.                          if(k1==0){
  184.                          cou=0;//重新計(jì)數(shù)
  185.                          TR0 = 1; //T/C1啟動(dòng)開(kāi)關(guān)
  186.                             menu++; //按下K1鍵則菜單加一
  187.                            if(menu>2){menu=0;}
  188.                          while(!k1);
  189.                         }
  190.                    }                                
  191.         }        
  192. }
  193. /*****************************************************************************/
復(fù)制代碼

評(píng)分

參與人數(shù) 4黑幣 +136 收起 理由
qwe29600 + 8 贊一個(gè)!
brave_ruan + 20 感謝大哥的資料分享與細(xì)心指導(dǎo),很給力!
xmd1972 + 8 共享資料的黑幣獎(jiǎng)勵(lì)!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

地板
ID:158407 發(fā)表于 2017-1-1 13:13 | 只看該作者
請(qǐng)教:原創(chuàng)STC15單片機(jī)+DS18B20做的溫度異常超溫報(bào)警器,keil顯示錯(cuò)誤,如何解決?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).
回復(fù)

使用道具 舉報(bào)

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

IapEraseSector這個(gè)函數(shù)在編譯時(shí)無(wú)法獲取其原型。
要么把IapEraseSector()函數(shù)體放在調(diào)用它的函數(shù)前面,要么在前面添加IapEraseSector()函數(shù)的原型聲明。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

13#
ID:159139 發(fā)表于 2017-8-8 21:28 來(lái)自觸屏版 | 只看該作者
謝謝分享,學(xué)習(xí)一下EEPROM的操作。
回復(fù)

使用道具 舉報(bào)

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

謝謝分享,學(xué)習(xí)一下18B20的寫(xiě)法
回復(fù)

使用道具 舉報(bào)

15#
ID:233015 發(fā)表于 2017-9-20 08:47 | 只看該作者
制作成功了,在制作過(guò)程中犯了一些低級(jí)小錯(cuò)誤,最后請(qǐng)教了樓主南瓜大哥,感謝南瓜大哥的昨天細(xì)心指導(dǎo)與分析,謝謝,很給力。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

1.png
回復(fù)

使用道具 舉報(bào)

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

回復(fù)

使用道具 舉報(bào)

21#
ID:346614 發(fā)表于 2018-6-7 01:22 | 只看該作者
謝謝,寫(xiě)的很實(shí)用,亨給利
回復(fù)

使用道具 舉報(bào)

22#
ID:352183 發(fā)表于 2018-6-14 23:12 | 只看該作者
謝謝,寫(xiě)的很實(shí)用
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

24#
ID:343102 發(fā)表于 2018-6-17 10:50 | 只看該作者
謝謝分享,下來(lái)學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

26#
ID:350104 發(fā)表于 2018-12-2 23:01 | 只看該作者
不錯(cuò) 很喜歡樓主的設(shè)計(jì) 有實(shí)用性
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

28#
ID:441855 發(fā)表于 2018-12-13 13:39 | 只看該作者
大佬這個(gè)程序可以用單片機(jī)編程嗎
回復(fù)

使用道具 舉報(bào)

29#
ID:378706 發(fā)表于 2019-6-18 11:06 | 只看該作者
不錯(cuò) 很喜歡樓主的設(shè)計(jì) 有實(shí)用性
回復(fù)

使用道具 舉報(bào)

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

今天做了很多次,時(shí)序總是不對(duì),只有請(qǐng)教高手了
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

請(qǐng)問(wèn)程序怎么燒錄呀
回復(fù)

使用道具 舉報(bào)

33#
ID:262 發(fā)表于 2022-11-18 22:15 | 只看該作者
liziwen 發(fā)表于 2022-11-18 21:40
請(qǐng)問(wèn)程序怎么燒錄呀

給你做好的板子通電,用串口線連接好電腦,打開(kāi)stcisp軟件,載入hex文件,點(diǎn)擊下載程序,按提示冷啟動(dòng)即可
回復(fù)

使用道具 舉報(bào)

34#
ID:1001745 發(fā)表于 2023-2-8 19:20 | 只看該作者
大師,請(qǐng)問(wèn)數(shù)碼管有筆畫(huà)暗是什么原因?數(shù)碼管沒(méi)有問(wèn)題,已經(jīng)全部點(diǎn)亮看過(guò)的。
回復(fù)

使用道具 舉報(bào)

35#
ID:894868 發(fā)表于 2023-2-10 15:06 | 只看該作者
我只是來(lái)點(diǎn)贊一下,支持一下作者··
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 18性欧美 | 欧美美女被c | 亚洲精品在线免费播放 | 成人精品鲁一区一区二区 | 欧美日韩久久精品 | 日本不卡一区二区三区 | 中文字幕一区在线观看视频 | 91私密视频 | 中文字幕日韩欧美一区二区三区 | 国产精品日韩一区 | 日韩网站在线观看 | 国产一区二区视频在线 | 免费观看一级毛片 | 日韩成人在线网址 | 黄a网站 | 玖玖国产| 一二三区在线 | 99精品视频免费在线观看 | 午夜视频网站 | 久久久久久九九九九 | 在线观看成人免费视频 | 欧美www在线 | 91精品国产综合久久久久 | 亚洲第一区国产精品 | 欧美日韩中文字幕在线播放 | 自拍 亚洲 欧美 老师 丝袜 | 亚洲精品视频在线看 | 日本国产欧美 | 一区二区三区精品在线 | 亚洲日韩中文字幕一区 | 在线欧美亚洲 | 亚洲综合网站 | 欧美激情国产精品 | 高清国产一区二区 | 成人高清视频在线观看 | 国产激情视频在线免费观看 | 欧美激情在线播放 | 精品一区二区三区在线观看国产 | 99国产精品久久久久 | 高清国产一区二区 | 影音先锋亚洲资源 |