新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MSP430F14-直接IO口按鍵檢處理程序

MSP430F14-直接IO口按鍵檢處理程序

作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
//MSP430F14-直接IO口按鍵檢處理程序

/*************************************************************************/

本文引用地址:http://butianyuan.cn/article/201611/316575.htm

//分別使用了采個4個按鍵接到MSP430的通用IO口,按任意一個按鍵可以使板上的對應(yīng)LED反轉(zhuǎn).
//例程中,按鍵采用不斷查詢方式,以得到鍵值.并沒有使用到低功耗.此程序結(jié)構(gòu)比較適合
//用在非手持設(shè)備或非電池供電的設(shè)計中.此程序結(jié)構(gòu)比較通用,級用戶可參與或套用修改.
/*************************************************************************/
#include <msp430x14x.h>

//初級用戶要習(xí)慣采用宏定義,以方便的編寫和修改
#define keyio 0xf0 //定義按鍵IO口,Px0-Px3 IO口.
#define key_1 0xfe //定義返回鍵值1
#define key_2 0xfd //定義返回鍵值2
#define key_3 0xfb //定義返回鍵值3
#define key_4 0xf7 //定義返回鍵值3

//聲明子程序
unsigned char key_chcek(void);
void display_update(unsigned char dta);
void key_process_0(void);
void key_process_1(void);
void key_process_2(void);
void key_process_3(void);
//*************************************************************************
//將單片機初始化程序放在main()前面是方便查看單片機的初始化狀態(tài)情況.
void MCU_int(void)
{//默認(rèn)MCLK主時鐘頻率為DCO=~800K
P1OUT |= BIT4+BIT5+BIT6+BIT7; //設(shè)置LED,上電為滅.電路可以查看MC430F14電路圖.
P1DIR |= BIT4+BIT5+BIT6+BIT7; //P1.0~P1.3設(shè)置為輸出.
//MSP430單片機IO口上電默認(rèn)方向為輸入,所以接按鍵的IO無需再設(shè)為輸入.
}

//*************************************************************************
void main (void)
{ unsigned char key_value; //定義鍵值全局變是
WDTCTL = WDTPW + WDTHOLD; //關(guān)狗
MCU_int(); //初始化單片機

while(1) //主程序主循環(huán)
{
key_value=key_chcek(); //檢測,有鍵按下并松開,返回一個鍵值.

switch (key_value) //對鍵值進(jìn)行處理.采switch語法結(jié)構(gòu)查詢
{
case key_1: key_process_0(); //調(diào)用鍵處理程序1
break;
case key_2: key_process_1(); //調(diào)用鍵處理程序2
break;
case key_3: key_process_2(); //調(diào)用鍵處理程序3
break;
case key_4: key_process_3(); //調(diào)用鍵處理程序4
break;
default: ;
break;
}
// display_update(key_value); //如果有需要可以在這里加上顯示更新程序.
key_value=0x00; //最后清除鍵值.將繼續(xù)主循環(huán).
}
}

//*************************************************************************
//按鍵檢測程序
//返回值: 無符號字符型鍵值
unsigned char key_chcek(void)
{
unsigned int i;
unsigned char timp,active;
active=0;
while(!active)
{
while(0xff ==( P2IN | keyio)); //一直等待有鍵按下
timp = P2IN | 0xf0; //若有鍵接下了,則讀入IO狀態(tài).
for(i=0;i<7000;i++); //延時,是為了去按鍵抖動.
if (timp ==(P2IN | 0xf0)) //經(jīng)延時后,還是那鍵嗎?
{ active = 1; //是,則按鍵有效.
while(0xff !=( P2IN | keyio)); //一直等待按鍵松開
}
else
{ //去按鍵抖動后讀入的鍵值與之前不同.則先效.
active = 0; //再循環(huán)檢測.
}
}
return timp; //返回一個鍵值.
}

//*************************************************************************
void key_process_0(void) //值處理,用戶可以自己修改...
{
P1OUT ^= BIT4;
}
//*************************************************************************
void key_process_1(void) //值處理,用戶可以自己修改...
{
P1OUT ^= BIT5;
}
//*************************************************************************
void key_process_2(void) //值處理,用戶可以自己修改...
{
P1OUT ^= BIT6;
}
void key_process_3(void) //值處理,用戶可以自己修改...
{
P1OUT ^= BIT7;
}
//*************************************************************************
/*void display_update(unsigned char dta)
{
; //用戶可以根據(jù)需要來放置顯示程序,如LCD,LED,Digital-LED....
//靈活應(yīng)用,
}*/
//*************************************************************************



關(guān)鍵詞: MSP430F14IO口按鍵檢處

評論


技術(shù)專區(qū)

關(guān)閉