找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8347|回复: 12
打印 上一主题 下一主题
收起左侧

可燃气体报警器(浓度检测)仿真与单片机源码

  [复制链接]
跳转到指定楼层
楼主
可燃气体报警器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


可燃气体报警器元器件清单


单片机源程序:
  1. #include<reg51.h>    //包含单片机寄存器的头文件
  2. #include<intrins.h>  //包含_nop_()函数定义的头文件
  3. unsigned char flag=0; //紧急报警标示位
  4. unsigned char flag1=0; //传感器检测报警标示位
  5. unsigned int after_AD_val=0;    //储存浓度数值范围是100-10000
  6. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f共阴极
  7. unsigned int TIME_1;
  8. sbit CS=P1^0;       //将CS位定义为P3.4引脚0xc0,
  9. sbit CLK=P1^1;      //将CLK位定义为P1.0引脚
  10. sbit DIO=P1^2;       //将DIO位定义为P1.1引脚
  11. sbit K1=P2^4;
  12. sbit LED1=P2^0;                 //警情指示灯
  13. sbit LED2=P2^1;                 //正常指示灯
  14. sbit BEEP=P2^2;

  15. sbit wei1=P3^0;
  16. sbit wei2=P3^1;
  17. sbit wei3=P3^2;
  18. sbit wei4=P3^3;

  19. unsigned int wan,qian,bai,shi,ge;


  20. void delay1ms()
  21. {
  22.    unsigned char i,j;        
  23.          for(i=0;i<10;i++)
  24.           for(j=0;j<33;j++)
  25.            ;                 
  26. }
  27. void delay2ms()
  28. {
  29.    unsigned char i,j;        
  30.          for(i=0;i<120;i++)
  31.           for(j=0;j<33;j++)
  32.            ;                 
  33. }

  34. void delaynms(unsigned char n)
  35. {
  36.    unsigned char i;
  37.         for(i=0;i<n;i++)
  38.            delay1ms();
  39. }
  40. void key()
  41. {
  42.         if(K1==0)
  43.         {
  44.                 delaynms(5);
  45.                 if(K1==0)
  46.                 {
  47.                         while(!K1);
  48.                         flag++;
  49.                         if(flag==2)
  50.                         flag=0;
  51.                 }
  52.         }
  53. }
  54. /*****************************************************

  55. 函数功能:报警子程序

  56. *****************************************************/
  57. void baojing()
  58. {
  59.         if(flag==1||flag1==1)
  60.         {
  61.                 LED2=1;
  62.                 LED1=0;
  63.                 BEEP=0;
  64.                 delaynms(10);
  65.                 BEEP=1;
  66.                 delaynms(10);
  67.         }
  68.         if(flag==0&&flag1==0)
  69.         {
  70.                 LED2=0;
  71.                 LED1=1;
  72.                 BEEP=1;
  73.         }
  74. }
  75. void display()
  76. {
  77. //unsigned sel;
  78.         wan=after_AD_val/10000;
  79.         qian=(after_AD_val/1000)%10;
  80.         bai=(after_AD_val/100)%10;
  81.         shi=(after_AD_val/10)%10;
  82.         ge=after_AD_val%10;
  83.         //sel=0x01;
  84. //P0=table[wan];
  85.         // P3=sel;
  86.         //        delaynms(3);
  87.         //P3=0x00;
  88. //sel=sel<<1;
  89.          P0=table[qian];
  90.         wei1=1;
  91. delaynms(1);
  92.         wei1=0;
  93. //sel=sel<<1;
  94. P0=table[bai];
  95. wei2=1;
  96. delaynms(3);
  97.         wei2=0;
  98. //sel=sel<<1;
  99. P0=table[shi];
  100. wei3=1;
  101. delaynms(3);
  102. wei3=0;
  103. //sel=sel<<1;
  104. P0=table[ge];
  105. wei4=1;
  106. delaynms(3);
  107. wei4=0;
  108. //sel=sel<<1;
  109.                

  110. }



  111. /*****************************************************
  112. 函数功能:将模拟信号转换成数字信号
  113. ***************************************************/
  114. unsigned int  A_D()
  115. {
  116.   unsigned char i,dat;
  117.    CS=1;   //一个转换周期开始
  118.    CLK=0;  //为第一个脉冲作准备
  119.    CS=0;  //CS置0,片选有效

  120.    DIO=1;    //DIO置1,规定的起始信号  
  121.    CLK=1;   //第一个脉冲
  122.    CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平
  123.    DIO=1;   //DIO置1, 通道选择信号  
  124.    CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0
  125.    CLK=0;   //第二个脉冲下降沿
  126.    DIO=0;   //DI置0,选择通道0
  127.    CLK=1;    //第三个脉冲
  128.    CLK=0;    //第三个脉冲下降沿
  129.    DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1
  130.    CLK=1;    //第四个脉冲
  131.    for(i=0;i<8;i++)  //高位在前
  132.     {
  133.       CLK=1;         //第四个脉冲
  134.       CLK=0;
  135.       dat<<=1;       //将下面储存的低位数据向右移
  136.                 dat|=(unsigned char)DIO;          //将输出数据DIO通过或运算储存在dat最低位
  137.     }                                 
  138.     CS=1;          //片选无效
  139.          return dat;         //将读书的数据返回     
  140.   }
  141. /*****************************************************

  142.   函数功能:警情检测子程序

  143. *****************************************************/
  144. unsigned int  jq()
  145. {
  146.         unsigned int AD_val;    //储存A/D转换后的值
  147.         AD_val=A_D();    //进行A/D转换
  148.         if(AD_val>=30)   
  149.         flag1=1;
  150.         else
  151.         flag1=0;
  152.         
  153.         after_AD_val=(9900/256)*AD_val+100;
  154.         
  155. return AD_val;
  156. }
  157. /*****************************************************
  158. 函数功能:主函数
  159. ***************************************************/


  160. void timer1() interrupt 3
  161. {        
  162.         
  163.   TH1=(65536-65535)/256;
  164.         TL1=(65536-65535)%256;
  165.         TIME_1++;
  166.         
  167.         if(TIME_1 > 8)
  168.         {TIME_1=0;
  169.         jq();
  170.         }
  171. }
  172.         

  173. main(void)
  174. {        
  175.         LED2=1;
  176.         LED1=1;
  177.         BEEP=1;
  178.         EA=1;
  179.         TMOD=0X10;
  180.         TH1=(65536-60000)/256;
  181.         TL1=(65536-60000)%256;
  182.         ET1=1;
  183.         TR1=1;
  184.          
  185.     while(1)
  186.       {
  187. //jq();
  188.                         display();        
  189.                   key();
  190.                   baojing();
  191.                                 
  192.                                 
  193.           }
  194.                     
  195. }

复制代码

全部资料51hei下载地址:

可燃气体报警器.zip (185.43 KB, 下载次数: 281)


评分

参与人数 1黑币 +12 收起 理由
YJGG + 12 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏11 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:353867 发表于 2018-6-18 23:13 | 只看该作者
谢谢楼主好意
回复

使用道具 举报

板凳
ID:353867 发表于 2018-6-18 23:13 | 只看该作者
谢谢楼主
回复

使用道具 举报

地板
ID:449256 发表于 2018-12-18 20:11 | 只看该作者
谢谢楼主的分享,把帮了大忙
回复

使用道具 举报

5#
ID:450248 发表于 2018-12-19 21:05 | 只看该作者
论坛有你更精彩
回复

使用道具 举报

6#
ID:450248 发表于 2018-12-19 21:08 | 只看该作者
谢谢楼主的分享,把帮了大忙
回复

使用道具 举报

7#
ID:520266 发表于 2019-4-24 10:53 | 只看该作者
好东西 感谢楼主帮了大忙
回复

使用道具 举报

8#
ID:519957 发表于 2019-5-4 10:45 | 只看该作者
棒棒哒!有用,谢谢楼主
回复

使用道具 举报

9#
ID:545750 发表于 2019-5-23 17:24 | 只看该作者
感谢楼主!!
回复

使用道具 举报

10#
ID:607620 发表于 2019-9-4 20:58 | 只看该作者
不错的分享
回复

使用道具 举报

11#
ID:610080 发表于 2019-9-10 16:43 | 只看该作者
谢谢楼主!!!
回复

使用道具 举报

12#
ID:660598 发表于 2019-12-10 16:27 | 只看该作者
能不能加上显示屏
回复

使用道具 举报

13#
ID:674385 发表于 2019-12-26 11:30 | 只看该作者
能不能观摩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表