基于51单片机的红外报警器的设计与制作

控制/MCU

1815人已加入

描述

功能要求:

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

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

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

原理图:

定时器

程序运行截图:

定时器

部分程序:

#include

#define key1 P37

#define key2 P41

#define key3 P42

#define key4 P43

#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;

}

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分