很简单,按键控制一个变量,再去判断是否启动定时,关定时后,重按启动,清除原来的计时值,重启定时器,不难 |
此2变量要加关键字static 为静态或声明全局变量,否则会乱套。 void Timer0_Rountiue() interrupt 1 //中断程序 { static unsigned char tem_ms; static unsigned int tem_s; //1秒 |
/* uint8 time10ms_count = 0; uint8 time1s_count = 0; bit time10ms_flag = 0; bit time1s_flag = 0; 定时中断函数 //1ms进入一次 { if(++time10ms_count>10) { time10ms_count = 0; time10ms_flag = 1; //10ms标志 if(++time1s_count>100) { time1s_count = 0; time1s_flag = 1; //1s标志 } } } uint8 key_value = 0; uint8 key_count = 0; bit key_flag = 0; 按键判断函数 //10ms跑一次 { if(!key) { if(key_count<100) { if(++key_count>100) { key_count = 100; key_flag = !key_flag; //长按启动 暂停标志 } } } else { if(key_count>2&&key_count<50) //按下时间大于20ms小于500ms判断为点击 { if(++key_value>9) //键值加加 key_value = 0; } key_count = 0; } } uint8 time = 0; uint16 time_count = 0; uint8 time_s = 0; 定时时间函数 //1s跑一次 { if(key_value==time) { ; } else { time_s = 0; //重新计时 time = key_value; //赋值定时 } if(time>0) { if(++time_count>3600) { time_count = 0; if(++time_s>=time) { time_s = 0; //定时时间到 } } } } void main() { while(1) { if(time10ms_flag) { time10ms_flag = 0; 按键判断函数 ; //10ms跑一次 } if(time1s_flag) { time1s_flag = 0; if(key_flag) //启动 定时时间函数 ; //1s跑一次 else //停止 //可以清除定时之类的 } } } */ |
先画个逻辑框图,理理思路,而后再写程序。 |
比较啊== >= <= |