其它地方没去看,你实现按键功能的中断函数应该可以优化一下,也不知道能不能行,但可以试试 void INT0(void) interrupt 0 { Delay10ms();//延时消抖 if(K1 == 0) { LED = 0; second = 0;//为下一次长按进行初始化 TR0 = 1; //定时器0开始计时 } else { return; } //等待按键释放 while(K1 == 0) { LED = 1; } //表示长按2s if(second > 50) { AUXR &= ~0x10;//定时器2暂停计时 Send(0xff); Send(0xff); ST = 0; ST = 1; //熄屏 m = 0; n = 0; i = 0; //重新初始化 flag = 1; //长按标志位 LED = 1; return; } i++; //记录按键次数 //按下一次 启动计时 if(i == 1) { AUXR |= 0x10; //定时器2开始计时 LED = 0; } //再按一下暂停计时 if(i == 2) { AUXR &= ~0x10; //定时器2暂停计时 LED = 1; i = 0; } } |
做一个标记:BJ。你的计时程序依据BJ计时,BJ=1就计时,BJ=0就不计时。 这样做暂停,只有将BJ清0,即可。不影响其它东东。而恢复计时呢?就将BJ置1。 切记:不要用按键直接决定计时,因为你的功力不够,逻辑不清。用个BJ做控制,就简单了,清晰了。 |