41.基于51单片机的红外报警器的设计与制作(实物)

41.基于51单片机的红外报警器的设计与制作(实物)

41.基于51单片机的红外报警器的设计与制作(实物)

要求:

1.当检测时,数码管会倒计时60

2.当有人靠近时,会报警

3.当倒计时时,报警器会报警并且led灯会闪烁提示

资料包括:

image.png

原理图:

image.png

PCB:

image.png

程序运行图:

image.png

define IR   P10
#define FMQ  P54
#define u8 unsigned char
#define u16 unsigned int
u8 table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//数码管段码
u8 disbuf[]={0,0,0,0};//数码管显示缓冲区
u8 min=0;
void Timer0Init(void)		//1毫秒@11.0592MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0xCD;		//设置定时初始值
	TH0 = 0xD4;		//设置定时初始值
	TF0 = 0;		  //清除TF0标志
	TR0 = 1;		  //定时器0开始计时
	ET0 = 1;      //定时器0打开
	EA  = 1;      //定时器总开关
}
void timer0()interrupt 1
{
	static u16 min_count=0,fmq_count=0,led_count=0,ir_flag=0;//静态局部变量 分计数、蜂鸣器间隔响计数、人体红外标志位
	if(IR==1)ir_flag=1;//当检测到物体经过 标志位置1
	if(ir_flag==1)     //当标志位为1 执行以下程序
	{
		if(++fmq_count==500)//每500毫秒响一次
	  {
			fmq_count=0;
			FMQ=!FMQ;
	  }
		/*********流水灯**********/
      led_count++;
			if(led_count==100)P14=!P14;
			if(led_count==200)P15=!P15;
			if(led_count==300)P16=!P16;
			if(led_count==400)P17=!P17;
			if(led_count==401)led_count=0;
	  /*************************/
	 	if(++min_count==100)//时间到结束报警 正常速度为1000 当前为100
		{
			min_count=0;
			if(++min==60)
      {
				min=0;
				ir_flag=0;
			}
		}
  }
	 disbuf[2]=min/10;  //将值传入显示缓冲区
	 disbuf[3]=min%10;
	if(ir_flag==0)
	{
		P14=1;
		P15=1;
		P16=1;
		P17=1;
	}
}

void Delay10ms()		//@11.0592MHz  10毫秒延时
{
	unsigned char i, j;

	i = 18;
	j = 235;
	do
	{
		while (--j);
	} while (--i);
}

void smg()//数码管显示程序
{
	static int i=0;
	P24=1;
	P25=1;
	P26=1;
	P27=1;
  switch(i)
	{
		case 0:P24=0;P0=table[d

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值