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