功能要求:
1.當(dāng)檢測時,數(shù)碼管會倒計時60
2.當(dāng)有人靠近時,會報警
3,當(dāng)?shù)褂嫊r時,報警器會報警并且led燈會閃爍提示
原理圖:
部分程序:
#include <STC15F2K60S2.H>
#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};//數(shù)碼管段碼
u8 disbuf[]={0,0,0,0};//數(shù)碼管顯示緩沖區(qū)
u8 min=0;
void Timer0Init(void)?????????????? //1毫秒@11.0592MHz
{
AUXR |= 0x80;???????????????? //定時器時鐘1T模式
TMOD &= 0xF0;?????????????? //設(shè)置定時器模式
TL0 = 0xCD;????????????? //設(shè)置定時初始值
TH0 = 0xD4;???????????? //設(shè)置定時初始值
TF0 = 0;??????????? ? //清除TF0標(biāo)志
TR0 = 1;??????????? ? //定時器0開始計時
ET0 = 1;????? //定時器0打開
EA? = 1;????? //定時器總開關(guān)
}
void timer0()interrupt 1
{
static u16 min_count=0,fmq_count=0,led_count=0,ir_flag=0;//靜態(tài)局部變量 分計數(shù)、蜂鳴器間隔響計數(shù)、人體紅外標(biāo)志位
if(IR==1)ir_flag=1;//當(dāng)檢測到物體經(jīng)過 標(biāo)志位置1
if(ir_flag==1)???? //當(dāng)標(biāo)志位為1 執(zhí)行以下程序
{
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)//時間到結(jié)束報警 正常速度為1000 當(dāng)前為100
{
min_count=0;
if(++min==60)
{
min=0;
ir_flag=0;
}
}
}
disbuf[2]=min/10;? //將值傳入顯示緩沖區(qū)
disbuf[3]=min%10;
if(ir_flag==0)
{
P14=1;
P15=1;
P16=1;