在上一章节【
嵌入式设计编程:事件及事件队列_3(对按键进行读取)】中,实现了利用事件队列的方式来实现按键状态的读取。
对于按键的抖动,利用10ms中断连续读取消抖,这里也可以利用前面讲的软件定时器来实现同样的功能,非常的方便。
想想,软件定时器如何实现?
(1)设定扫描时间,是否为周期性事件: #define KEY_SCAN_PERIOD_MS 10
(2)静态定义一个软件定时器,并初始化: static softtimer_t keyScanTask_timer = TIMER_INIT;
(3)定义一个时间到的真正的处理函数: void keyScan(void *data)
(4)启动软件定时器: Timer_StartPeriodic(&keyScanTask_timer, KEY_SCAN_PERIOD_MS, keyScan);
列代码
主函数里面
-
int main(void)
-
{
-
//static int cnt = 0;
-
volatile static event_t* event;
-
board_init();
-
keyScanTask_init(); // 启动软件定时器
-
-
while(1)
-
{
-
event = EventQueue_GetPendingEvent();
-
if (event)
-
{
-
event->execute(event->data);
-
}
-
-
// if(flag) // 10ms中断内,查询按键状态,用来消除按键抖动。
-
// {
-
// flag =0;
-
// keyScan();
-
// }
-
}
-
}
同样实现检测效果。是不是很方便啊
阅读(1341) | 评论(0) | 转发(0) |