找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机烟雾可燃气体甲烷天然气检测程序

[复制链接]
跳转到指定楼层
楼主
ID:228811 发表于 2017-8-22 16:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机做的烟雾可燃气体甲烷天然气检测程序


单片机源程序如下:
  1. /*
  2. 用打火机,液晶显示的第二行是阈值,大于该值,报警。
  3. 阈值不宜大于400
  4. */
  5. #include<reg52.h>
  6. #include<intrins.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. #define IO_1602 P0 //IO 口
  10. sbit RS_1602=P2^5;
  11. sbit RW_1602=P2^6;
  12. sbit E_1602=P2^7;
  13. sbit CS=P1^0;
  14. sbit CLK=P1^1;
  15. sbit DIO=P1^2;
  16. sbit beed=P1^7;
  17. sbit key0=P3^0;
  18. sbit key1=P3^1;
  19. void delay_ms(unsigned int t)//11.0592MHz 1ms
  20. {
  21.         uchar x,y;
  22.         for(t;t>0;t--)
  23.         {
  24.                 for(x=0;x<114;x++)
  25.                 for(y=0;y<1;y++);
  26.         }
  27. }
  28. void Wr1602Cmd(unsigned char dat)
  29. {//写命令函数
  30.         E_1602=0;
  31.         IO_1602=dat;
  32.         RS_1602=0;
  33.         RW_1602=0;
  34.         E_1602=1;
  35.         delay_ms(1);
  36.         E_1602=0;
  37.         delay_ms(1);
  38. }
  39. void Wr1602Dat(unsigned char dat)
  40. {//写数据函数
  41.         E_1602=0;
  42.         IO_1602=dat;
  43.         RS_1602=1;
  44.         RW_1602=0;
  45.         E_1602=1;
  46.         delay_ms(1);
  47.         E_1602=0;
  48.         delay_ms(1);
  49. }
  50. void Init1602(void)
  51. {
  52.         delay_ms(20);
  53.         Wr1602Cmd(0x38);
  54.         delay_ms(5);
  55.         Wr1602Cmd(0x38);
  56.         delay_ms(5);
  57.         Wr1602Cmd(0x06);
  58.         Wr1602Cmd(0x0c);//
  59.         Wr1602Cmd(0x01);//清屏
  60.         Wr1602Cmd(0x80);//设置地址
  61. }
  62. uchar RdAdc0832(bit Hx)
  63. {
  64.         uchar value0,value1,i;
  65.         CS=1;CLK=0;DIO=1;
  66.         CS=0;
  67.         DIO=1;_nop_();_nop_();_nop_();_nop_(); //写 ST 位
  68.         CLK=1;_nop_();_nop_();_nop_();_nop_();
  69.         CLK=0;_nop_();_nop_();_nop_();_nop_();
  70.         DIO=1;_nop_();_nop_();_nop_();_nop_();//写 SGL 位
  71.         CLK=1;_nop_();_nop_();_nop_();_nop_();
  72.         CLK=0;_nop_();_nop_();_nop_();_nop_();
  73.         DIO=Hx;_nop_();_nop_();_nop_();_nop_();//写通道号
  74.         //位
  75.         CLK=1;_nop_();_nop_();_nop_();_nop_();
  76.         CLK=0;_nop_();_nop_();_nop_();_nop_();
  77.         DIO=1;
  78.         for(i=0;i<8;i++)
  79.         {
  80.                 CLK=1;_nop_();_nop_();_nop_();_nop_();
  81.                 CLK=0;_nop_();_nop_();_nop_();_nop_();
  82.                 value0<<=1;
  83.                 if(DIO==1) value0|=0x01;
  84.                 else value0&=0xfe;
  85.         }
  86.         for(i=0;i<8;i++)
  87.         {
  88.                 value1>>=1;
  89.                 if(DIO==1) value1|=0x80;
  90.                 else value1&=0x7f;
  91.                 CLK=1;_nop_();_nop_();_nop_();_nop_();
  92.                 CLK=0;_nop_();_nop_();_nop_();_nop_();
  93.         }
  94.         CS=1;
  95.         if(value0!=value1) P1&=0X7F;
  96.         else P1|=0X80;
  97.         return value0;
  98. }
  99. void main()
  100. {
  101.         unsigned long i,a,b,c,d,temp=200,x,y,z;

  102.         Init1602();
  103.         while(1)
  104.         {
  105.                 Wr1602Cmd(0x80);
  106.                 i=RdAdc0832(0);
  107.                 i=(i*5000/255);
  108.                 a=i/1000;
  109.                 b=i%1000/100;
  110.                 c=i%1000%100%10;
  111.                 Wr1602Dat('V');
  112.                 Wr1602Dat('O');
  113.                 Wr1602Dat('L');
  114.                 Wr1602Dat('=');
  115.                 Wr1602Dat('0'+a);
  116.                 Wr1602Dat('.');
  117.                 Wr1602Dat('0'+b);
  118.                 Wr1602Dat('0'+c);
  119.                 Wr1602Dat('0'+i%1000%100%10);
  120.                 Wr1602Dat('V');
  121.                 d=a*100+b*10+c;
  122.                 Wr1602Cmd(0xC0);
  123.                 Wr1602Dat('S');                                        //阈值 threshold
  124.                 Wr1602Dat('e');
  125.                 Wr1602Dat('t');
  126.                 Wr1602Dat(' ');
  127.                 Wr1602Dat('V');
  128.                 Wr1602Dat('a');
  129.                 Wr1602Dat('l');
  130.                 Wr1602Dat('u');
  131.                 Wr1602Dat('e');
  132.                 Wr1602Dat(':');

  133.                  if(key0==0)  
  134.                 {       
  135.                          
  136.                         delay_ms(10);        //消抖
  137.                         if(key0==0)
  138.                         {       
  139.                                 while(!key0);//等待按键松开。
  140.                                 temp+=20;

  141.                         }                 
  142.                 }

  143.                         if(key1==0)  
  144.                 {       
  145.                          
  146.                         delay_ms(10);        //消抖
  147.                         if(key1==0)
  148.                         {       
  149.                                 while(!key1);//等待按键松开。
  150.                                 temp-=20;

  151.                         }                 
  152. ……………………

  153. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
烟雾可燃气体甲烷天然气检测程序.zip (26.76 KB, 下载次数: 82)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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