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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于PCF8591轉換器實現煙霧報警器仿真和單片機程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:410399 發(fā)表于 2018-10-30 08:10 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
基于PCF8591轉換器實現煙霧報警,LCD1602液晶屏和數碼管實現檢測煙霧濃度,超過預設值蜂鳴器響,燈亮。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序:
  1. #include <reg51.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #include <intrins.h>
  3. #include "I2C.h"

  4. #define     u8                  unsigned char
  5. #define     u16                   unsigned int
  6. #define     uchar                  unsigned char
  7. #define     uint                   unsigned int

  8. #define nops()  do{_nop_();_nop_();_nop_();_nop_();_nop_();} while(0) //定義空指令


  9. #define  READADDR  0x91    //讀地址
  10. #define  WRITEADDR  0x90    //寫地址


  11. sbit SCL = P1^7;       //I2C  時鐘
  12. sbit SDA = P1^6;       //I2C  數據

  13. uchar yanwu;                                                 //用于讀取ADC數據
  14. uchar yushe_yanwu=100;                                //煙霧預設值

  15. //運行模式  
  16. uchar Mode=0;                                                 //  =1是設置煙霧閥值        =0是正常監(jiān)控模式

  17. //管腳聲明
  18. sbit Led_Reg                =P2^2;                                 //紅燈
  19. sbit Buzzer                     =P1^5;                                 //蜂鳴器
  20. sbit Fan                     =P3^3;                                 //



  21. /********************************************************************
  22. * 名稱 : delay_1ms()
  23. * 功能 : 延時1ms函數
  24. * 輸入 : q
  25. * 輸出 : 無
  26. ***********************************************************************/
  27. void delay_ms(uint q)
  28. {
  29.         uint i,j;
  30.         for(i=0;i<q;i++)
  31.                 for(j=0;j<110;j++);
  32. }
  33. /***********************************************************************************************************
  34. LCD1602相關函數
  35.         特殊接口說明
  36.                 RS:寄存器選擇輸入端
  37.                         RS = 1:指向數據寄存器                 數據
  38.                         RS = 0:指向指令寄存器                        命令

  39.                 RW:讀寫控制輸入端
  40.                         RW = 0:寫操作                 RW = 1:讀操作

  41.                 E:使能信號輸入端
  42.                         讀操作時,高電平有效;
  43.                         寫操作時,下降沿有效;
  44. ***********************************************************************************************************/

  45. //LCD管腳聲明 (RW引腳實物直接接地,因為本設計只用到液晶的寫操作,RW引腳一直是低電平)
  46. sbit LCDRS = P2^6;                                //寄存器選擇輸入端,RS = 1 指向數據(讀或寫數據)        RS = 0指向指令(讀或寫命令)
  47. sbit LCDEN = P2^7;
  48. sbit D0                 = P0^0;
  49. sbit D1                 = P0^1;
  50. sbit D2                 = P0^2;
  51. sbit D3                 = P0^3;
  52. sbit D4                 = P0^4;
  53. sbit D5                 = P0^5;
  54. sbit D6                 = P0^6;
  55. sbit D7                 = P0^7;



  56. //LCD延時
  57. void LCDdelay(uint z)                  //該延時大約100us(不精確,液晶操作的延時不要求很精確)
  58. {
  59.         uint x,y;
  60.         for(x=z;x>0;x--)
  61.                 for(y=10;y>0;y--);
  62. }

  63. void LCD_WriteData(u8 dat)         
  64. {
  65.         if(dat&0x01)D0=1;else D0=0;
  66.         if(dat&0x02)D1=1;else D1=0;
  67.         if(dat&0x04)D2=1;else D2=0;
  68.         if(dat&0x08)D3=1;else D3=0;
  69.         if(dat&0x10)D4=1;else D4=0;
  70.         if(dat&0x20)D5=1;else D5=0;
  71.         if(dat&0x40)D6=1;else D6=0;
  72.         if(dat&0x80)D7=1;else D7=0;
  73. }
  74. //寫命令
  75. void write_com(uchar com)
  76. {
  77.         LCDRS=0;                                //RS = 0 ,指向數據寄存器,                          
  78.         LCD_WriteData(com);
  79. //  DAT=com;
  80.         LCDdelay(5);
  81.         LCDEN=1;
  82.         LCDdelay(5);
  83.         LCDEN=0;
  84. }
  85. //寫數據
  86. void write_data(uchar date)
  87. {
  88.         LCDRS=1;
  89.         LCD_WriteData(date);
  90. //  DAT=date;
  91.         LCDdelay(5);
  92.         LCDEN=1;
  93.         LCDdelay(5);
  94.         LCDEN=0;
  95. }

  96. /*------------------------------------------------
  97.               選擇寫入位置
  98.         x = 0        表示寫入第一行, y是列
  99.         x = 1          表示寫入第二行, y是列
  100. ------------------------------------------------*/
  101. void SelectPosition(unsigned char x,unsigned char y)                 
  102. {     
  103.         if (x == 0)
  104.         {     
  105.                 write_com(0x80 + y);     //表示第一行
  106.         }
  107.         else
  108.         {      
  109.                 write_com(0xC0 + y);      //表示第二行
  110.         }        
  111. }
  112. /*------------------------------------------------
  113.               寫入字符串函數
  114.                 x是行,y是列,*s是寫入的數據
  115. ------------------------------------------------*/
  116. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  117. {     
  118.         SelectPosition(x,y) ;
  119.         while (*s)
  120.         {     
  121.                 write_data( *s);     
  122.                 s++;     
  123.         }
  124. }
  125. //========================================================================
  126. // 函數: void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
  127. // 應用: LCD_Write_Char(0,1,366,4) ;
  128. // 描述: 在第0行第一個字節(jié)位置顯示366的后4位,顯示結果為 0366
  129. // 參數: x:行,y:列,s:要顯示的字,l:顯示的位數
  130. // 返回: none.
  131. // 版本: VER1.0
  132. // 備注: 最大顯示65535
  133. //========================================================================
  134. void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
  135. {     
  136.         SelectPosition(x,y) ;

  137.         if(l>=5)
  138.                 write_data(0x30+s/10000%10);        //萬位
  139.         if(l>=4)
  140.                 write_data(0x30+s/1000%10);                //千位
  141.         if(l>=3)
  142.                 write_data(0x30+s/100%10);                //百位
  143.         if(l>=2)
  144.                 write_data(0x30+s/10%10);                        //十位
  145.         if(l>=1)
  146.                 write_data(0x30+s%10);                //個位

  147. }
復制代碼

全部資料51hei下載地址:
煙霧報警器.zip (142.14 KB, 下載次數: 184)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:269211 發(fā)表于 2018-10-31 09:28 | 只看該作者
請問您這個煙霧報警模塊的型號是哪一個?
回復

使用道具 舉報

板凳
ID:410399 發(fā)表于 2018-11-2 15:24 來自手機 | 只看該作者
chaoself 發(fā)表于 2018-10-31 09:28
請問您這個煙霧報警模塊的型號是哪一個?

MQ-2煙霧傳感器
回復

使用道具 舉報

地板
ID:509148 發(fā)表于 2019-4-11 13:45 | 只看該作者
void LCD_WriteData(u8 dat)          
{
        if(dat&0x01)D0=1;else D0=0;
        if(dat&0x02)D1=1;else D1=0;
        if(dat&0x04)D2=1;else D2=0;
        if(dat&0x08)D3=1;else D3=0;
        if(dat&0x10)D4=1;else D4=0;
        if(dat&0x20)D5=1;else D5=0;
        if(dat&0x40)D6=1;else D6=0;
        if(dat&0x80)D7=1;else D7=0;
}這段代碼是什么意思?什么作用?
回復

使用道具 舉報

5#
ID:503551 發(fā)表于 2019-6-1 10:55 | 只看該作者
你好,請問你的程序是完全可以運行的嗎,為什么我實際燒錄的時候沒有反應
回復

使用道具 舉報

6#
ID:768338 發(fā)表于 2020-6-14 17:00 | 只看該作者
你好,請問煙霧報警器壓縮包里有代碼嗎?
回復

使用道具 舉報

7#
ID:786582 發(fā)表于 2021-3-14 22:31 | 只看該作者
chaoself 發(fā)表于 2018-10-31 09:28
請問您這個煙霧報警模塊的型號是哪一個?

應該是MQ2煙霧傳感器吧
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本a网站 | 亚洲第一av | 亚洲福利一区 | 91亚洲一区| 成人黄色网址大全 | 亚洲欧美精品 | 日韩欧美在| 久久综合av | 在线播放中文字幕 | 中文字幕av网址 | 欧美在线观看网站 | 午夜影院网站 | 在线播放国产一区二区三区 | 国产精品一区二区三区免费观看 | 久久国产精品久久久久久 | 亚洲va国产日韩欧美精品色婷婷 | 亚洲不卡在线观看 | 久久久久久久久一区 | 青青草综合 | 色欧美综合 | 91成人在线视频 | 久久久国产精品 | 国产精品国产精品国产专区不蜜 | 国产99视频精品免费视频7 | 日韩国产在线观看 | 九九热在线免费观看 | 国产一区二区免费 | 国产亚洲精品久久久久久牛牛 | 毛片在线看片 | 一级黄色录像片子 | 亚洲一区免费 | 国产91在线 | 中日 | 久久久久久久久久久久久久国产 | 久久亚洲春色中文字幕久久久 | 国产精品影视在线观看 | 日本一区二区高清不卡 | 毛片国产| 天天操天天射综合网 | 久久久久久国产精品免费免费 | 国产91亚洲精品一区二区三区 | 国产伦精品一区二区三区精品视频 |