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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

MQ-2火災煙霧報警系統單片機程序加電路原理圖

  [復制鏈接]
跳轉到指定樓層
樓主
需要的請下載不謝
MQ-2電路原理圖如下:


MQ-2煙霧檢測與報警單片機源程序如下:
  1. #include <AT89X52.h>
  2. #include <intrins.h>
  3. #include "DS18B20.h"   
  4. #define uint unsigned int
  5. #define uchar unsigned char   //宏定義
  6. #define SET P1_0    //定義調整鍵
  7. #define DEC P1_1    //定義減少鍵
  8. #define ADD P1_2    //定義增加鍵
  9. #define BEEP P3_4    //定義蜂鳴器
  10. #define hujiao P1_3
  11. sbit ADCS = P3^7;
  12. sbit ADCLK = P3^5;
  13. sbit ADDI = P3^6;
  14. sbit ADDO = P3^6;
  15. bit shanshuo_st;    //閃爍間隔標志
  16. bit beep_st;     //蜂鳴器間隔標志
  17. bit flag=0;//緊急呼叫標志
  18. sbit DIAN = P2^5;        //小數點
  19. uint abc;
  20. uchar x=4;      //計數器
  21. signed char m;     //溫度值全局變量
  22. uchar n;      //溫度值全局變量
  23. uchar set_st=0;     //狀態標志
  24. signed char shangxian=30; //上限報警溫度,默認值為38
  25. signed char xiaxian=5;   //下限報警溫度,默認值為38
  26. uchar nongdu=4;
  27. uchar code LEDData[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0};
  28. /*****延時子程序*****/
  29. void Delay(uint num)
  30. {
  31. while( --num );
  32. }
  33. /*****初始化定時器0*****/
  34. void InitTimer(void)
  35. {
  36. TMOD=0x1;
  37. TH0=0x4c;
  38. TL0=0x00;     //50ms(晶振11.0592M)
  39. }
  40. /*****定時器0中斷服務程序*****/
  41. void timer0(void) interrupt 1
  42. {
  43. TH0=0x4c;
  44. TL0=0x00;
  45. x++;
  46. }
  47. /*****讀取溫度*****/
  48. void check_wendu(void)
  49. {
  50. uint a,b,c;
  51. c=ReadTemperature()-5; //獲取溫度值并減去DS18B20的溫漂誤差
  52. a=c/100;     //計算得到十位數字
  53. b=c/10-a*10;    //計算得到個位數字
  54. m=c/10;      //計算得到整數位
  55. n=c-a*100-b*10;    //計算得到小數位
  56. if(m<0){m=0;n=0;}   //設置溫度顯示上限
  57. if(m>99){m=99;n=9;}   //設置溫度顯示上限   
  58. }
  59. /*****顯示開機初始化等待畫面*****/
  60. Disp_init()   
  61. {
  62. P2 = 0xf7;      //顯示-
  63. P0 = 0xbf;
  64. Delay(200);
  65. P0 = 0xef;
  66. Delay(200);   
  67. P0 = 0xfb;
  68. Delay(200);
  69. P0 = 0xfe;
  70. Delay(200);
  71. P0 = 0xff;         //關閉顯示
  72. }
  73. /*****顯示溫度子程序*****/
  74. Disp_Temperature()     //顯示溫度
  75. {
  76. P2 =LEDData[m%10];      //顯示C
  77. P0 = 0xbf;
  78. Delay(300);
  79. P2 =LEDData[m/10];    //顯示個位
  80. P0 = 0xef;
  81. Delay(300);
  82. P2 =0xf7;    //顯示十位
  83. P0 = 0xfb;
  84. Delay(300);
  85. P2 =LEDData[abc];    //顯示百位
  86. P0 = 0xfe;
  87. Delay(300);
  88. P0 = 0xff;         //關閉顯示
  89. }
  90. /*****顯示報警溫度子程序*****/
  91. Disp_alarm(uchar baojing)
  92. {
  93. P2 =0x3c;      //顯示C
  94. P0 = 0xbf;
  95. Delay(200);
  96. P2 =LEDData[baojing%10]; //顯示十位
  97. P0 = 0xef;
  98. Delay(200);
  99. P2 =LEDData[baojing/10]; //顯示百位
  100. P0 = 0xfb;
  101. Delay(200);
  102. if(set_st==1)P2 =0x61;
  103. else if(set_st==2)P2 =0x3d; //上限H、下限L標示
  104. P0 = 0xfe;
  105. Delay(200);
  106. P0 = 0xff;         //關閉顯示
  107. }
  108. Disp_nongdu(uchar baojing)//煙霧濃度報警顯示
  109. {
  110. P2 =0xff;      
  111. P0 = 0xbf;
  112. Delay(200);
  113. P2 =0xff;
  114. P0 = 0xef;
  115. Delay(200);
  116. P2 =0xff;
  117. P0 = 0xfb;
  118. Delay(200);
  119. P2 =LEDData[baojing];//顯示濃度
  120. P0 = 0xfe;
  121. Delay(200);
  122. P0 = 0xff;         //關閉顯示
  123. }
  124. /*****報警子程序*****/
  125. void Alarm()
  126. {
  127. if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=1;
  128. else if(abc>=nongdu&&beep_st==1) BEEP=1;
  129. else BEEP=0;
  130. if(x>=10){beep_st=~beep_st;x=0;}
  131. }
  132. void Alarm1()
  133. {
  134. if(x>=10){beep_st=~beep_st;x=0;}
  135. if(beep_st==1)BEEP=1;
  136. else BEEP=0;
  137. }
  138. uchar ADC0832(bit mode,bit channel)     //AD轉換,返回結果
  139. {
  140.         uchar i,dat,ndat;
  141.        
  142.         ADCS = 0;//拉低CS端
  143.         _nop_();
  144.         _nop_();
  145.        
  146.         ADDI = 1;        //第1個下降沿為高電平
  147.         ADCLK = 1;//拉高CLK端
  148.         _nop_();
  149.         _nop_();
  150.         ADCLK = 0;//拉低CLK端,形成下降沿1
  151.         _nop_();
  152.         _nop_();
  153.        
  154.         ADDI = mode;        //低電平為差分模式,高電平為單通道模式。       
  155.         ADCLK = 1;//拉高CLK端
  156.         _nop_();
  157.         _nop_();
  158.         ADCLK = 0;//拉低CLK端,形成下降沿2
  159.         _nop_();
  160.         _nop_();
  161.        
  162.         ADDI = channel;        //低電平為CH0,高電平為CH1       
  163.         ADCLK = 1;//拉高CLK端
  164.         _nop_();
  165.         _nop_();
  166.         ADCLK = 0;//拉低CLK端,形成下降沿3
  167.        
  168.         ADDI = 1;//控制命令結束(經試驗必需)
  169.         dat = 0;
  170.         //下面開始讀取轉換后的數據,從最高位開始依次輸出(D7~D0)
  171.         for(i = 0;i < 8;i++)
  172.         {
  173.                 dat <<= 1;
  174.                 ADCLK=1;//拉高時鐘端
  175.                 _nop_();
  176.                 _nop_();
  177.                 ADCLK=0;//拉低時鐘端形成一次時鐘脈沖
  178.                 _nop_();
  179.                 _nop_();
  180.                 dat |= ADDO;
  181.         }
  182.         ndat = 0;            //記錄D0
  183.         if(ADDO == 1)
  184.         ndat |= 0x80;
  185.         //下面開始繼續讀取反序的數據(從D1到D7)
  186.         for(i = 0;i < 7;i++)
  187.         {
  188.                 ndat >>= 1;
  189.                 ADCLK = 1;//拉高時鐘端
  190.                 _nop_();
  191.                 _nop_();
  192.                 ADCLK=0;//拉低時鐘端形成一次時鐘脈沖
  193.                 _nop_();
  194.                 _nop_();
  195.                 if(ADDO==1)
  196.                 ndat |= 0x80;
  197.         }          
  198.         ADCS=1;//拉高CS端,結束轉換
  199.         ADCLK=0;//拉低CLK端
  200.         ADDI=1;//拉高數據端,回到初始狀態
  201.         if(dat==ndat)
  202.         return(dat);
  203.         else
  204.         return 0;   
  205. }
  206. /*****主函數*****/
  207. void main(void)
  208. {
  209.     uint z;
  210. InitTimer();    //初始化定時器
  211. EA=1;      //全局中斷開關
  212. TR0=1;
  213. ET0=1;      //開啟定時器0
  214. BEEP=0;
  215. check_wendu();
  216. check_wendu();
  217. for(z=0;z<300;z++)
  218. {
  219. Disp_init();        
  220. }
  221. while(1)
  222. {
  223. if(hujiao==0)
  224. {
  225.    Delay(2000);
  226.    do{}while(hujiao==0);
  227.    flag=~flag;
  228. }
  229. if(SET==0)
  230. {
  231.    Delay(2000);
  232.    do{}while(SET==0);
  233.    set_st++;x=0;shanshuo_st=1;
  234.    if(set_st>3)set_st=0;
  235. }
  236. if(set_st==0)
  237. {
  238.                 abc = ADC0832(1,0);  //差分模式,CH0-CH1
  239.                 abc = abc*19.607843; //轉換為實際電壓便于顯示
  240.                 abc=abc/1000%10;
  241.     check_wendu();
  242.       Disp_Temperature();
  243. if(flag==1)Alarm1();
  244. else    Alarm();   //報警檢測
  245. }
  246. else if(set_st==1)
  247. {
  248.    BEEP=0;    //關閉蜂鳴器
  249.         if(DEC==0)
  250.         {
  251.                 Delay(2000);
  252.                    do{}while(DEC==0);
  253.                 shangxian--;
  254.                 if(shangxian<xiaxian)shangxian=xiaxian;
  255.         }
  256.         if(ADD==0)
  257.         {
  258.                 Delay(2000);
  259.                    do{}while(ADD==0);
  260.                 shangxian++;
  261.                 if(shangxian>99)shangxian=99;
  262.         }
  263.    if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
  264.    if(shanshuo_st) {Disp_alarm(shangxian);}
  265. }
  266. else if(set_st==2)
  267. {
  268.    BEEP=0;    //關閉蜂鳴器
  269.         if(DEC==0)
  270.         {
  271.                 Delay(2000);
  272.                    do{}while(DEC==0);
  273.                 xiaxian--;
  274.                 if(xiaxian<0)xiaxian=0;
  275.         }
  276.         if(ADD==0)
  277. ……………………

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

所有資料51hei提供下載:
火災報警系統程序 原理圖.rar (521.84 KB, 下載次數: 347)


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

使用道具 舉報

沙發
ID:267227 發表于 2018-4-17 18:37 | 只看該作者
菜鳥想知道硬件怎么連
回復

使用道具 舉報

板凳
ID:319334 發表于 2018-6-6 18:44 | 只看該作者
MQ2怎么連接,A、h引腳代表啥
回復

使用道具 舉報

地板
ID:445564 發表于 2018-12-14 11:20 | 只看該作者
不錯不錯!
回復

使用道具 舉報

5#
ID:445564 發表于 2018-12-14 11:22 | 只看該作者
可以拿來用嗎?
回復

使用道具 舉報

6#
ID:445564 發表于 2018-12-17 19:05 | 只看該作者
畫圖用的什么軟件?
回復

使用道具 舉報

7#
ID:353814 發表于 2018-12-25 23:26 | 只看該作者
感謝分享
回復

使用道具 舉報

8#
ID:454994 發表于 2019-1-4 00:02 | 只看該作者
砂鍋打老虎 發表于 2018-12-17 19:05
畫圖用的什么軟件?

protel
回復

使用道具 舉報

9#
ID:511172 發表于 2019-4-13 14:04 | 只看該作者
如果用mq-2接lm393比較器,用lcd1602顯示溫度跟濕度怎么編寫程序
回復

使用道具 舉報

10#
ID:472360 發表于 2019-5-20 17:55 | 只看該作者
畫的什么東西!?
回復

使用道具 舉報

11#
ID:543049 發表于 2019-5-30 09:55 | 只看該作者
真的需要這個
回復

使用道具 舉報

12#
ID:550820 發表于 2019-5-30 11:01 | 只看該作者
不錯不錯,感謝分享
回復

使用道具 舉報

13#
ID:497598 發表于 2020-2-1 17:53 | 只看該作者
原理圖里沒有MQ-2?我怎么沒看到
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产人成精品一区二区三 | 亚洲人成人一区二区在线观看 | 久久777| 国产一区二区三区在线视频 | 91精品国产欧美一区二区成人 | 女人av | 激情欧美一区二区三区 | 日日夜夜91 | 国产免费一区 | 午夜免费电影 | 亚洲 中文 欧美 日韩 在线观看 | 精品视频在线一区 | 极品销魂美女一区二区 | 男人的天堂久久 | 久久亚洲一区二区三区四区 | 黄色大片视频 | 麻豆国产一区二区三区四区 | 中文字幕 在线观看 | 亚洲成人中文字幕 | 在线成人免费视频 | 在线成人免费视频 | www.99re| 一二三区视频 | 久久久精品一区二区三区四季av | 成人在线中文字幕 | 日韩精品久久久久 | 视频一区在线观看 | 午夜久久久久久久久久一区二区 | 久久久久亚洲国产| 久久久精品久久 | 久久男人天堂 | 放个毛片看看 | 免费观看一级毛片 | www.天堂av.com | 人人玩人人添人人澡欧美 | 久久男人 | 成年人精品视频 | 精品一区二区在线观看 | 精品在线一区二区三区 | 日本 欧美 国产 | 日韩在线观看视频一区 |