当前位置:   article > 正文

矩阵键盘+数码管动态显示_矩阵键盘输入8位数字,如生日、学号、国庆日期等,在8位数码管动态显示数字,当

矩阵键盘输入8位数字,如生日、学号、国庆日期等,在8位数码管动态显示数字,当

我把矩阵键盘和数码管动态显示综合起来写了个程序。这个代码的意思是在一开始8个数码管什么也不显示,因为p0的初始值是0x00,当我们按下矩阵按键里的按键时,8个数码管动态显示该按键的键值,直到按下了下一个按键,8个数码管显示的内容才可能改变。


  1. #include<reg52.h>//目的是每按下一个按键,8个数码管就动态显示对应的键值
  2. sbit lsa=P2^2;
  3. sbit lsb=P2^3;
  4. sbit lsc=P2^4;
  5. #define duanxuan P0
  6. #define keyboard P1
  7. int zxm[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  8. int x,y;
  9. void delay(int i)
  10. {
  11. while(i--);
  12. }
  13. void keyproc()
  14. {
  15. int a=0;
  16. P1=0x0f;//检测是哪一列有按键按下;
  17. if(P1!=0x0f)
  18. {
  19. delay(1000);
  20. if(P1!=0x0f)
  21. {
  22. P1=0x0f;
  23. switch(P1)
  24. {
  25. case(0x07):y=1;break;
  26. case(0x0b):y=2;break;
  27. case(0x0d):y=3;break;
  28. case(0x0e):y=4;break;
  29. }
  30. }
  31. P1=0xf0;//检测是哪一行有按键按下
  32. switch(P1)
  33. {
  34. case(0x70):x=1;break;
  35. case(0xb0):x=2;break;
  36. case(0xd0):x=3;break;
  37. case(0xe0):x=4;break;
  38. }
  39. P0=zxm[(x-1)*4+y-1];
  40. }
  41. }
  42. int main()
  43. {
  44. P0=0x00;
  45. while(1)
  46. {
  47. lsa=0;lsb=0;lsc=0;//位选选了第1个
  48. lsa=1;lsb=0;lsc=0;//位选选了第2个
  49. lsa=0;lsb=1;lsc=0;//位选选了第3个
  50. lsa=1;lsb=1;lsc=0;//位选选了第4个
  51. lsa=0;lsb=0;lsc=1;//位选选了第5个
  52. lsa=1;lsb=0;lsc=1;//位选选了第6个
  53. lsa=0;lsb=1;lsc=1;//位选选了第7个
  54. lsa=1;lsb=1;lsc=1;//位选选了第8个
  55. keyproc();
  56. }
  57. return 0;
  58. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号