key_lcd.c
来自「适用于msp430f449的键盘输入程序」· C语言 代码 · 共 158 行
C
158 行
#include "msp430x44x.h "
//---------------------------------------------------------
//-----flag byte define------
//---------------------------------------------------------
#define key_press 0x2
//---------------------------------------------------------
//-----vaule define----------
//---------------------------------------------------------
static unsigned char flag; //flag register
static unsigned char key_buff; //key vaule buffer
static unsighed char sign2; //是否为等号的标志
static unsighed char sign1; //运算号的标志,+。-,*,/
const unsigned char lcd_table[12]={
0x7b, //*"0"*//
0x12, //*"1"*//
0x4f, //*"2"*//
0x1f, //*"3"*// //lcd display table
0x36, //*"4"*//
0x3d, //*"5"*//
0x7d, //*"6"*//
0x13, //*"7"*//
0x7f, //*"8"*//
0x3f, //*"9"*//
0x6d, //*"e"*//
0x65, //*"f"*//
};
const unsigned char key_table[12]={
0x0b, //*(key_vaule) 00(key_num)
0x09, //9 01
0x08, //8 02
0x07, //7 03
0x00, //0 04
0x06, //6 05 //key vaule table,
0x05, //5 06 //键值是从最后一个定义从右往左定义的!!!
0x04, //4 07
0x0a, //# 08
0x03, //3 09
0x02, //2 0a
0x01, //1 0b
};
void main(void)
{
int i;
WDTCTL = WDTPW + WDTHOLD;
BTCTL=BTSSEL+BT_ADLY_250+BTFRFQ1; //BT 0.25 S interrupt
IE2|=BTIE;
P5SEL=0xfc; //enable lcd display
LCDCTL=LCDON+LCD4MUX+LCDP2;
for (i=0; i<8; ++i) // clear lcd
LCDMEM[i] = 0x00;
_EINT();
//*mainloop*//
for(;;)
{
_BIS_SR(LPM3_bits); //in LPM3
_NOP();
}
}
// Basic Timer interrupt service routine
//interrupt[BASICTIMER_VECTOR] void basic_timer(void)
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer(void)
{
}
//---------------------------------------------------------
//------- SCAN KEY PROGRAM---------------------------------
//---------------------------------------------------------
void scan_key_deal(void)
{
unsigned char counter;
unsigned char buffer;
unsigned char com_byte;
unsigned char key_num;
P1DIR=0x0f;
/*需要将P1.4到1.7的方向置成输出才能驱动行列键盘*/
com_byte=0xff;
P1OUT&=~0x08;
P1OUT&=~0x04;
P1OUT&=~0x02;
/*这三句或是用来将P1.1,1.2,1.3置零*/
buffer=P1IN;
/*读取P1的键值,传入buffer*/
if(0xf0!=(buffer&0xf0)) //judge if the key was press
/*判断是否有键按下,若有那么高四位就不会是全1*/
{
P1OUT|=0x08;
P1OUT|=0x04;
P1OUT|=0x02;
/*把低三位置1,高四位不变*/
com_byte=0xff;
key_num=0x00;
com_byte=0x02; //从P1.1开始
for(counter=0x03;counter>0;counter--) //get the key num
{
P1OUT&=~com_byte; //scan the row,置P1.1为0
if(!(P1IN&BIT4)) //判断P1.4是不是0,
// 若是则key_num为0,P1.1和1.4为0对应为*,table[0]为*
{
if(counter==0x03)
{
sign2=1;
}
else if(counter==0x01)
{
sign1++;
}
break;
}
key_num++;
if(!(P1IN&BIT5))
break;
key_num++;
if(!(P1IN&BIT6))
break;
key_num++;
if(!(P1IN&BIT7))
break;
key_num++;
com_byte=com_byte<<1;
}
flag|=key_press;
buffer=P1IN;
buffer=P1IN;
key_buff=key_table[key_num]; //get the key value
return;
}
// flag&=~key_press;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?