#include <reg52.H>
#include <stdio.H>
#include "IR.H"
#include "uart.h"
#define uchar unsigned char
#define uint unsigned int
void delay_ms(unsigned int t);
void Timer0Init(void);
//自己加的延时
//#define delay1ms; //误差 -0.018084490741us
uint sec,ms1;
uint Time[3]={99,99,99};
//1.LED1~LED3依次接P1.0~P1.2;
//2.红外接P3.2
sbit LED0=P1^0; //灯1
sbit LED1=P1^1; //灯2
sbit LED2=P1^2; //喇叭
sbit KEY0=P2^7; //光感应
sbit KEY1=P2^6; //人体红外
sbit KEY2=P2^5; //雷达
bit KEY2_temp;
void main()
{
// P1M0=0X07; //LED推挽输出
// P1M1=0X00;
LED0=LED1=LED2=0; //开机全灭
IR_init(); //红外初始化
UartInit();
Timer0Init();
KEY0=KEY1=KEY2=0;
KEY2_temp=KEY2;
while(1)
{
if(IR_Flag)
{
IR_Flag=0;
SendData(IRCOM[2]);
switch(IRCOM[2])
{
case 0x05:LED0=~LED0;break; //收到键值是05,LED0取反
case 0x09:LED1=~LED1;break; //收到键值是09,LED1取反
case 0x0D:LED2=~LED2;break; // 收到键值是0D,LED2取反
case 0x11:LED0=LED1=LED2=0;break; // 收到键值是11,LED0=LED1=LED2=0为低电平
}
}
else if(KEY0==1&&KEY1==1) //如果光感应KEY0与感应器1KEY1都为高电平,灯1开关打开
{
LED0=1;
delay_ms(5000); //延时时间=5ms*t
LED0=0;
// delay_ms(3000); //延时时间=5ms*t
// LED0=1;
}
else if(KEY0==1&&KEY1==1&&KEY2==1) //如果KEY0、KEY1和KEY2都为高电平,灯1和喇叭打开2分钟
{
LED0=LED2=1;
delay_ms(5000); //延时时间=5ms*t
LED0=LED2=0;
}
if(KEY2!=KEY2_temp) // 如果KEY2有高电平 ,往下判断
{
delay_ms(10);
if(KEY2!=KEY2_temp) // 再次判断KEY2是否有高电平 ,如有,往下运行
{
KEY2_temp=KEY2;
if(KEY2==1) // 如果KEY2有高电平
{
Time[2]=sec;
sec=0;
if((Time[0]+Time[1]+Time[2])<60) // 如果KEY2有高电平,60秒内超过3次,所有开关都打开
{
LED0=LED1=LED2=1;
delay_ms(5000); //延时时间=5ms*t
LED0=LED1=LED2=0;
}
Time[0]=Time[1];
Time[1]=Time[2];
}
}
}
}
} /*
//自己加的延时程序
void delay_1ms() //误差 -0.018084490741us
{
unsigned char a,b;
for(b=18;b>0;b--)
for(a=152;a>0;a--);
_nop_(); //if Keil,require use intrins.h
} */
void delay_ms(unsigned int t) //延时时间=5ms*t
{
ms1=0;
while(ms1<t);
}
void timer0 ()interrupt 1 using 1
{
static uint ms;
TL0 = 0x66; //设置定时初值// TL0=(65536-1000)%256;
TH0 = 0xFC; //设置定时初值// TH0=(65536-1000)/256;
ms++;
ms1++;
if(ms>=1000)
{
ms=0;
sec++;
}
}
void Timer0Init(void)
{
TMOD |=0x01;
TL0 = 0x66; //设置定时初值// TL0=(65536-1000)%256;
TH0 = 0xFC; //设置定时初值// TH0=(65536-1000)/256;
TR0 =1;
ET0 =1;
EA =1;
}
|