基於MSP430F5529的按鍵消抖問題

2021-09-24 09:50:02 字數 914 閱讀 9929

注:板子:msp430f5529 開發環境:ccsv5

知道了抖動產生的原因,我們就可以思考解決的辦法了。

很顯然如果中斷的反應不要那麼快,是不是就可以避免這個問題了呢?那麼有乙個辦法就是把中斷程式的執行時間延長,讓中斷執行的慢一點,這樣在第一次觸發中斷後cpu去執行中斷程式,當抖動引發的中斷請求發出時中斷標誌位ifg已經被置位所以這些中斷請求相當於被覆蓋掉了,從而達到消抖的目的。

於是我們的中斷程式為

#pragma vector = port2_vector

__interrupt void port_2 ()

似乎是可以的,設定按鍵下降沿觸發中斷,按下後避過抖動時間然後改變燈的狀態,但是還有按鍵抬起呢?抬起時的抖動一樣會觸發中斷,這時我們可以加一條語句

#pragma vector = port2_vector

__interrupt void port_2 ()

p2ifg &= ~bit1;

}

判斷延時後按鍵處於按下狀態時才改變燈的狀態,否則就不變。

如果想上公升沿觸發中斷的話就改一下判斷條件就好了。

還有乙個辦法,就是不用按鍵去觸發中斷,而是定時檢測按鍵的狀態。

當按鍵按下後,電平狀態為 高—低—高,那麼我們就去不停的檢測按鍵的電平狀態,若發現電平由高變低,那麼改變燈的狀態就好了。

利用定時器,每隔10ms左右(可調整)去檢測按鍵電平,用兩個變數分別記錄上一次的狀態和本次的狀態,發現符合條件就改變燈的狀態。

具體實現如下:

#include int main(void) 

#pragma vector=timer0_a1_vector

__interrupt void timer0_a1_isr()

MSP430F5529學習筆記1

第一次學習微控制器相關知識,能力還不夠強,進度緩慢 通過在網上查詢,找到了乙份執行可成功完成led燈相應閃爍功能的 如下 include int main void 觀察到板子上有兩個led燈,該 控制閃爍的是p1.0的led1.0紅光閃爍 由於不清楚具體 含義,想要通過修改以下兩行 完成閃爍燈的轉...

基於MSP430F5529微控制器的DAC8552

dac8552是ti公司推出的16 位雙路電壓輸出數模轉換器,本次來介紹一下這個晶元在msp430微控制器上如何使用。一共才八個引腳,比較簡單,具體介紹我就不說了,如果小夥伴們有疑問或者更具體的資料可以去官網直接去查datasheet,一共就二十來頁,一會兒就看完了。先來說一下dac8552庫函式怎...

MSP430F5529 上手小例程4

將aclk和smclk配置為refclk vloclk datasheet的開啟方式 查閱資料得知 3個時鐘源 refo 32.768khz vlo 10khz xt2 4mhz lfxt1 32.768khz dco 通過fll設定,經1 2 4 8 16 32分頻可得到dcoclkdiv xt1...