Bootstrap

矩阵键盘在LED上显示键码值

#include<REGX52.H>
#include "Delay.h"

/*
 * 矩阵键盘读取按键
 * KeyNumber是按下矩阵键盘的值,如果按下不松开程序会卡在while(P1_7 == 0)进行判断,
    松开会在LCD1602上显示对应的按键值,没有按下会显示0
 */
unsigned char MatrixKey()
{
    unsigned char KeyNumber = 0;
    P1 = 0xFF;//初始化
    P1_3 = 0;//按列扫描
    if(P1_7 == 0){Delay(20);while(P1_7 == 0);Delay(20);KeyNumber = 1};//在按行扫描
    if(P1_6 == 0){Delay(20);while(P1_6 == 0);Delay(20);KeyNumber = 5};
    if(P1_5 == 0){Delay(20);while(P1_5 == 0);Delay(20);KeyNumber = 9};
    if(P1_4 == 0){Delay(20);while(P1_4 == 0);Delay(20);KeyNumber = 13};

    P1 = 0xFF;
    P1_2 = 0;
    if(P1_7 == 0){Delay(20);while(P1_7 == 0);Delay(20);KeyNumber = 2};
    if(P1_6 == 0){Delay(20);while(P1_6 == 0);Delay(20);KeyNumber = 6};
    if(P1_5 == 0){Delay(20);while(P1_5 == 0);Delay(20);KeyNumber = 10};
    if(P1_4 == 0){Delay(20);while(P1_4 == 0);Delay(20);KeyNumber = 14};

    P1 = 0xFF;
    P1_1 = 0;
    if(P1_7 == 0){Delay(20);while(P1_7 == 0);Delay(20);KeyNumber = 3};
    if(P1_6 == 0){Delay(20);while(P1_6 == 0);Delay(20);KeyNumber = 7};
    if(P1_5 == 0){Delay(20);while(P1_5 == 0);Delay(20);KeyNumber = 11};
    if(P1_4 == 0){Delay(20);while(P1_4 == 0);Delay(20);KeyNumber = 15};

    P1 = 0xFF;
    P1_0 = 0;
    if(P1_7 == 0){Delay(20);while(P1_7 == 0);Delay(20);KeyNumber = 4};
    if(P1_6 == 0){Delay(20);while(P1_6 == 0);Delay(20);KeyNumber = 8};
    if(P1_5 == 0){Delay(20);while(P1_5 == 0);Delay(20);KeyNumber = 12};
    if(P1_4 == 0){Delay(20);while(P1_4 == 0);Delay(20);KeyNumber = 16};

    return KeyNumber;
}

void main(){
    unsigned char KeyNum = 0;
    LED_Init();
    LED_ShowString(1,1,"MatrixKey:")
    while(1){
        if(KeyNumber){
            LED_ShowNum(2,1,KeyNumber,2);
        }
    }
}
;