unsigned char keyvalue; //存储键值 unsigned char checkkey(void) //检查是否有按键按下 {
unsigned char x=0x00;
P1OUT &=~(BIT0+BIT1+BIT2+BIT3); x=~(P1IN)&(BIT4+BIT5+BIT6+BIT7); return (x); }
unsigned char getkeyvalue(void) //获取键值
{
unsigned char x=0; P1OUT =~BIT0; if (~P1IN&BIT4) x=1;
else if (~P1IN&BIT5) x=2;
else if (~P1IN&BIT6) x=3;
else if (~P1IN&BIT7) x=10; P1OUT =~BIT1; if (~P1IN&BIT4) x=4;
else if (~P1IN&BIT5) x=5;
else if (~P1IN&BIT6) x=6;
else if (~P1IN&BIT7) x=11; P1OUT =~BIT2; if (~P1IN&BIT4)
x=7;
else if (~P1IN&BIT5) x=8;
else if (~P1IN&BIT6) x=9;
else if (~P1IN&BIT7) x=12; P1OUT =~BIT3; if (~P1IN&BIT4) x=14;
else if (~P1IN&BIT5) x=0;
else if (~P1IN&BIT6) x=15;
else if (~P1IN&BIT7) x=13; return(x); }
void main(void) {
WDTCTL=WDTPW+WDTHOLD; P1DIR=0x0f;
P1REN=0xf0; P2DIR=0xFF; P2OUT=0x0; while(1) {
__delay_cycles(2000); if(checkkey()) {
__delay_cycles(1000); if(checkkey()) {
keyvalue=getkeyvalue();
P2OUT=keyvalue; while(checkkey()); } } } }
七、实物图例
//延时消抖//数码管显示