当前位置:   article > 正文

51单片机矩阵键盘——数码管显示_矩阵键盘控制数码管显示

矩阵键盘控制数码管显示

 1.前言

当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了。

1.1实验现象

按下矩阵键盘S1并松开,数码管第一位(LED8)显示0;按下矩阵键盘S2并松开,数码管第一位显示1;...按下矩阵键盘S16并松开,数码管第一位显示F;

1.2工作原理

矩阵键盘扫描(输入扫描)
    原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果

https://blog.csdn.net/YLG_lin/article/details/126429384?utm_source=app&app_version=5.3.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

数码管的显示(位选,段选)

https://blog.csdn.net/YLG_lin/article/details/126406076?utm_source=app&app_version=5.3.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

2.源码

  1. #include<regx52.h>
  2. //数码管段码表,123456789AbcdEF;
  3. unsigned char Table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  4. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  5. void Delay(unsigned int xms)//延时函数
  6. {
  7. unsigned char i, j;
  8. while(xms--)
  9. {
  10. i = 2;
  11. j = 239;
  12. do
  13. {
  14. while (--j);
  15. } while (--i);
  16. }
  17. }
  18. unsigned char MatrixKey()//按键扫描(逐列扫描)
  19. {
  20. unsigned char KeyNumber=0;
  21. P1=0xFF;
  22. P1_3=0;
  23. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}
  24. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
  25. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
  26. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
  27. P1=0xFF;
  28. P1_2=0;
  29. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
  30. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
  31. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
  32. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
  33. P1=0xFF;
  34. P1_1=0;
  35. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
  36. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
  37. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
  38. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
  39. P1=0xFF;
  40. P1_0=0;
  41. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
  42. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
  43. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
  44. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
  45. return KeyNumber;
  46. }
  47. void Xian_Shi(KeyNum)
  48. {
  49. P2_4=1;P2_3=1;P2_2=1;//选中第一位(LED8)
  50. P0=Table[KeyNum-1]; //数字的首元素为Table[0];
  51. Delay(1);
  52. }
  53. void main()
  54. {
  55. while(1)
  56. {
  57. unsigned char KeyNum=MatrixKey();//不断循环扫描
  58. if(KeyNum) //判断是否有按键按下,如果有就显示
  59. {
  60. Xian_Shi(KeyNum);
  61. }
  62. }
  63. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/408839
推荐阅读
相关标签
  

闽ICP备14008679号