?? keyboard12.c
字號(hào):
/*********************************************************
* 文件名稱:
* keyboard12.c
* 程序功能描述:
* 行列式鍵盤(pán)檢測(cè)
* 輸入:
* 用戶的按鍵事件
* 輸出:
* 存放用戶輸入的鍵值
*
*
*********************************************************/
#ifndef MSP430F449_H
#include <msp430x44x.h>
#endif
#define KEY_BOARD 1
unsigned char key_Pressed, // 是否有鍵值按下
key_val, // 存放鍵值
key_Flag; // 是否一個(gè)按下的按鍵已經(jīng)松開(kāi),
// 即是按鍵的鍵值可以讀取
unsigned char key_Map[16] ={ //設(shè)置鍵盤(pán)邏輯鍵值與程序計(jì)算鍵值的映射
0,1,2,3,
4,5,6,7,
8,9,0x0A,0x0B,
0x0C,0x0D,0x0E,0x0F
};
/********************************************************
* 初始化鍵盤(pán)設(shè)備
********************************************************/
/*void init_Keyboard(void){
P1DIR &= 0x01; // P1.4~P1.7 設(shè)置為輸入模式
P1DIR |= 0x0E; // set p1.1~p1.3 設(shè)置為輸出模式
P1OUT |= 0x0E; // p1.1~p1.3 輸出值清零
key_Flag = 0;// 初始化key_Flag
key_Pressed = 0;// 初始化key_Pressed
}*/
void init_Keyboard(void){
P3DIR |= 0x0f; // P3.0~P3.3 設(shè)置為輸出模式
P3DIR &= 0x0f; // set p3.4~p3.7設(shè)置為輸入模式
P3OUT |= 0xF0; // p3.4~p3.7 輸出值清零
key_Flag = 0;// 初始化key_Flag
key_Pressed = 0;// 初始化key_Pressed
key_val=0xff;
}
/*********************************************
* Check_Key(),檢查按鍵,確認(rèn)鍵值
*********************************************/
void check_Key(void){
unsigned char row ,col,tmp1,tmp2;
// tmp1用來(lái)設(shè)置P1OUT的值,使P1.1~P1.3中有一個(gè)為0
tmp1 = 0x10;
for(row=0;row<4;row++){
P3OUT |= 0xf0; // p3.4~P3.7=1
P3OUT &= ~tmp1; // P3.4~p3.7中有一個(gè)為0
tmp1 <<=1; // tmp1左移一位
if ((P3IN & 0x0f) < 0x0f){ // 是否P1IN的P3.0~P3.3中有一位為0
tmp2 = 0x01; // tmp2用于檢測(cè)出那一位為0
for(col =0;col<0x04;col++){ // 列檢測(cè)
if((P3IN & tmp2)==0x00){ // 是否是該列
key_val =key_Map[ row*4 +col] ; // 獲取鍵值
return; // 退出循環(huán)
}
tmp2<<= 1; // tmp2左移
}
}
if(key_val==0xFF)
{
key_Pressed = 0;
}
}
}
/***********************************************************
* 延遲,用于消除抖動(dòng)
************************************************************/
void delay(){
unsigned char tmp;
for(tmp=0xff;tmp>0;tmp--);
}
/************************************************************
* key_Event(),檢測(cè)鍵盤(pán)是否有鍵按下,如果有獲取鍵值
*************************************************************/
/*void key_Event(void){
unsigned char tmp;
P1OUT &= 0x01; // 設(shè)置P1OUT輸出值
tmp = P1IN; // 獲取 p1IN
if ((key_Pressed ==0x00)&&((tmp & 0xf0) < 0xf0))
{ //是否有鍵按下
key_Pressed = 1; // 如果有按鍵按下,設(shè)置key_Pressed標(biāo)識(shí)
delay(); //消除抖動(dòng)
check_Key(); // 調(diào)用check_Key(),獲取鍵值
}else if ((key_Pressed ==1)&&((tmp & 0xf0) == 0xf0))
{ //是否按鍵已經(jīng)釋放
key_Pressed = 0; // 清除key_Pressed標(biāo)識(shí)
key_Flag = 1; // 設(shè)置key_Flag標(biāo)識(shí)
}
}*/
void key_Event(void){
unsigned char tmp;
P3OUT = 0xFF;
P3DIR &= 0xF0; // P3.0~P3.3 設(shè)置為輸入模式
P3DIR |= 0xF0; // set p3.4~p3.7 設(shè)置為輸出模式
P3OUT &= 0x0F; // 設(shè)置P3OUT輸出值
tmp = P3IN; // 獲取 p3IN
if ((key_Pressed ==0x00)&&((tmp & 0x0F) < 0x0F))
{ //是否有鍵按下
key_Pressed = 1; // 如果有按鍵按下,設(shè)置key_Pressed標(biāo)識(shí)
delay(); //消除抖動(dòng)
delay();
delay();
check_Key(); // 調(diào)用check_Key(),獲取鍵值
}else if ((key_Pressed ==1)&&((tmp & 0x0F) == 0x0F))
{ //是否按鍵已經(jīng)釋放
key_Pressed = 0; // 清除key_Pressed標(biāo)識(shí)
key_Flag = 1; // 設(shè)置key_Flag標(biāo)識(shí)
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -