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

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

QQ登錄

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

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

基于51單片機(jī)的火災(zāi)報(bào)警系統(tǒng)程序與電路原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
以煙霧傳感器和單片機(jī)為核心設(shè)計(jì)的煙霧報(bào)警系統(tǒng)需要實(shí)現(xiàn)報(bào)警、濃度顯示、濃度報(bào)警限設(shè)置、溫度顯示及溫度報(bào)警限設(shè)定等功能。系統(tǒng)硬件設(shè)計(jì)部分包括煙霧信號(hào)采集電路、單片機(jī)控制電路、按鍵設(shè)置報(bào)警閾值電路、濃度顯示電路和聲光報(bào)警電路。系統(tǒng)軟件設(shè)計(jì)包括系統(tǒng)初始化、煙霧溫度采集及處理、煙霧溫度顯示、按鍵處理、報(bào)警等子程序設(shè)計(jì)。最后軟硬件聯(lián)合調(diào)試完成功能要求。

電路原理圖如下:


制作出來(lái)的實(shí)物圖如下:


單片機(jī)源程序如下:

  1. #include <STC12C5A60S2.H>
  2. #include "oled.h"
  3. #include "adc.h"
  4. #include "temp.h"
  5. #include "key.h"

  6. #define  u8 unsigned char
  7. #define  u32 unsigned int


  8. sbit Temp_LED = P3^5;
  9. sbit Solu_LED = P3^6;
  10. sbit Beep = P3^2;

  11. u8 layout_static = 1;

  12. u32 Temp_max = 200;
  13. u32 Temp_min = 150;

  14. u32 Solu_max = 60;
  15. u32 Solu_min = 40;

  16. int system_temp;

  17. void DisplayTemp(u32 Temp)
  18. {
  19.         OLED_ShowNum(48,2,Temp/10,2,16);
  20.         OLED_ShowNum(72,2,Temp%10,1,16);
  21. }

  22. void DisplayMQ2(u32 MQ2Val)
  23. {
  24.         OLED_ShowNum(48,4,MQ2Val/10,2,16);
  25.         OLED_ShowNum(72,4,MQ2Val%10,1,16);
  26. }

  27. void LcdDisplay(int temp)          //lcd顯示
  28. {

  29.         float tp;  
  30.         if(temp< 0)                                    //當(dāng)溫度值為負(fù)數(shù)
  31.           {
  32.                 //因?yàn)樽x取的溫度是實(shí)際溫度的補(bǔ)碼,所以減1,再取反求出原碼
  33.                 temp=temp-1;
  34.                 temp=~temp;
  35.                 tp=temp;
  36.                 temp=tp*0.0625*100+0.5;       
  37.                 //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語(yǔ)言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
  38.                 //后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
  39.                 //算由?.5,還是在小數(shù)點(diǎn)后面。

  40.           }
  41.         else
  42.           {                       
  43.                 tp=temp;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個(gè)浮點(diǎn)型變量
  44.                 //如果溫度是正的那么,那么正數(shù)的原碼就是補(bǔ)碼它本身
  45.                 temp=tp*0.0625*100+0.5;       
  46.                 //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語(yǔ)言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
  47.                 //后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
  48.                 //算加上0.5,還是在小數(shù)點(diǎn)后面。
  49.         }
  50.         system_temp = temp/10;

  51. }




  52. void OLED_MyInit()
  53. {
  54.         OLED_Init();                        //初始化OLED
  55.         OLED_Clear();
  56.         OLED_ShowCHinese(0,0,0);//超
  57.         OLED_ShowCHinese(18,0,1);//可
  58.         OLED_ShowCHinese(36,0,2);//愛(ài)
  59.         OLED_ShowCHinese(54,0,3);//的
  60.         OLED_ShowCHinese(72,0,4);//沈
  61.         OLED_ShowCHinese(90,0,5);//萌
  62.         OLED_ShowCHinese(108,0,6);//萌
  63.        
  64.         OLED_ShowString(0,2,"Temp:",16);
  65.         OLED_ShowNum(48,2,00,2,16);//21
  66.         OLED_ShowString(64,2,".",16);
  67.         OLED_ShowNum(72,2,0,1,16);//21


  68.         OLED_ShowString(0,4,"Solu:",16);
  69.         OLED_ShowNum(48,4,0,2,16);//21
  70.         OLED_ShowString(64,4,".",16);
  71.         OLED_ShowNum(72,4,0,1,16);//21       
  72.         OLED_ShowString(84,4,"%",16);
  73.        
  74.         OLED_ShowString(0,6,"KEY1:System Set",16);       
  75. }
  76. void layout_switch(u8 layout_static,u8 clear_static)
  77. {
  78.         if(clear_static==1)OLED_Clear();
  79.         switch(layout_static)
  80.         {
  81.                 case 1:               
  82.                         OLED_ShowCHinese(0,0,0);//超
  83.                         OLED_ShowCHinese(18,0,1);//可
  84.                         OLED_ShowCHinese(36,0,2);//愛(ài)
  85.                         OLED_ShowCHinese(54,0,3);//的
  86.                         OLED_ShowCHinese(72,0,4);//沈
  87.                         OLED_ShowCHinese(90,0,5);//萌
  88.                         OLED_ShowCHinese(108,0,6);//萌
  89.                        
  90.                         OLED_ShowString(0,2,"Temp:",16);
  91.                         OLED_ShowNum(48,2,21,2,16);//21
  92.                         OLED_ShowString(64,2,".",16);
  93.                         OLED_ShowNum(72,2,0,1,16);//21


  94.                         OLED_ShowString(0,4,"Solu:",16);
  95.                         OLED_ShowNum(48,4,0,2,16);//21
  96.                         OLED_ShowString(64,4,".",16);
  97.                         OLED_ShowNum(72,4,0,1,16);//21       
  98.                         OLED_ShowString(84,4,"%",16);
  99.                        
  100.                         OLED_ShowString(0,6,"KEY1:System Set",16);       
  101.                         break;
  102.                 case 2:
  103.                         OLED_ShowCHinese(0,0,0);//超
  104.                         OLED_ShowCHinese(18,0,1);//可
  105.                         OLED_ShowCHinese(36,0,2);//愛(ài)
  106.                         OLED_ShowCHinese(54,0,3);//的
  107.                         OLED_ShowCHinese(72,0,4);//沈
  108.                         OLED_ShowCHinese(90,0,5);//萌
  109.                         OLED_ShowCHinese(108,0,6);//萌
  110.                        
  111.                         OLED_ShowString(0,4,"Temp max set",16);

  112.                         OLED_ShowString(0,6," Max:",16);
  113.                         OLED_ShowNum(48,6,Temp_max/10,2,16);//21
  114.                         OLED_ShowString(64,6,".",16);
  115.                         OLED_ShowNum(72,6,Temp_max%10,1,16);//21
  116.                         break;
  117.                 case 3:
  118.                         OLED_ShowCHinese(0,0,0);//超
  119.                         OLED_ShowCHinese(18,0,1);//可
  120.                         OLED_ShowCHinese(36,0,2);//愛(ài)
  121.                         OLED_ShowCHinese(54,0,3);//的
  122.                         OLED_ShowCHinese(72,0,4);//沈
  123.                         OLED_ShowCHinese(90,0,5);//萌
  124.                         OLED_ShowCHinese(108,0,6);//萌
  125.                        
  126.                         OLED_ShowString(0,4,"Temp min set",16);

  127.                         OLED_ShowString(0,6," Min:",16);
  128.                         OLED_ShowNum(48,6,Temp_min/10,2,16);//21
  129.                         OLED_ShowString(64,6,".",16);
  130.                         OLED_ShowNum(72,6,Temp_min%10,1,16);//21       
  131.                         break;
  132.                 case 4:
  133.                         OLED_ShowCHinese(0,0,0);//超
  134.                         OLED_ShowCHinese(18,0,1);//可
  135.                         OLED_ShowCHinese(36,0,2);//愛(ài)
  136.                         OLED_ShowCHinese(54,0,3);//的
  137.                         OLED_ShowCHinese(72,0,4);//沈
  138.                         OLED_ShowCHinese(90,0,5);//萌
  139.                         OLED_ShowCHinese(108,0,6);//萌
  140.                        
  141.                         OLED_ShowString(0,4,"Solu max set",16);

  142.                         OLED_ShowString(0,6," Max:",16);
  143.                         OLED_ShowNum(48,6,Solu_max/10,2,16);//21
  144.                         OLED_ShowString(64,6,".",16);
  145.                         OLED_ShowNum(72,6,Solu_max%10,1,16);//21       
  146.                         OLED_ShowString(84,6,"%",16);
  147.                         break;
  148.                 case 5:
  149.                         OLED_ShowCHinese(0,0,0);//超
  150.                         OLED_ShowCHinese(18,0,1);//可
  151.                         OLED_ShowCHinese(36,0,2);//愛(ài)
  152.                         OLED_ShowCHinese(54,0,3);//的
  153.                         OLED_ShowCHinese(72,0,4);//沈
  154.                         OLED_ShowCHinese(90,0,5);//萌
  155.                         OLED_ShowCHinese(108,0,6);//萌
  156.                        
  157.                         OLED_ShowString(0,4,"Solu min set",16);

  158.                         OLED_ShowString(0,6," Min:",16);
  159.                         OLED_ShowNum(48,6,Solu_min/10,2,16);//21
  160.                         OLED_ShowString(64,6,".",16);
  161.                         OLED_ShowNum(72,6,Solu_min%10,1,16);//21
  162.                         OLED_ShowString(84,6,"%",16);
  163.                         break;
  164.                 default:
  165.                         break;
  166.         }
  167. }

  168. int main(void)
  169. {       

  170.         u32 MQ2Val;
  171.        
  172.         InitADC();                                //初始化ADC
  173.          
  174.         OLED_MyInit();
  175.        
  176.         while(1)
  177.         {               
  178.                 MQ2Val = GetADCResult(0)*100;
  179.                 MQ2Val = MQ2Val/255;
  180.                 MQ2Val = MQ2Val * 10;
  181.                 if(MQ2Val==1000)MQ2Val=990;
  182.                
  183.                 LcdDisplay(Ds18b20ReadTemp());
  184.                
  185.                 if((system_temp<Temp_min)||(system_temp>Temp_max))
  186.                 {
  187.                         Temp_LED = 0;//報(bào)警
  188.                         Beep = 0;
  189.                 }else
  190.                 {
  191.                         Temp_LED = 1;//不報(bào)警
  192.                 }
  193.                
  194.                 if((MQ2Val<Solu_min)||(MQ2Val>Solu_max))
  195.                 {
  196.                         Solu_LED = 0;//報(bào)警
  197.                         Beep = 0;
  198.                 }else
  199.                 {
  200.                         Solu_LED = 1;//不報(bào)警
  201.                 }
  202.                
  203.                 //如果報(bào)警燈都沒(méi)亮。
  204.                 if((Solu_LED == 1)&&(Temp_LED == 1))
  205.                 {
  206.                         Beep = 1;
  207.                 }
  208.                
  209.                
  210.                 if(layout_static == 1)
  211.                 {
  212.                         DisplayMQ2(MQ2Val);
  213.                         DisplayTemp(system_temp);
  214.                 }
  215.                 switch(KeyScan())
  216.                 {
  217.                         case 1://Set
  218.                                 layout_static++;//視圖切換
  219.                                 if(layout_static == 6)
  220.                                 {
  221.                                         layout_static = 1;
  222.                                 }
  223.                                 layout_switch(layout_static,1);
  224.                                 break;
  225.                        
  226.                         case 2://up
  227.                                 if(layout_static == 2)
  228.                                 {
  229.                                         if(Temp_max!=990)//不超過(guò)99℃
  230.                                         Temp_max=Temp_max+10;
  231.                                 }else if(layout_static == 3)
  232.                                 {
  233.                                         if(Temp_min<Temp_max-10)//不超過(guò)最大值減1,保持區(qū)間
  234.                                         Temp_min=Temp_min+10;                                       
  235.                                 }else if(layout_static == 4)
  236.                                 {
  237.                                         if(Solu_max!=990)//不超過(guò)99℃
  238.                                         Solu_max=Solu_max+10;                                       
  239.                                 }else if(layout_static == 5)
  240.                                 {
  241.                                         if(Solu_min<Solu_max-10)//不超過(guò)最大值減1,保持區(qū)間
  242.                                         Solu_min=Solu_min+10;                                                                       
  243.                                 }
  244.                                 layout_switch(layout_static,0);
  245.                                 break;
  246.                        
  247.                         case 3://down
  248.                                 if(layout_static == 2)
  249.                                 {
  250.                                         if(Temp_max>Temp_min+10)
  251.                                         Temp_max=Temp_max-10;
  252.                                 }else if(layout_static == 3)
  253.                                 {
  254.                                         if(Temp_min!=10)
  255.                                         Temp_min=Temp_min-10;
  256.                                 }else if(layout_static == 4)
  257.                                 {
  258.                                         if(Solu_max>Solu_min+10)
  259.                                         Solu_max=Solu_max-10;                                       
  260.                                 }else if(layout_static == 5)
  261.                                 {
  262.                                         if(Solu_min!=10)
  263.                                         Solu_min=Solu_min-10;                                       
  264.                                 }
  265.                                 layout_switch(layout_static,0);
  266.                                 break;
  267.                        
  268.                         default:
  269.                                 break;
  270.                 }

  271.         }          

  272. }
復(fù)制代碼


Keil代碼和原理圖2個(gè)文件下載:
01.7z (140.65 KB, 下載次數(shù): 21)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区中文在线 | 久久久免费少妇高潮毛片 | 亚洲视频在线观看一区二区三区 | 国产精品美女久久久 | 黑人巨大精品欧美一区二区一视频 | 久久久91 | 天天艹 | 天堂在线91| 在线中文视频 | 中文字幕成人av | 免费一区| 欧美国产日韩一区二区三区 | 伊人91在线 | 97免费在线观看视频 | 日韩久久精品视频 | 日韩视频免费 | 精品乱码久久久久 | 久久久九九 | 99国产精品久久久久久久 | 一级国产精品一级国产精品片 | 久久久久九九九九 | 亚洲网址在线观看 | 精品国产久 | 午夜精品久久久久久久星辰影院 | 日韩资源 | 成人激情视频免费观看 | 日韩中文字幕一区二区 | 亚洲国产精品久久久 | 国产精品成人一区二区三区夜夜夜 | 国产精品久久久久久网站 | 精品国产免费人成在线观看 | 黄a网站| 在线日韩 | 国产三区视频在线观看 | 天天夜干 | 欧美一级艳情片免费观看 | 国产美女h视频 | 日韩精品在线播放 | 欧美男人天堂 | 久久久久国产精品人 | 成人免费网站视频 |