找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2975|回复: 1
收起左侧

单片机危险气体检测仪程序

[复制链接]
ID:250103 发表于 2019-5-9 20:17 | 显示全部楼层 |阅读模式
程序设计
IMG_2305.JPG

单片机源程序如下:
  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 FENG = P2^5;//蜂鸣器
  12. //ADC0809
  13. sbit ST=P3^3;
  14. sbit EOC=P3^6;
  15. sbit OE=P3^2;
  16. //按键
  17. sbit Key1=P2^6;         //取消按键
  18. bit bdata flag;         //报警标志位
  19. uchar set;                 

  20. //函数声明
  21. extern uchar ADC0809();
  22. extern void Key();

  23. //酒精含量变量
  24. uchar temp=0;

  25. uchar BJ=30; //报警值

  26. void init()           //初始化函数
  27. {
  28.         TMOD=0x01; //工作方式
  29.          TL0=0xb0;
  30.          TH0=0x3c; //赋初值(12MHz晶振的50ms)
  31.          EA=1;          //打开中断总开关
  32.         ET0=1;          //打开中断允许开关
  33.          TR0=1;          //打开定时器开关
  34. }

  35. void main()          //主函数
  36. {
  37.         Init1602();//初始化显示
  38.         init();           //初始化定时器
  39.         while(1)   //进入循环
  40.         {
  41.                 temp=ADC0809();                                   //读取酒精浓度值
  42.                 if(set==0)                                           //只有在非设置状态时,
  43.                 Display_1602(temp,BJ);           //才刷新显示实时浓度值
  44.                 if(temp<BJ&&set==0)           //非设置时当浓度值小于报警值时
  45.                 {
  46.                         flag=0;                                           //报警标志位置0,不报警
  47.                 }
  48.                 else if(temp>BJ&&set==0)  //非设置时当浓度值大于报警值时
  49.                 {
  50.                         flag=1;                                           //报警标志位置1
  51.                 }
  52.                 Key();                                                   //扫描按键
  53.         }
  54. }
  55. //ADC0809读取信息
  56. uchar ADC0809()
  57. {
  58.         uchar temp_=0x00;
  59.         //初始化高阻太

  60.         OE=0;
  61.         //转化初始化
  62.         ST=0;
  63.         //开始转换
  64.         ST=1;
  65.         ST=0;
  66.         //外部中断等待AD转换结束
  67.         while(EOC==0)
  68.         //读取转换的AD值
  69.         OE=1;
  70.         temp_=Data_ADC0809;//将0809的数值读入单片机
  71.         OE=0;
  72.         return temp_;           //返回读到的数据
  73. }

  74. void Key()                          //按键函数
  75. {
  76.         if(Key1==0)                        //设置键按下时
  77.         {
  78.                 while(Key1==0);        //检测按键是否释放
  79.                 FENG=1;                        //蜂鸣器不响
  80.                 flag=0;                        //停止报警
  81.                 TR0=0;                        //定时器停止
  82.         }
  83.         }

  84. void  time1_int(void) interrupt 1  //定时器函数
  85. {
  86.         uchar count;
  87.         TL0=0xb0;
  88.          TH0=0x3c;        //重新赋初值
  89.           count++;        //计时变量加
  90.         if(count==10)//定时器定时是50ms,此处计数10次,正好是500ms,用于报警时 灯亮和蜂鸣器响
  91.         {
  92.                 if(flag==0)                   //报警标志为0时
  93.                 {
  94.                         LED_R=1;           //红灯灭
  95.                         FENG=1;                   //蜂鸣器不响
  96.                 }
  97.                 if(flag==1)                 //报警标志位为1时
  98.                 {
  99.                         LED_R=0;         //红灯亮
  100.                         FENG=0;                 //蜂鸣器响
  101.                 }
  102.         }

  103.            if(count==20)                 //计数到20时,正好是1000ms,就是1s,这里就是让灯灭,蜂鸣器不响,从而做出闪烁的效果
  104.            {
  105.                 count=0;                 //计到1s时,将count清零,准备重新计数
  106.                 if(flag==0)
  107.                 {
  108.                         LED_R=1;
  109.                         FENG=1;
  110.                 }
  111.                 if(flag==1)
  112.                 {
  113.                         LED_R=1;
  114.                         FENG=1;
  115.                 }
  116.         }
  117. }
复制代码

所有资料51hei提供下载:
程序设计.zip (46.41 KB, 下载次数: 38)
回复

使用道具 举报

ID:543049 发表于 2019-5-30 10:04 | 显示全部楼层
电路图什么样子啊?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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