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