STM32之系統(tǒng)時基定時器中如何完成按鍵防抖動問題
在按鍵演示防抖動部分的主要思路是:利用系統(tǒng)定時器溢出間隔中斷來延時防抖。這樣做可以提高代碼的執(zhí)行效率。我們怎么去很好的利用這個系統(tǒng)定時器來延時呢?如果只是簡單在系統(tǒng)定時器中斷中置位延時標(biāo)志位,沒有任何意義,我們需要有一個標(biāo)志位來允許置延時標(biāo)志。第一次掃描到有按鍵按下時,延時標(biāo)志肯定為空,那么在此置位一個標(biāo)志位,來允許系統(tǒng)定時器中置位延時標(biāo)志,就解決了這個問題。
軟件的邏輯結(jié)構(gòu)是:如果沒有延時,則置位允許延時標(biāo)志置位標(biāo)志。首先是置位標(biāo)志位,如果置位了,在系統(tǒng)定時器溢出中斷中,就可以置位延時標(biāo)志位。如果已經(jīng)置位,處理按鍵值。
下面給出一個在按鍵處理中的對延時標(biāo)志判斷的處理。
if(key_bit & 0x02) //如果按鍵沒有被處理
{
if(key_bit & 0x01) //如果已經(jīng)延時
{
key_bit &= ~0x01;//清0標(biāo)志位
LED2B();//跳轉(zhuǎn)LED2燈
key_bit |= 0x02;//置位按鍵處理標(biāo)志
}
else //如果沒有存在延時
{
key_bit |= 0x04;//置位 允許延時標(biāo)志位置位 標(biāo)志位
}
}