📄 keyboard12.c.bak
字号:
/*********************************************************
* 文件名称:
* keyboard12.h
* 程序功能描述:
* 行列式键盘检测
* 输入:
* 用户的按键事件
* 输出:
* 存放用户输入的键值
*
*
*********************************************************/
#ifndef _MSP430XF449H_
#include <msp430x44x.h>
#endif
#define KEY_BOARD keyboard.h
unsigned char key_Pressed, // if a key is press down
key_val, // key value
key_Flag; // if there is a key-value in
// key buffer
unsigned char key_Map[12] ={ //设置键盘逻辑键值与程序计算键值的映射
1,2,3,10,4,5,
6,0,7,8,9,11
};
/********************************************************
* Initiate keyboard device
********************************************************/
void init_Keyboard(void){
P1DIR &= 0x01; // P1.4~P1.8 input mode
P1DIR |= 0x0E; // set p1.1~p1.3 outputmode
P1OUT |= 0x0E; // p1.1~p1.3 output=0
key_Flag = 0;//no key is ready to be read
key_Pressed = 0;//no key is pressed
}
/*********************************************
* Check_Key(),检查按键,确认键值
*********************************************/
void check_Key(void){
unsigned char row ,col,tmp1,tmp2;
tmp1 = 0x08;
for(row=0;row<3;row++){
P1OUT |= 0x0E; // p1.1~P1.3=1
P1OUT -= tmp1; // P1.1~p1.3中有一个为0
tmp1 = tmp1/2;
if ((P1IN & 0xf0) < 0xf0){
tmp2 = 0x80;
for(col =0;col<0x04;col++){
if((P1IN & tmp2)==0x00){ // if is the pressed key
key_val =key_Map[ row*4 +col] ; // get value
return;
}
tmp2 /= 2;
}
}
}
}
/***********************************************************
* delay
************************************************************/
void delay(){
unsigned int tmp;
for(tmp=0x0ff;tmp>0;tmp--);
}
void key_Event(void){
unsigned char tmp;
P1OUT &= 0x01;
tmp = P1IN; // get p1IN
if ((key_Pressed ==0x00)&&((tmp & 0xf0) < 0xf0)) { //是否有键按下
key_Pressed = 1; // set flag
delay(); //消除抖动
check_Key(); // get key code
}else if ((key_Pressed ==1)&&((tmp & 0xf0) == 0xf0)){ //是否按键已经释放
key_Pressed = 0; // clear flag
key_Flag = 1; // key code can be read
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -