仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei截圖20210728012429.png (78.48 KB, 下載次數: 74)
下載附件
2021-9-16 08:33 上傳
單通道模擬量報警
比如:酒精報警器,檢測濃度,然后濃度過限報警;通過按鍵設置報警值,同時報警值通過24C02保存
當然也可以改成別的名字,比如:甲烷報警、一氧化碳報警、天然氣報警等。
程序流程圖:
51hei.png (25.37 KB, 下載次數: 62)
下載附件
2021-9-16 16:26 上傳
元件 型號
單片機 AT89C51
電容 10uf
電容 30pf
晶振 12MHZ
電阻 10k
按鈕
存儲器 24C02
模數芯片 ADC0832
電位器 1k
電阻 1k
三極管 PNP
蜂鳴器 有源
顯示器 LCD1602
排阻 10k
單片機源程序如下:
- #include <reg51.h>
- #include <ADC0832.h>
- #include"i2c.h"
- #include "lcd1602.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit k1=P1^0;
- sbit k2=P1^1;
- sbit beep=P2^3;
- uchar disp1[]="Alcohol:000";
- uchar disp2[]="limit:050";
- uchar Alcohol=0;//酒精濃度
- uchar limit =50;//報警閥值
- uchar k=0;
- void delay(uint i) //延時
- {
- while(i--);
- }
- void main()
- {
- TMOD|=0X01;
- TH0=0X3C;
- TL0=0XB0;
- ET0=1;//打開定時器0中斷允許
- EA=1;//打開總中斷
- TR0=1;//打開定時器
- init_1602();
- limit=At24c02Read(0);//初始化存儲
- if(limit>200)
- {
- limit=50;
- At24c02Write(0,limit);
- delay(10000);
- }
- write_string(1,0,disp1); //顯示
- write_string(2,2,disp2);
- while(1)
- {
- if(Alcohol>limit)//報警判斷
- beep=0;
- else
- beep=1;
- if(!k1)//加
- {
- if(limit<200)
- limit++;
- At24c02Write(0,limit);
- delay(10000);
- while(!k1);
- }
- if(!k2)//減
- {
- if(limit>0)
- limit--;
- At24c02Write(0,limit);
- delay(10000);
- while(!k2);
- }
- }
- }
- void Timer0() interrupt 1//定時器中斷
- {
- TH0=0X3C;
- TL0=0XB0;
- if(k<10)
- k++;
- else
- {
- k=0;
- Alcohol=ADC();//測酒精
- disp1[8]=Alcohol/100+0x30;
- disp1[9]=Alcohol%100/10+0x30;
- disp1[10]=Alcohol%10+0x30;
- disp2[6]=limit/100+0x30;
- disp2[7]=limit%100/10+0x30;
- disp2[8]=limit%10+0x30;
- write_string(1,0,disp1); //顯示
- write_string(2,2,disp2);
- }
- }
復制代碼
51hei截圖20210728012610.png (9.66 KB, 下載次數: 81)
下載附件
2021-9-16 08:33 上傳
所有資料51hei附件下載,注意仿真只能用Proteus7.8版本打開dsn文件:
報警器(1路模擬量,存儲).rar
(617.99 KB, 下載次數: 66)
2021-9-16 08:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|