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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機一氧化碳CO濃度報警器設計(源碼+Proteus仿真)

  [復制鏈接]
跳轉到指定樓層
樓主
基于51單片機的CO濃度報警器設計,實際測試成功。MQ系列氣體傳感器通用!
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



制作出來的實物圖如下:


一氧化碳CO報警器元件清單

1)    9*15萬用板
2)    STC89C51單片機
3)    ADC0809
4)    28腳IC座
5)    40腳IC座
6)    1602液晶
7)    16p母座
8)    16p排針
9)    3p排針
10)    7*7風扇
11)    MQ-7煙霧傳感器
12)    5v繼電器(黃/藍)
13)    2.2k電阻*3
14)    1.5k電阻
15)    1k電阻*2
16)    5.1Ω電阻
17)    導線、焊錫
17)    220Ω電阻
18)    10k電阻*2
19)    470Ω電阻
20)    10uf電解電容
21)    30pf瓷片電容*2
22)    12M晶振
23)    按鍵*4
24)    103排阻(10k)
25)    有源蜂鳴器
26)    5mmLED (紅綠黃) *3
27)    9012三極管*2
28)    104獨石電容
29)    2p接線端子
30)    DC電源接口
31)    自鎖開關
32)    USB電源線
或電池盒+DC電源插口

單片機源程序如下:
  1. //程序頭函數
  2. #include <reg52.h>
  3. //顯示函數
  4. #include <display.h>

  5. //宏定義
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. #define Data_ADC0809 P1

  9. //管腳聲明
  10. sbit LED_R= P2^2;//紅燈
  11. sbit LED_G= P2^0;//綠燈
  12. sbit FENG = P2^5;//蜂鳴器
  13. sbit san=P3^4;         //風扇控制(選配)
  14. //ADC0809
  15. sbit ST=P3^3;
  16. sbit EOC=P3^6;
  17. sbit OE=P3^2;
  18. //按鍵
  19. sbit Key1=P2^6;         //設置鍵
  20. sbit Key2=P2^7;         //加按鍵
  21. sbit Key3=P3^7;         //減按鍵

  22. bit bdata flag;         //報警標志位
  23. uchar set;                 //設置狀態


  24. //函數聲明
  25. extern uchar ADC0809();
  26. extern void Key();

  27. //酒精含量變量
  28. uchar temp=0;

  29. uchar WARNING=25; //報警值

  30. void init()           //初始化函數
  31. {
  32.         TMOD=0x01; //工作方式
  33.          TL0=0xb0;
  34.          TH0=0x3c; //賦初值(12MHz晶振的50ms)
  35.          EA=1;          //打開中斷總開關
  36.         ET0=1;          //打開中斷允許開關
  37.          TR0=1;          //打開定時器開關
  38. }

  39. void main()          //主函數
  40. {
  41.         Init1602();//初始化顯示
  42.         init();           //初始化定時器
  43.         while(1)   //進入循環
  44.         {
  45.                 temp=ADC0809();                                   //讀取酒精濃度值
  46.                 if(set==0)                                           //只有在非設置狀態時,
  47.                 Display_1602(temp,WARNING);           //才刷新顯示實時濃度值
  48.                 if(temp<WARNING&&set==0)           //非設置時當濃度值小于報警值時
  49.                 {
  50.                         flag=0;                                           //報警標志位置0,不報警
  51.                 }
  52.                 else if(temp>WARNING&&set==0)  //非設置時當濃度值大于報警值時
  53.                 {
  54.                         flag=1;                                           //報警標志位置1
  55.                 }
  56.                 Key();                                                   //掃描按鍵
  57.         }
  58. }
  59. //ADC0809讀取信息
  60. uchar ADC0809()
  61. {
  62.         uchar temp_=0x00;
  63.         //初始化高阻太

  64.         OE=0;
  65.         //轉化初始化
  66.         ST=0;
  67.         //開始轉換
  68.         ST=1;
  69.         ST=0;
  70.         //外部中斷等待AD轉換結束
  71.         while(EOC==0)
  72.         //讀取轉換的AD值
  73.         OE=1;
  74.         temp_=Data_ADC0809;//將0809的數值讀入單片機
  75.         OE=0;
  76.         return temp_;           //返回讀到的數據
  77. }

  78. void Key()                          //按鍵函數
  79. {
  80.         if(Key1==0)                        //設置鍵按下時
  81.         {
  82.                 while(Key1==0);        //檢測按鍵是否釋放
  83.                 FENG=0;                        //蜂鳴器響
  84.                 set++;                        //設置狀態標志加
  85.                 flag=0;                        //停止報警
  86.                 san=1;                        //風扇停止轉動(選配)
  87.                 TR0=0;                        //定時器停止
  88.                 write_com(0x80+0x40+13);//選中報警值的位置
  89.                    write_com(0x0f);//打開顯示 無光標 光標閃爍
  90.         }
  91.         if(set>=2)                //再按一下設置鍵時,退出設置
  92.         {
  93.                 set=0;                        //設置狀態清零
  94.                 write_com(0x38);//屏幕初始化
  95.                 write_com(0x0c);//打開顯示 無光標 無光標閃爍
  96.                 FENG=1;                        //蜂鳴器停止響
  97.                 flag=1;                        //報警標志位置1
  98.                 TR0=1;                        //定時器開始計時
  99.         }
  100.         if(Key2==0&&set!=0)        //當在設置狀態時,按下加鍵時
  101.         {
  102.                 while(Key2==0);        //按鍵釋放
  103.                 FENG=0;                        //蜂鳴器鳴響
  104.                 WARNING++;                //報警閾值加
  105.                 if(WARNING>=255)//閾值最大加到255
  106.                 WARNING=0;                //清零
  107.                 write_com(0x80+0x40+11); //在閾值的位置寫入設置的數據
  108.                 write_data('0'+WARNING/100); //顯示百位(將123除以100得到的商是1,就是百位數據)123為例子
  109.                 write_data('0'+WARNING/10%10);//顯示十位(將123除以10得到商是12,將12除以10的余數就是十位)
  110.                 write_data('0'+WARNING%10);          //顯示個位(將123除以10的余數3就是個位數據)123為例子
  111.                 write_com(0x80+0x40+13);//位置
  112.                 FENG=1;//蜂鳴器停止
  113.         }
  114.         if(Key3==0&&set!=0)         //減按鍵注釋參考加按鍵部分
  115.         {
  116.                 while(Key3==0);
  117.                 FENG=0;
  118.                 WARNING--;
  119.                 if(WARNING<=0)
  120.                 WARNING=255;
  121.                 write_com(0x80+0x40+11);
  122.                 write_data('0'+WARNING/100);
  123.                 write_data('0'+WARNING/10%10);
  124.                 write_data('0'+WARNING%10);
  125.                 write_com(0x80+0x40+13);//位置
  126.                 FENG=1;
  127.         }
  128. }

  129. void  time1_int(void) interrupt 1  //定時器函數
  130. {
  131.         uchar count;
  132.         TL0=0xb0;
  133.          TH0=0x3c;        //重新賦初值
  134.           count++;        //計時變量加
  135.         if(count==10)//定時器定時是50ms,此處計數10次,正好是500ms,用于報警時 燈亮和蜂鳴器響
  136.         {
  137.                 if(flag==0)                   //報警標志為0時
  138.                 {
  139.                         LED_G=0;           //綠燈亮
  140.                         LED_R=1;           //紅燈滅
  141.                         FENG=1;                   //蜂鳴器不響
  142.                         san=1;                 //風扇不轉(選配)
  143.                 }
  144.                 if(flag==1)                 //報警標志位為1時
  145.                 {
  146.                         LED_G=1;         //綠燈滅
  147.                         LED_R=0;         //紅燈亮
  148.                         FENG=0;                 //蜂鳴器響
  149.                         san=0;                 //風扇轉動(選配)
  150.                 }
  151.         }

  152.            if(count==20)                 //計數到20時,正好是1000ms,就是1s,這里就是讓燈滅,蜂鳴器不響,從而做出閃爍的效果
  153.            {
  154.                 count=0;                 //計到1s時,將count清零,準備重新計數
  155.                 if(flag==0)
  156.                 {
  157.                         LED_G=1;
  158.                         LED_R=1;
  159.                         FENG=1;
  160.                         san=1;                //全部關閉
  161.                 }
  162.                 if(flag==1)
  163.                 {
  164.                         LED_G=1;
  165.                         LED_R=1;
  166.                         FENG=1;
  167.                         san=0;                //報警值,風扇是一直轉動的(選配)
  168.                 }
  169.         }
  170. }
復制代碼

所有資料51hei提供下載:
CO警器.7z (936.34 KB, 下載次數: 431)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:712035 發表于 2020-3-21 12:05 | 只看該作者
非常感謝,好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:441190 發表于 2020-4-7 14:57 | 只看該作者
用Proteus7.5打開
回復

使用道具 舉報

地板
ID:730198 發表于 2020-4-16 00:13 | 只看該作者
能麻煩大佬教教怎么調試嗎
回復

使用道具 舉報

5#
ID:731671 發表于 2020-4-17 21:19 | 只看該作者
學的時候我一直沒搞懂,按鍵函數的那個按鍵是指什么?物理開關嗎?
回復

使用道具 舉報

6#
ID:731712 發表于 2020-4-17 21:57 | 只看該作者
向大佬學習。
回復

使用道具 舉報

7#
ID:731804 發表于 2020-4-18 07:40 | 只看該作者
感謝作者。
回復

使用道具 舉報

8#
ID:741251 發表于 2020-4-29 20:48 | 只看該作者
感謝樓主的分享!
回復

使用道具 舉報

9#
ID:559553 發表于 2020-6-8 13:45 | 只看該作者
感謝分享
回復

使用道具 舉報

10#
ID:772905 發表于 2020-6-8 15:46 | 只看該作者
感謝分享
回復

使用道具 舉報

11#
ID:780003 發表于 2020-6-15 16:35 | 只看該作者
compiling 01.c...
01.c(4): warning C318: can't open file 'display.h'
01.C(50): warning C206: 'Init1602': missing function-prototype
01.C(56): warning C206: 'Display_1602': missing function-prototype
01.C(56): error C267: 'Display_1602': requires ANSI-style prototype
Target not created
這是哪里有錯誤啊

回復

使用道具 舉報

12#
ID:780747 發表于 2020-6-16 10:40 | 只看該作者
感謝樓主分項
回復

使用道具 舉報

13#
ID:854512 發表于 2020-12-4 21:33 | 只看該作者
感謝樓主分享,但是為什么代碼編譯錯誤呀,大佬求解,有沒有運行出來的
回復

使用道具 舉報

14#
ID:854512 發表于 2020-12-5 14:38 來自手機 | 只看該作者
好多壓縮包說是壞了,咋搞
回復

使用道具 舉報

15#
ID:854512 發表于 2020-12-5 18:38 來自手機 | 只看該作者
proteus仿真在哪里呀
回復

使用道具 舉報

16#
ID:855632 發表于 2020-12-6 23:10 來自手機 | 只看該作者
受教了,最近一直在做這方面的內容,終于找到了這么好的論壇
回復

使用道具 舉報

17#
ID:857301 發表于 2020-12-9 14:51 | 只看該作者
大佬有粉塵濃度的嗎
回復

使用道具 舉報

18#
ID:854512 發表于 2020-12-11 18:27 來自手機 | 只看該作者
樓主你的風扇呢
回復

使用道具 舉報

19#
ID:270495 發表于 2021-12-8 15:34 | 只看該作者
啊~~~第54行,ADC0809返回的數值不是電壓值嗎?不需要轉換才是酒精濃度嗎?
回復

使用道具 舉報

20#
ID:496636 發表于 2022-10-26 07:24 | 只看該作者
你把啦 發表于 2020-12-5 14:38
好多壓縮包說是壞了,咋搞

就是用快壓壓縮的壓縮包,快壓這軟件是垃圾,廣告一大堆,裝這個軟件,七大姑八大姨一塊兒來。它無非是用其自己的方式壓縮,當然普通的正規的壓縮軟件如WinRAR就解不了它,非它可解,有一大群人傳這種壓縮包的資料,叫你去裝這個軟件。這個軟件有個好處就是不需要解壓,就可以從一個大壓縮包里提取出文件或是加入文件,其實這就不叫壓縮了,實質就是一個文件夾而已。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲性爰| 国产成人在线免费 | 日本一区二区不卡 | 精品伊人 | 亚洲成人一区 | 欧美中文字幕一区二区 | 欧美成人猛片aaaaaaa | 久久伊人精品 | 一区在线播放 | 久久综合婷婷 | 亚洲第一av网站 | 超碰激情 | 国产精品爱久久久久久久 | 日韩一区二区三区av | 国产精品久久久久久久 | 日韩中文不卡 | 在线视频一区二区三区 | 欧美成人aaa级毛片在线视频 | 操久久| 中文字幕亚洲精品 | 亚洲精品视频在线看 | 成人精品一区二区 | 成人无遮挡毛片免费看 | 羞羞视频在线观看网站 | 日韩欧美中文字幕在线观看 | 精品久久伊人 | 一区中文字幕 | 亚洲免费在线 | 亚洲一级淫片 | aaaaaa大片免费看最大的 | 日韩久草| 成人午夜网站 | 久久国产亚洲 | 久久国内精品 | 国产精品久久国产精品99 gif | 日韩精品在线免费观看视频 | 最新中文字幕一区 | 国产成人精品一区二区三区 | 日韩一区二区三区视频在线观看 | 91久久久久 | 伊人亚洲|