请教大家关于中断程序实现5秒后关灯的问题,试下好久无法实现,麻烦大家帮忙看一下,代码得怎样修改,多谢!!
下面为代码
////下面为中断程序模块/////
void init() //初始化数据
{
TMOD = 0x01;
TH0 = 0x3C; //(12MHZ的晶振赋值TH0=0x3C;TL0=0xB0;)
TL0 = 0xB0;
EA = 1;
ET0 = 1;
TR0 = 0;
}
void Timer0(void) interrupt 1
{
TH0=0x3C;
TL0=0xB0;
t_flag_time=1;
}
void shijianchuli() //时间处理
{
if(t_flag_time==1)
{
t_flag_time=0;
if(ledcnt>0) //设定的延时时间
{
lsign=1;ledcnt--;}
else
{lsign=0;}
if(t_out_flag==1)
{
if(t_yanshi>0)
{t_yanshi--;}
else
{lsign=0;}
}
if(t_flag==1) //C开关一直按着则会启动该程序
{
if(t_count<18000) //十五分钟时间判定
t_count++;
if(t_count>18000)
{
lsign=0; //到了则关闭LED1,同时关闭定时器
t_count=0;
t_flag=0;
TR0=0;
}
}
}
}
void main()
{
init(); //中断服务初始化
while(1)
{
shijianchuli();
keyscan();
switch(K) //K值为键盘扫描函数的返回值
{
case 1: //按下"A开关"
{
lsign=1 //LED1灯亮
TR0=1; //中断开始
ledcnt=200; //lsign=1后,五秒后关灯
};break;
case 2: //按下"B开关"
{
lsign=1;
t_out_flag==1;
TR0=1;
t_yanshi=200; //lsign对应的LED1五秒后关灯
};break;
default:break;
}
switch(SENK)
{
case 1: //按下C开关
{
lsign=1; //开LED1
t_flag=1;
TR0=1; //当C开关持续被按下15分钟后,系统会自动关LED1并退出到待机状态
};break;
default:break;
}
}
}
问题1:先按下A开关,再按下B开关,要求是按下B开关后,利用中断程序,如果再也没有按下其他开关,则lsign对应的LED1五秒后关灯,但在测试过程中,发现LED1好像受到在按下A开关时的中断影响,要求是按下B开关后,如果再也没有按下其他开关,但LED1灯没到五秒,很快就灭了。这是为什么呢?
问题2:
switch(SENK)
{
case 1: //按下C开关
{
lsign=1; //开LED1
t_flag=1;
TR0=1; //当C开关持续被按下15分钟后,系统会自动关LED1并退出到待机状态
};break;
这一段想实现的功能是,当C开关持续被按下15分钟后,系统会自动关LED1并退出到待机状态,但现在测试时,在按下C开关不放手时,led1状态是:亮-灭-亮-灭,为什么会这样呢,程序要怎样修改?? |