用定时器,定时1ms一次中断,在定时器中断中检测按键.首先定义两个全局变量:
unsigned char LastKey; //最后按下的键值,初始化为无效键值即可.例如0xFF unsigned char CheckCount; //计数器,初始化为0
//中断处理 if( LastKey!=0xFF ) //此前已经有一键按下 { //检查该键是否仍然按下 if( /*没按下*/ ) { LastKey=0xFF; CheckCount=0; } else if( LastKey<20 ) { CheckCount++; if( CheckCount==20 ) { //按键处理,或置标志位,供主程序轮询 } } } else //此前无键按下 { //检查有无键按下 if( /*有键按下*/ ) { LastKey=/*键码*/; CheckCount=1; } }
//这么做可以非常好的消除抖动,同时硬件上可以把与门去掉,节省了硬件,也省了一个中断口线. //因为我以前写的按键处理程序都是汇编,不大好读,现写了个C语言的框架,你可以照这个试一下. //这样处理按键,只能对第一个按下的键响应,在响应了一个按键后,除非这个健放开,否则其它任何按键都得不到处理,看似处理的比较弱智,其实在大多数情况下已经可以很好的工作了,除非就有人和你较劲,呵呵~~~~~~ |