标题:
单片机红外热释电传感器报警程序与Proteus仿真图
[打印本页]
作者:
111111252
时间:
2022-5-24 16:44
标题:
单片机红外热释电传感器报警程序与Proteus仿真图
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
(72.19 KB, 下载次数: 34)
下载附件
2022-5-24 19:29 上传
单片机源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define key_io P1
uchar key_can;
sbit beep=P2^3;
sbit red=P2^2;
sbit green=P2^1;
sbit yellow=P2^0;
sbit hw=P1^3;
bit flag_300ms=0;
void key()
{
static uchar key_new=0,key_old=0,key_value=0;
if(key_new == 0)
{
if((key_io&0x07)==0x07)
key_value ++;
else
key_value=0;
if(key_value>=5)
{
key_value=0;
key_new=1;
}
}
else
{
if((key_io&0x07)!=0x07)
key_value ++;
else
key_value=0;
if(key_value>=5)
{
key_value=0;
key_new=0;
}
}
key_can=20;
if((key_new==0)&&(key_old==1))
{
switch(key_io&0x07)
{
case 0x06: key_can=1; break;
case 0x05: key_can=2; break;
case 0x03: key_can=3; break;
}
}
key_old = key_new;
}
void time_init()
{
EA=1;
TMOD=0X01;
ET0=1;
TR0=1;
}
uchar flag_alarm ;
uchar flag_bufang ;
uchar flag_bufang_en ;
uint flag_value;
void hongwai_dis()
{
if(flag_alarm==1)
{
red=~red;
beep=~beep;
}
if(flag_bufang_en==1)
{
green=~green;
}
if(flag_bufang==1)
{
green=0;
if(hw==1)
{
flag_alarm=1;
}
}
}
void key_with()
{
if(key_can==1)
{
flag_alarm=1;
}
if(key_can==2)
{
flag_bufang_en=1;
}
if(key_can==3)
{
flag_alarm=0;
flag_bufang=0;
flag_bufang_en=0;
flag_value=0;
P2=0xff;
}
}
void main()
{
time_init();
while(1)
{
key();
yellow=~hw;
if(key_can<10)
{
key_with();
}
if(flag_300ms==1)
{
flag_300ms=0;
hongwai_dis();
}
}
}
void time0_int() interrupt 1
{
static uint value;
TH0=0x3c;
TL0=0xb0;
value++;
if(value%6==0)
{
flag_300ms=1;
}
if(flag_bufang_en==1)
{
flag_value ++;
if(flag_value>=600)
{
flag_bufang=1;
flag_bufang_en=0;
flag_value=0;
}
}
}
复制代码
Keil5代码与Proteus8.8仿真下载:
红外.zip
(39.19 KB, 下载次数: 35)
2022-5-24 16:44 上传
点击文件名下载附件
1
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1