對(duì)于那些特殊的開(kāi)關(guān)檢測(cè)信號(hào),可能需要使用比典型的更長(zhǎng)或更短的消抖時(shí)間,我們只需要設(shè)置開(kāi)關(guān)信號(hào)對(duì)應(yīng)的SWITCH_ID令牌結(jié)構(gòu)體變量的濾波次數(shù)過(guò)濾時(shí)間(見(jiàn)上文程序)。 說(shuō)到這里,有些不喜歡看代碼的同學(xué)可能就不太清楚了,在這里,幫大家把話(huà)說(shuō)到底,花錢(qián)買(mǎi)回筆墨,詳細(xì)介紹一下。 首先,設(shè)置一個(gè)10ms定時(shí)器,在中斷服務(wù)程序中執(zhí)行開(kāi)關(guān)檢測(cè)信號(hào)檢測(cè)。
在我們的例子中,考慮它的中斷服務(wù)程序(ISR)執(zhí)行以下Io Input Detect函數(shù)。 (需要說(shuō)明的是,我們通常不會(huì)在停機(jī)程序中執(zhí)行這種耗時(shí)的過(guò)程,這里僅供您理解。)
在此函數(shù)中,每個(gè)開(kāi)關(guān)檢測(cè)(標(biāo)識(shí)為SWITCH_ID)的當(dāng)前狀態(tài)在Read Io Switch函數(shù)中讀取并分配給其cursw,應(yīng)該注意的是,cursw代表的是當(dāng)前的開(kāi)關(guān)狀態(tài),而不是濾波處理的穩(wěn)定的關(guān)閉檢測(cè)狀態(tài)。 根據(jù)每個(gè)開(kāi)關(guān)檢測(cè)的當(dāng)前狀態(tài)cursw,判斷其穩(wěn)定的開(kāi)關(guān)檢測(cè)狀態(tài)switch_state,開(kāi)關(guān)檢測(cè)動(dòng)作swon_event和swoff_event。 即在for循環(huán)中執(zhí)行的Sw Detect函數(shù)。