1. #include <REGX52.H>
    2. #include "Delay.h"
    3. /**
    4. * @brief 矩阵键盘读取按键键码
    5. * @param 无
    6. * @retval KeyNumber 按下按键的键码值
    7. 如果按键按下不放,程序会停留在此函数,松手的一瞬间,返回按键键码,没有按键按下时,返回0
    8. */
    9. unsigned char MatrixKey()
    10. {
    11. unsigned char KeyNumber=0;
    12. P1=0xFF;
    13. P1_3=0;
    14. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}
    15. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
    16. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
    17. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
    18. P1=0xFF;
    19. P1_2=0;
    20. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
    21. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
    22. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
    23. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
    24. P1=0xFF;
    25. P1_1=0;
    26. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
    27. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
    28. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
    29. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
    30. P1=0xFF;
    31. P1_0=0;
    32. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
    33. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
    34. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
    35. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
    36. return KeyNumber;
    37. }
    1. void Delay(unsigned int xms)
    2. {
    3. unsigned char i, j;
    4. while(xms--)
    5. {
    6. i = 2;
    7. j = 239;
    8. do
    9. {
    10. while (--j);
    11. } while (--i);
    12. }
    13. }
    1. #include <REGX52.H>
    2. #include "Delay.h" //包含Delay头文件
    3. #include "LCD1602.h" //包含LCD1602头文件
    4. #include "MatrixKey.h" //包含矩阵键盘头文件
    5. unsigned char KeyNum;
    6. void main()
    7. {
    8. LCD_Init(); //LCD初始化
    9. LCD_ShowString(1,1,"MatrixKey:"); //LCD显示字符串
    10. while(1)
    11. {
    12. KeyNum=MatrixKey(); //获取矩阵键盘键码
    13. if(KeyNum) //如果有按键按下
    14. {
    15. LCD_ShowNum(2,1,KeyNum,2); //LCD显示键码
    16. }
    17. }
    18. }