按键扫描是每个工程师都会用到的,它就像一个零部件,存在于每个程式系统中。而如何把它写得高效、省空间也是需要一定的技巧。
下面我介绍一下我接触到的一些按键扫描的写法。其实也都是站在巨人的肩膀上,再加上自己的理解稍微改动的,如果有什么错误,请大家指出讨论,一起进步。
在读书时很多人都是采用delay()的方式,我一开始也是,就这么用到毕业,所以做出来的东西经常出问题
if(pin_Key1_IO)
{
delay_MS(10); // 在這裡CPU停了10ms,
if(pin_Key1_IO)
{
gu8v_Key_Value = 0x01;
}
}
這種方式無疑是最好理解的,但很低效並且有一定幾率出去Bug,
而在工作時,慢慢地回去動腦去想如何改善,參考網上的很多做法,就有了如下的方法
if(!gbv_Key1_Mode)
{
// 按键按下
if(!pin_Key1_IO) // 按键消抖
{
gu16v_Key1_Count++;
}
else
{
gu16v_Key1_Count = 0;
}
if(gu16v_Key1_Count > mac_KeyDebounce)
{
//