找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3041|回復: 1
收起左側

單片機水位(上下限)監(jiān)測報警、斷電24C2存儲報警器程序仿真(1路模擬量,存儲)

[復制鏈接]
ID:64696 發(fā)表于 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, 下載次數: 66)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:795427 發(fā)表于 2021-9-17 16:30 | 顯示全部樓層
可以在proteus8.9上仿真,但是需要將ADC083X.dll文件替換成proteus7,舊版本的文件,再進行仿真就可以了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表