1040-基于51单片机的报警器(红外入侵,时间段)原理图、流程图、物料清单、仿真图、源代码
功能介绍:
红外入侵报警系统
1.实现红外入侵检测(I0口高低电平模拟)的报警;
2.数码管显示分、秒
3.按键设置报警开启时段,时段内触发报警时,发出蜂鸣器响起,LED灯闪烁
有哪些资料:
1、仿真工程文件
2、源代码工程文件
3、原理图工程文件
4、流程图
5、功能介绍
6、元件清单
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit L1=P2^4;//数码管
sbit L2=P2^5;
sbit L3=P2^6;
sbit L4=P2^7;
sbit k1=P3^2;//按钮
sbit k2=P3^3;
sbit k3=P3^4;
sbit k4=P3^5;
sbit ir=P3^7;//红外入侵
sbit beep=P3^6;//蜂鸣器
uchar code Lduan0[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//无小数点
uchar code Lduan1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//有小数点
uchar time=0,miao=0,fen=0;//定时
uchar mode=0;
uchar fen_start=0,miao_start=0,fen_end=10,miao_end=0;//报警时间
uchar beep_time=0;//蜂鸣器报警时间
//延时
void delay(uint i)
{
while(i--);
}
//主函数
void main()
{
uchar k=0;
uint m,n,p,flag=0;
P3=0xfe;
TMOD|=0X01;//设置定时器
TH0=0X3C;
TL0=0XB0;
ET0=1;
EA=1;
TR0=1;
while(1)
{
if(!k1 &&(k!=1))//设置
{
k=1;
if(beep_time==0)
{
if(mode<4)
mode++;
else
mode=0;
}
else
{
beep_time=0;
}
}
if(!k4) //OK
{
mode=0;
beep_time=0;
}
if(mode==0)//可以通过按钮调整时间
{
if(!k2 &&(k!=2))//加
{
k=2;
if(fen<59)
fen++;
else
fen=0;
}
if(!k3 &&(k!=3))//减
{
k=3;
if(fen>0)
fen--;
else
fen=59;
}
}
if(mode==1)//设置启动时间,分
{
if(!k2 &&(k!=2))//加
{
k=2;
if(fen_start<59)
fen_start++;
else
fen_start=0;
}
if(!k3 &&(k!=3))//减
{
k=3;
if(fen_start>0)
fen_start--;
else
fen_start=59;
}
}
if(mode==2)//设置启动时间,秒
{
if(!k2 &&(k!=2))//加
{
k=2;
if(miao_start<59)
miao_start++;
else
miao_start=0;
}
if(!k3 &&(k!=3))//减
{
k=3;
if(miao_start>0)
miao_start--;
else
miao_start=59;
}
}
if(mode==3)//设置停止时间,分
{
if(!k2 &&(k!=2))//加
{
k=2;
if(fen_end<59)
fen_end++;
else
fen_end=0;
}
if(!k3 &&(k!=3))//减
{
k=3;
if(fen_end>0)
fen_end--;
else
fen_end=59;
}
}
if(mode==4)//设置停止时间,秒
{
if(!k2 &&(k!=2))//加
{
k=2;
if(miao_end<59)
miao_end++;
else
miao_end=0;
}
if(!k3 &&(k!=3))//减
{
k=3;
if(miao_end>0)
miao_end--;
else
miao_end=59;
}
}
if(k1 && k2 && k3 && k4)
k=0;
//显示时间
if(mode==0)
{
P1=Lduan0[fen/10];L1=0;delay(50);L1=1;
P1=Lduan1[fen%10];L2=0;delay(50);L2=1;
P1=Lduan0[miao/10];L3=0;delay(50);L3=1;
P1=Lduan0[miao%10];L4=0;delay(50);L4=1;
}
//显示开启时间,分
if(mode==1)
{
P0=0xf0;
if(time<11)
{
P1=Lduan0[fen_start/10];L1=0;delay(50);L1=1;
P1=Lduan1[fen_start%10];L2=0;delay(50);L2=1;
}
P1=Lduan0[miao_start/10];L3=0;delay(50);L3=1;
P1=Lduan0[miao_start%10];L4=0;delay(50);L4=1;
}
//显示开启时间,秒
if(mode==2)
{
P0=0xf0;
P1=Lduan0[fen_start/10];L1=0;delay(50);L1=1;
P1=Lduan1[fen_start%10];L2=0;delay(50);L2=1;
if(time<11)
{
P1=Lduan0[miao_start/10];L3=0;delay(50);L3=1;
P1=Lduan0[miao_start%10];L4=0;delay(50);L4=1;
}
}
//显示停止时间,分
if(mode==3)
{
P0=0x0f;
if(time<11)
{
P1=Lduan0[fen_end/10];L1=0;delay(50);L1=1;
P1=Lduan1[fen_end%10];L2=0;delay(50);L2=1;
}
P1=Lduan0[miao_end/10];L3=0;delay(50);L3=1;
P1=Lduan0[miao_end%10];L4=0;delay(50);L4=1;
}
//显示停止时间,秒
if(mode==4)
{
P0=0x0f;
P1=Lduan0[fen_end/10];L1=0;delay(50);L1=1;
P1=Lduan1[fen_end%10];L2=0;delay(50);L2=1;
if(time<11)
{
P1=Lduan0[miao_end/10];L3=0;delay(50);L3=1;
P1=Lduan0[miao_end%10];L4=0;delay(50);L4=1;
}
}
//判断报警
m=fen*60+miao;
n=fen_start*60+miao_start;
p=fen_end*60+miao_end;
if(n<p)
{
if((m>n)&&(m<p))
flag=1;
else
flag=0;
}
else
{
if((m>n)||(m<p))
flag=1;
else
flag=0;
}
if(flag==1)
{
if(!ir)
{
beep_time=100;//5s报警
}
if(beep_time>0)//闪烁
{
if(time<11)
P0=0;
else
P0=0xff;
}
else
{
if(mode==0)
{
P0=0xff;
}
}
}
else
{
beep_time=0;//强制关闭报警
}
}
}