基於MSP430G2553單片機的帶有按鍵消抖的中斷法控制按鍵查詢LED


參考資料來自用戶手冊P.328

 

 

 

 

 

 

一、設計任務:

用中斷法識別按鍵的狀態,按鍵一次LED亮;再按一次,LED熄滅,如此往復。並消除按鍵抖動。

二、基本原理:

  按鍵查詢一般可以通過掃描和中斷來實現。中斷實現可以免除頻繁掃描的麻煩,在按鍵按下時,中斷當前的程序執行中斷處理函數,效率較高。中斷發生時有一個硬件裝置將信號輸入單片機,該硬件部件叫中斷控制器,它負責把引起中斷的信號編號,並按照事先約定的優先級排隊,並發信號給單片機的cpu。cpu檢測到中斷控制器的信號后,獲得當前中斷發生信號的編號,由中斷向量表找到中斷向量,轉而去執行這個編號對應的中斷處理程序。設置好P1端口低四位的中斷觸發方式為下降沿;打開相應的中斷控制位和打開總中斷,然后在中斷服務程序中改變輸出。按鍵的抖動一般是機械性抖動,當開關斷開或閉合時接觸點處不會一下子接通也不會一下子斷開,而是會產生輕微的抖動導致電路的多次接通和斷開,這個過程大致會持續5ms-10ms。按鍵消抖一般可用定時器和延時來實現。當按鍵按下中斷標志位會改變,延時10ms后再檢測中斷標志位,若此時中斷標志位與延時前狀態不一致則代表按鍵已經按下,就改變輸出;若狀態一致則代表按鍵未按下,繼續等待下一個中斷觸發。

三、流程圖

四、代碼

#include <msp430g2553.h>

int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P1DIR |= BIT0; //將P1.0設為輸出(LED)
P1REN |= BIT3; //啟用P1.3內部上下拉電阻
P1OUT |= BIT3; //將內部電阻設為上拉
P1DIR &= ~(BIT3); //將P1.3設為輸入(按鍵)
P1IE |= BIT3; //打開P1.3中斷
P1IES |= BIT3; //設置P1.3為下降沿中斷
P1IFG &= ~ BIT3; //清除中斷標志位
_EINT(); //打開總中斷

return 0;
}
/*------中斷服務程序---------*/
# pragma vector = PORT1_VECTOR
__interrupt void keypress(void)
{
if(P1IFG & BIT3)//檢測中斷標志位
{
__delay_cycles(10000);//延時10ms
while(!(P1IFG & BIT3));//再次檢測
P1IFG &= ~BIT3; //清除中斷標志位
P1OUT ^= BIT0; //改變輸出
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM