给大家发个代码(以前写按键处理程序就是这样的思路):
//按键去抖动时间
//测试去抖动的方法是将该参数设置为较大的值,比如5秒钟时间
//连续按键,只有间隔时间大于5秒情况下扫描程序才可以检测到有效按键输入
//连续按键,间隔时间小于5秒情况下扫描程序不可以检测到有效按键输入
#define KEY_DEBOUNCE_TIMEOUT 20
static unsigned int key_port, key_port_pre;
static unsigned int key_value , key_bit;
static unsigned int key_debounce_timer;
//从端口中读取按键值
//read key port
unsigned int key_get_port()
{
}
//
// 在主程序循环中调用该函数
// 去抖动后,有变化的按键位存放在key_bit中
// 使用后需要将key_bit清除
void key_scan()
{
key_port = key_get_port();
if(key_port != key_port_pre)
{
key_port_pre = key_port;
key_debounce_timer = 0;
}
else
{
//key input is debounced
if(key_debounce_timer > KEY_DEBOUNCE_TIMEOUT)
{
if(key_port != key_value)
{
key_bit = key_port ^ key_value;
}
key_value = key_port;
}
}
}
//设置一个定时器中断,中断时间为1毫秒
//set up time with interval of 1 milisecond
void timer_isr()
{
key_debounce_timer ++;
}
|