#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); } } }