我想做的是:在不按键的情况下,八个LED流水灯形式工作;按键按下,第一个LED与第八个LED亮,然后第二个LED与第七个LED亮,以此类推。
现在的问题是,按键一次,切换成第二种工作状态,但是再按,就没办法切换到最初的流水灯形式,程序如下:
sbit run_flag = P3^2;
//延时函数,消除抖动
void Delay(uint16 count)
{
uint8 i;
while(--count != 0)
for(i=0;i<125;i++);
}
/*按键的判断转化成中断处理,按下按键则意味着一次中断事件发生,
单片机处理按键任务,即跳转到INT0中断处理程序中*/
void main()
{
IT0 = 1; //设置外部中断0触发方式位,1为边沿触发
EX0 = 1; //外部中断0中断允许位
EA = 1; //允许总中断标志位
while(1)
{
if(run_flag==0) //判断运行标志位状态
{
P1=led_light1[i++];
Delay(50);
if(i==4) i=0;
}
else
{
P1=led_light2[i++]; //点亮LED流水灯
Delay(50);//点亮延时
if(i==8) i=0;
}
}
}
//中断程序
void int0() interrupt 0
//中断服务函数入口
{
EX0=0; //禁止INT0中断
i=0;
run_flag=~run_flag;
EX0=1; // 允许INT0中断
}
我是初学者,还麻烦各位老师指点一下。卡在这个问题上好久了。谢谢
|