1040-基于51单片机的报警器(红外入侵,时间段)原理图、流程图、物料清单、仿真图、源代码

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;//强制关闭报警
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叫我Eric

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

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

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

打赏作者

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

抵扣说明:

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

余额充值