找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机水位(上下限)监测报警、断电24C2存储报警器程序仿真(1路模拟量,存储)

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


单通道模拟量报警
比如:酒精报警器,检测浓度,然后浓度过限报警;通过按键设置报警值,同时报警值通过24C02保存

当然也可以改成别的名字,比如:甲烷报警、一氧化碳报警、天然气报警等。

程序流程图:


元件    型号
单片机    AT89C51
电容    10uf
电容    30pf
晶振    12MHZ
电阻    10k
按钮   
存储器    24C02
模数芯片    ADC0832
电位器    1k
电阻    1k
三极管    PNP
蜂鸣器    有源
显示器    LCD1602
排阻    10k

单片机源程序如下:
  1. #include <reg51.h>
  2. #include <ADC0832.h>
  3. #include"i2c.h"
  4. #include "lcd1602.h"
  5. #define uchar unsigned char
  6. #define uint unsigned int

  7. sbit k1=P1^0;
  8. sbit k2=P1^1;
  9. sbit beep=P2^3;
  10. uchar disp1[]="Alcohol:000";
  11. uchar disp2[]="limit:050";
  12. uchar Alcohol=0;//酒精浓度
  13. uchar limit =50;//报警阀值

  14. uchar k=0;
  15. void delay(uint i) //延时
  16. {
  17.         while(i--);
  18. }

  19. void main()
  20. {
  21.         TMOD|=0X01;
  22.         TH0=0X3C;
  23.         TL0=0XB0;       
  24.         ET0=1;//打开定时器0中断允许
  25.         EA=1;//打开总中断
  26.         TR0=1;//打开定时器
  27.         init_1602();
  28.         limit=At24c02Read(0);//初始化存储
  29.         if(limit>200)
  30.         {
  31.                 limit=50;
  32.                 At24c02Write(0,limit);
  33.                 delay(10000);
  34.         }
  35.         write_string(1,0,disp1); //显示
  36.         write_string(2,2,disp2);
  37.         while(1)
  38.         {
  39.                 if(Alcohol>limit)//报警判断
  40.                         beep=0;
  41.                 else
  42.                         beep=1;
  43.                 if(!k1)//加
  44.                 {
  45.                         if(limit<200)
  46.                                 limit++;
  47.                         At24c02Write(0,limit);
  48.                         delay(10000);
  49.                         while(!k1);
  50.                 }
  51.                 if(!k2)//减
  52.                 {
  53.                         if(limit>0)
  54.                                 limit--;
  55.                         At24c02Write(0,limit);
  56.                         delay(10000);
  57.                         while(!k2);
  58.                 }
  59.         }
  60. }
  61. void Timer0() interrupt 1//定时器中断
  62. {
  63.         TH0=0X3C;
  64.         TL0=0XB0;
  65.         if(k<10)
  66.                 k++;
  67.         else
  68.         {
  69.                 k=0;
  70.                 Alcohol=ADC();//测酒精
  71.                 disp1[8]=Alcohol/100+0x30;
  72.                 disp1[9]=Alcohol%100/10+0x30;
  73.                 disp1[10]=Alcohol%10+0x30;
  74.                 disp2[6]=limit/100+0x30;
  75.                 disp2[7]=limit%100/10+0x30;
  76.                 disp2[8]=limit%10+0x30;
  77.                 write_string(1,0,disp1); //显示
  78.                 write_string(2,2,disp2);
  79.         }
  80. }
复制代码

所有资料51hei附件下载,注意仿真只能用Proteus7.8版本打开dsn文件:
报警器(1路模拟量,存储).rar (617.99 KB, 下载次数: 64)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:795427 发表于 2021-9-17 16:30 | 只看该作者
可以在proteus8.9上仿真,但是需要将ADC083X.dll文件替换成proteus7,旧版本的文件,再进行仿真就可以了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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