找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
ID:64696 发表于 2021-9-16 08:36 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei截图20210728012429.png

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

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

程序流程图:
51hei.png

元件    型号
单片机    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截图20210728012610.png
所有资料51hei附件下载,注意仿真只能用Proteus7.8版本打开dsn文件:
报警器(1路模拟量,存储).rar (617.99 KB, 下载次数: 62)

评分

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

查看全部评分

回复

使用道具 举报

ID:795427 发表于 2021-9-17 16:30 | 显示全部楼层
可以在proteus8.9上仿真,但是需要将ADC083X.dll文件替换成proteus7,旧版本的文件,再进行仿真就可以了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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