找回密码
 立即注册

QQ登录

只需一步,快速开始

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

注释详细的单片机火灾报警器程序和电路原理图

[复制链接]
跳转到指定楼层
楼主
51单片机火灾报警器电路原理图如下:



单片机源程序如下:
  1. //程序头函数
  2. #include <reg52.h>
  3. //显示函数
  4. #include <display.h>        //显示函数display.h在工程里        也可鼠标选中左边右键open document <display.h>

  5. //宏定义
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. #define Data_ADC0809 P1                 //定义P1口为Data_ADC0809 (之后的程序里Data_ADC0809即代表P1口)

  9. //管脚声明
  10. sbit LED_yanwu= P2^1;                 //烟雾报警灯
  11. sbit baojing= 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. sbit Key2=P2^7;                                 //加按键
  19. sbit Key3=P3^7;                                 //减按键

  20. //酒精含量变量
  21. uchar temp;                                         //用于读取ADC数据
  22. uchar yushe_yanwu=45;                 //烟雾预设值
  23. //按钮模式|  
  24. uchar Mode=0;                                 //=1是设置温度阀值  =2是设置烟雾阀值

  25. //函数声明
  26. extern uchar ADC0809();
  27. extern void Key();

  28. //ADC0809读取信息
  29. uchar ADC0809()
  30. {
  31.         uchar temp_=0x00;
  32.         //初始化高阻太

  33.         OE=0;
  34.         //转化初始化
  35.         ST=0;
  36.         //开始转换
  37.         ST=1;
  38.         ST=0;
  39.         //外部中断等待AD转换结束
  40.         while(EOC==0)
  41.         //读取转换的AD值
  42.         OE=1;
  43.         temp_=Data_ADC0809;
  44.         OE=0;
  45.         return temp_;
  46. }

  47. void Key()
  48. {
  49.         //模式选择
  50.         if(Key1==0)          //设置按键
  51.         {
  52.                 while(Key1==0);
  53.                 if(Mode>=2) Mode=0;
  54.                 else
  55.                 {
  56. //                           write_com(0x38);//屏幕初始化
  57.                            write_com(0x0f);//打开显示 无光标 光标闪烁
  58. //                           write_com(0x06);//当读或写一个字符是指针后一一位
  59.                         Mode++;                        //模式加一
  60.                         switch(Mode)        //判断模式的值
  61.                         {
  62.                                 case 1:
  63.                                 {
  64.                                         write_com(0x80+7);//为1时 温度阀值的位置闪烁
  65.                                         break;                          //执行后跳出switch
  66.                                 }
  67.                                 case 2:                                        //当模式加到3时
  68.                                 {
  69. //                                        write_com(0x38);//屏幕初始化
  70.                                         write_com(0x0c);//打开显示 无光标 无光标闪烁
  71.                                         Mode=0;                        //模式清零
  72.                                         break;
  73.                                 }
  74.                         }
  75.                 }
  76.         }
  77.         if(Key2==0&&Mode!=0)         //加按键只有在模式不等于0时有效
  78.         {
  79.                 while(Key2==0);
  80.                 yushe_yanwu++;                                           //同温度阀值设置
  81.                 if(yushe_yanwu>=255)
  82.                 yushe_yanwu=255;
  83.                 write_com(0x80+13);
  84.                 write_data(0x30+yushe_yanwu/100);
  85.                 write_data(0x30+yushe_yanwu%100/10);
  86.                 write_data(0x30+yushe_yanwu%10);
  87.                 write_com(0x80+15);
  88.         }
  89.         if(Key3==0&&Mode!=0)
  90.         {
  91.                 while(Key3==0);
  92.                 yushe_yanwu--;                                                          //同上
  93.                 if(yushe_yanwu<=0)
  94.                 yushe_yanwu=0;
  95.                 write_com(0x80+13);
  96.                 write_data(0x30+yushe_yanwu/100);
  97.                 write_data(0x30+yushe_yanwu%100/10);
  98.                 write_data(0x30+yushe_yanwu%10);
  99.                 write_com(0x80+15);
  100.         }
  101. }
  102. /*****主函数*****/
  103. void main()
  104. {
  105.         Init1602();                          //调用初始化显示函数
  106.         while(1)                          //进入循环
  107.         {
  108.                 temp=ADC0809();          //读取烟雾值
  109.                 Key();                          //调用按键函数  扫描按键

  110.                 if(Mode==0)                  //只有当模式为0时才会执行以下的阀值判断部分
  111.                 {
  112.                         Display_1602(yushe_yanwu,temp);  //显示预设烟雾,烟雾值
  113.                         if(temp>=yushe_yanwu)          //烟雾值大于等于预设值时
  114.                         {
  115.                                 LED_yanwu=0;                  //烟雾指示灯亮
  116.                                 baojing=0;                          //蜂鸣器报警
  117.                         }
  118.                         else                                          //烟雾值小于预设值时
  119.                         {
  120.                                 LED_yanwu=1;                  //关掉报警灯
  121.                         }
  122.                         if(temp<yushe_yanwu)          //当烟雾小于预设值并且温度也小于预设值时 (&&:逻辑与,左右两边的表达式都成立(都为真,也就是1)时,该if语句才成立)
  123.                         {
  124.                                 baojing=1;                          //停止报警
  125.                         }
  126.                 }
  127.         }
  128. }        
复制代码

Keil代码下载: 火灾报警器程序和pdf格式原理图.7z (79.91 KB, 下载次数: 28)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1075763 发表于 2023-5-6 21:51 来自手机 | 只看该作者
哥,我现在做设计,我缺一个文件代码,,哥,能不能帮帮我
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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