基于51单片机的报警器(声音,窗户,热红外,穿越禁区)原理图、流程图、物料清单、仿真图、源代码

基于51单片机的报警器(声音,窗户,热红外,穿越禁区)原理图、流程图、物料清单、仿真图、源代码
基于51单片机的报警器(声音,窗户,热红外,穿越禁区)

家用防盗器
1、具有设防、撤防按键
2、设防时间内自动设防
3、有声响报警、开窗户报警、红外报警、穿越禁区报警。
4、使用开关模拟各个传感器请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

#include "reg51.h"
#include"ds1302.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^0;//传感器输入
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4; //设置
sbit k6=P2^3; 
sbit beep=P2^4;//蜂鸣器
uchar FRQ=0,buzzer=0;

uchar mode=0,moshi=0;
uchar start1=0,start2=0,start3=0,start4=0;//设防开关
uchar error1=0,error2=0,error3=0,error4=0;//报警标志
uchar shi1=1,fen1=0,shi2=20,fen2=0;

uchar disp1[]="    00:00:00    ";
uchar disp2[]="00:00      00:00";
uchar disp3[]="1: off  2: off  ";
uchar disp4[]="3: off  4: off  ";
uchar time1=0,yun=1;

uchar key_scan()//按键检测
{
uchar i,j;
i=0;
j=0;
P3=0x0f;
if(P3!=0x0f) //检测有无按下
{
 switch(P3)//检测行
 {
  case 0x0e:i=0;break;
  case 0x0d:i=1;break;
  case 0x0b:i=2;break;
  case 0x07:i=3;
 }
 P3=0xf0;
 switch(P3)//检测列
 {
  case 0xe0:j=1;break;
  case 0xd0:j=5;break;
  case 0xb0:j=9;break;
  case 0x70:j=13;
 }
 while(P3!=0xf0);//等待按键松开
}
return i+j;
}
//延时
void delay_ms(uint i)
{
	uchar j;
	while(i--)
	{
		for(j=0;j<110;j++);
	}
}
//主函数
void main()
{
	uint key=0,i=0,j=0,k=0;
	init_1602();//初始化
	Ds1302ReadTime();
	TIME[0]=0;
	Ds1302Init();
	TMOD|=0X01;
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;//打开定时器0中断允许

	TH1=0xfe;
	TL1=FRQ;	
	ET1=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		 delay_ms(1);//报警器
		 FRQ++;
		 key=key_scan();//按键检测
		 if(!k6)//关闭报警
		 {
		 	yun=0;
			TR1=0;
		}
		if(k1 && k2 && k3 && k4)
			yun=1;
		 if(key==1)//声音
		 {
		 	start1=1;
		 }
		 if(key==5)
		 {
		 	start1=0;
			TR1=0;error1=0;
		 }
		 if(key==2)//窗户
		 {
		 	start2=1;
		 }
		 if(key==6)
		 {
		 	start2=0;
			TR1=0;error2=0;
		 }
		 if(key==3)//红外
		 {
		 	start3=1;
		 }
		 if(key==7)
		 {
		 	start3=0;
			TR1=0;error3=0;
		 }
		 if(key==4)//禁区
		 {
		 	start4=1;
		 }
		 if(key==8)
		 {
		 	start4=0;
			TR1=0;error4=0;
		 }
		 if(mode==1)//设置时间
		 {
		 	if(key==9) //上限
			{
				if(shi2<23)
					shi2++;
			}
			if(key==10)
			{
				if(shi2>0)
					shi2--;
			}
			if(key==11)
			{
				if(fen2<59)
					fen2++;
			}
			if(key==12)
			{
				if(fen2>0)
					fen2--;
			}
			if(key==13)//下限
			{
				if(shi1<23)
					shi1++;
			}
			if(key==14)
			{
				if(shi1>0)
					shi1--;
			}
			if(key==15)
			{
				if(fen1<59)
					fen1++;
			}
			if(key==16)
			{
				if(fen1>0)
					fen1--;
			}
		 }
		 if(!k5)//设置
		 {
		 	mode=!mode;
		 	while(!k5);
		 }
		 if(start1==1)//声音设防控制
		 {
		 	if(!k1)
			{
				error1=1;
				if(yun==1)
				TR1=1;
			}
		 }
		 if(start2==1)//窗户设防控制
		 {
		 	if(!k2)
			{
				error2=1;
				if(yun==1)
				TR1=1;
			}
		 }
		 if(start3==1)//红外设防控制
		 {
		 	if(!k3)
			{
				error3=1;
				if(yun==1)
				TR1=1;
			}
		 }
		 if(start4==1)//禁区设防控制
		 {
		 	if(!k4)
			{
				error4=1;
				if(yun==1)
				TR1=1;
			}
		 }
		 //时间区间控制
		 j=0;
		 i=(TIME[2]>>4)*10+(TIME[2] & 0X0F);
		 j=(TIME[1]>>4)*10+(TIME[1] & 0X0F);
		 k=i*60+j;
		i=shi1*60+fen1;//自动设防
		j=shi2*60+fen2;	
		if(i>j)
			j=j+1440;	
		if((k>i)&&(k<j))
		{
			start1=1;start2=1;start3=1;start4=1;
			moshi=0;
		}
		else//手动控制时间
		{
			if(moshi==0)
			{
				start1=0;start2=0;start3=0;start4=0;
				TR1=0;
				moshi=1;
			}
		}
		
	}
}
//定时器0中断
void Timer0() interrupt 1
{
	if(time1<10)//读取时间
		time1++;
	else
	{
		time1=0;
		Ds1302ReadTime();
		disp1[4]=(TIME[2]>>4)+0X30;//显示
		disp1[5]=(TIME[2]&0X0F)+0X30;
		disp1[7]=(TIME[1]>>4)+0X30;
		disp1[8]=(TIME[1]&0X0F)+0X30;
		disp1[10]=(TIME[0]>>4)+0X30;
		disp1[11]=(TIME[0]&0X0F)+0X30;
		disp2[0]=shi1/10+0x30;
		disp2[1]=shi1%10+0x30;
		disp2[3]=fen1/10+0x30;
		disp2[4]=fen1%10+0x30;
		disp2[11]=shi2/10+0x30;
		disp2[12]=shi2%10+0x30;
		disp2[14]=fen2/10+0x30;
		disp2[15]=fen2%10+0x30;
		if(mode==1)
		{
			write_string(1,0,disp1);
			write_string(2,0,disp2);
		}
		else //设防显示
		{
			if(start1==0)//声音
			{
				 disp3[2]=' ';
				 disp3[3]='o';
				 disp3[4]='f';
				 disp3[5]='f';
				 disp3[6]=' ';
			}
			else
			{
				if(error1==0)
				{
				 disp3[2]=' ';
				 disp3[3]='o';
				 disp3[4]='n';
				 disp3[5]=' ';
				 disp3[6]=' ';
				}
				else
				{
				 if(disp3[2]==' ')
				 {
				 disp3[2]=(TIME[2]>>4)+0x30;
				 disp3[3]=(TIME[2]&0x0f)+0x30;
				 disp3[4]=':';
				 disp3[5]=(TIME[1]>>4)+0x30;
				 disp3[6]=(TIME[1]&0x0f)+0x30;
				 }
				}
			}
			if(start2==0)//窗户
			{
				 disp3[10]=' ';
				 disp3[11]='o';
				 disp3[12]='f';
				 disp3[13]='f';
				 disp3[14]=' ';
			}
			else
			{
				if(error2==0)
				{
				 disp3[10]=' ';
				 disp3[11]='o';
				 disp3[12]='n';
				 disp3[13]=' ';
				 disp3[14]=' ';
				}
				else
				{
				 if(disp3[10]==' ')
				 {
				 disp3[10]=(TIME[2]>>4)+0x30;
				 disp3[11]=(TIME[2]&0x0f)+0x30;
				 disp3[12]=':';
				 disp3[13]=(TIME[1]>>4)+0x30;
				 disp3[14]=(TIME[1]&0x0f)+0x30;
				 }
				}
			}
			if(start3==0)//红外
			{
				 disp4[2]=' ';
				 disp4[3]='o';
				 disp4[4]='f';
				 disp4[5]='f';
				 disp4[6]=' ';
			}
			else
			{
				if(error3==0)
				{
				 disp4[2]=' ';
				 disp4[3]='o';
				 disp4[4]='n';
				 disp4[5]=' ';
				 disp4[6]=' ';
				}
				else
				{
				 if(disp4[2]==' ')
				 {
				 disp4[2]=(TIME[2]>>4)+0x30;
				 disp4[3]=(TIME[2]&0x0f)+0x30;
				 disp4[4]=':';
				 disp4[5]=(TIME[1]>>4)+0x30;
				 disp4[6]=(TIME[1]&0x0f)+0x30;
				 }
				}
			}
			if(start4==0)//禁区
			{
				 disp4[10]=' ';
				 disp4[11]='o';
				 disp4[12]='f';
				 disp4[13]='f';
				 disp4[14]=' ';
			}
			else
			{
				if(error4==0)
				{
				 disp4[10]=' ';
				 disp4[11]='o';
				 disp4[12]='n';
				 disp4[13]=' ';
				 disp4[14]=' ';
				}
				else
				{
				 if(disp4[10]==' ')
				 {
				 disp4[10]=(TIME[2]>>4)+0x30;
				 disp4[11]=(TIME[2]&0x0f)+0x30;
				 disp4[12]=':';
				 disp4[13]=(TIME[1]>>4)+0x30;
				 disp4[14]=(TIME[1]&0x0f)+0x30;
				 }
				}
			}
			write_string(1,0,disp3);
			write_string(2,0,disp4);
		}
	}
	TH0=0X3C;
	TL0=0XB0;
}
//定时器1中断
void Timer1() interrupt 3
{
	TH1=0xfe;
	TL1=FRQ;
	beep=!beep;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqtianxingkeji

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值