|
本人毕业设计做门禁系统,有一要求:门口有人(红外探测输出高电平),LCD点亮显示欢迎词;若门口人站那超过2分钟,LCD显示请离开,并蜂鸣器报警。人离开后,LCD待机,待检测到有人,如此循环。
就这个2分钟的定时器程序怎么写?该怎样加入main()函数中?下面是本人写的程序,但功能不能实现。
sw1为红外传感器,高电平说明有人;
lcd()为欢迎词程序;
lcd1()为警告词程序;
lcd_init()为LCD初始化程序;
问题:
1.sw1==1时(有人),显示欢迎词,同时定时器开启;此时我把sw1==0(没人),这时定时器应该停止,LCD待机。但我写的这个程序,一直亮欢迎词,按 下sw1==0后不会立即初始化,直到定时器2分钟定完过后才初始化。正确的应该是定时中若sw1==0,LCD立即就能初始化的效果。
2.2分钟结束后,警告词只亮一次,然后又就跳到欢迎词。正确的应该是警告词一直显示,直到人走后(sw1==0),才待机,检测到人,显示欢迎词再如 此循环。
以下为自己写的程序(一些程序省篇幅就不贴出来了)
void Time0_init()
{
TMOD = 0x01;//定时器T0工作在方式1,定时时间60ms=0.06s
TH0 = 0x15;//高8位初值
TL0 = 0xA0;//低8位初值
EA = 1;//开总中断
ET0 = 1;//开定时器T0中断
TR0=1;//启动定时器
}
void main()
{
while(1)
{
a=0;//变量a清零
if(sw1==1)
{
Time0_init();
lcd();
if(sw1==0)
{
lcd_init();
}
}
while(2000-a !=0);//等待延时2000x0.06=120s=2min
TR0=0;//关闭定时器
while(sw1==1)
{
lcd1();
}
}
}
void Time0() interrupt 1//中断服务程序
{
TH0 = 0x15;//重装定时器高8位初值
TL0 = 0xA0;//重装定时器低8位初值
a++;//变量a加1
}
望各路大神帮忙指点,谢谢!!!!!!!!!!!
|
|