定时器实现非阻塞式程序
•程序功能:两个按键分别控制两个LED,使其切换不同的点亮模式
•程序要求:按键灵敏,每次按键按下都能准确切换模式
模块要高度封装,主程序调用要简洁, 在任何时候模块代码都不能阻塞主程序
阻塞和非阻塞
•阻塞:执行某段程序时,CPU因为需要等待延时或者等待某个信号而被迫处于暂停状态一段时间,程序执行时间较长或者时间不定
•非阻塞:执行某段程序时,CPU不会等待,程序很快执行结束
定时器扫描按键-单按键
•定时中断,每隔20ms读取一次本次引脚值和上次引脚值
•判断,如果本次是1,上次是0,则表示按键按下且当前处于刚松手的状态
•置键码标志位,向主程序报告此事件
定时器扫描按键-多按键
•先写一个获取键码值的子函数(非阻塞式)
•定时中断,每隔20ms读取一次本次键码值和上次键码值
•判断,如果本次是0,上次非0,则表示按键按下且当前处于刚松手的状态
•置键码标志位,向主程序报告此事件
定时器实现LED闪烁
•定时中断,每隔1ms计次变量自增
•计次变量计到周期值时,归零
•判断,如果计次变量小于一个比较值,开灯,否则,关灯