📄 键盘键值显示在液晶上.c
字号:
//******************************************/
#include <msp430x44x.h>
char speed = 1;
char key_val;
unsigned char key_Map[12] ={ //设置键盘逻辑键值与程序计算键值的映射
1,2,3,10,4,5,
6,0,7,8,9,11
};
/******************************************************
数据定义
*****************************************************/
const unsigned char NUM_LCD[16]={
0x7B, 0x12, 0x4f, 0x1f, 0x36, //'0'~ '4'
0x3d, 0x7d, 0x13, 0x7f, 0x3f, //'5' ~ '9'
0x77, 0x7c, 0x69, 0x5e, 0x6f, // '6'~ 'E'
0x65}; // F"
void delay(unsigned long v)
{
while(v!=0)v--;
}
char Keyj(void)
{
P1DIR = 0x0E; // set p1.1~p1.3 设置为输出模式
P1OUT = 0x00; // p1.1~p1.3 输出值清零
return(P1IN & 0xf0 ) ;
}
/*********************************************
* Check_Key(),检查按键,确认键值
*********************************************/
void check_Key(void){
unsigned char row ,col,tmp1,tmp2;
// tmp1用来设置P1OUT的值,使P1.1~P1.3中有一个为0
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; // tmp1 右移一位
if ((P1IN & 0xf0) < 0xf0){ // 是否P1IN的P1.4~P1.7中有一位为0
tmp2 = 0x80; // tmp2用于检测出那一位为0
for(col =0;col<0x04;col++){ // 列检测
if((P1IN & tmp2)==0x00){ // 是否是该列
key_val =key_Map[ row*4 +col] ; // 获取键值
return; // 退出循环
}
tmp2 /= 2; // tmp2右移
}
}
}
}
/******************************************/
void main(void)
{
char i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
FLL_CTL0 |= XCAP14PF; // Configure load caps
LCDCTL = 0XFD;
BTCTL = BTFRFQ1; // STK LCD freq
P5SEL = 0xFC; // Common and Rxx all selected
for(i=0;i<20;i++)
LCDMEM[i]= 0;
while(1)
{ //循环
if(Keyj()!=0xf0)
delay(300);
if(Keyj()!=0xf0)
{
check_Key();
LCDMEM[3]= NUM_LCD[key_val ];
LCDMEM[1]= NUM_LCD[key_val ];
LCDMEM[2]= NUM_LCD[key_val ];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -