当前位置:   article > 正文

矩阵键盘_矩阵键盘代码

矩阵键盘代码

今天我们来学习有关矩阵键盘的相关内容。

 这是矩阵键盘的电路图。可以看出矩阵键盘是按行按列来扫描的。在这里我们来进行按列扫描。首先我们可以设置P1=0XFF,为1111 1111,我们可以直接再设P1_3=0,这样就确定了第一列中选取,如果第一列中有按钮按下的话,此时该按钮为0,并让lcd显示相应的键盘对应的值就可以了。还需注意的是因为这是按钮,所以我们还需要消抖。因此代码便可以写为

  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. unsigned char MatrixKey()
  4. {
  5. unsigned char KeyNumber=0;
  6. P1=0XFF;
  7. P1_3=0;
  8. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}
  9. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
  10. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
  11. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
  12. P1=0XFF;
  13. P1_2=0;
  14. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
  15. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
  16. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
  17. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
  18. P1=0XFF;
  19. P1_1=0;
  20. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
  21. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
  22. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
  23. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
  24. P1=0XFF;
  25. P1_0=0;
  26. if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
  27. if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
  28. if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
  29. if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
  30. return KeyNumber;
  31. }

这样我们就实现了每一个按键对应的数字,最后其实现代码为

  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. #include "LCD1602.h"
  4. #include "MatrixKey.h"
  5. unsigned char KeyNum;
  6. void main()
  7. {
  8. LCD_Init();
  9. LCD_ShowString(1,1,"hello");
  10. while(1)
  11. {
  12. KeyNum=MatrixKey();
  13. if(KeyNum)
  14. {
  15. LCD_ShowNum(2,1,KeyNum,2);
  16. }
  17. }
  18. }

这样就实现了按按钮让对应的数字显示的功能。

学习了这个,我们还可以自己来设计一个密码锁的功能。首先我们设置一个四位数的密码,1-9对应数字1-9,10对应0,11对应确认,12对应退回。我们还需要两个变量,一个是密码password,一个是计数count。首先是输入密码的功能,我们只需要将输入的每个数比上10的模,再将原来的数乘十相加即可。另外还需要让计数++。

对于确认的功能,我们只需来个if判断,如果正确,便显示ok,如果错误显示err,并将password清零并且计数清零。

对于退回功能我们只需让密码/10就可以实现再将计数--就可以。

其完整代码为

  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. #include "LCD1602.h"
  4. #include "MatrixKey.h"
  5. unsigned char KeyNum;
  6. unsigned int Password,count=0;
  7. void main()
  8. {
  9. LCD_Init();
  10. LCD_ShowString(1,1,"PassWord!");
  11. while(1)
  12. {
  13. KeyNum=MatrixKey();
  14. if(KeyNum)
  15. {
  16. if(KeyNum<=10&&count<4)
  17. {
  18. Password*=10;
  19. Password+=KeyNum%10;
  20. count++;
  21. LCD_ShowNum(2,1,Password,4);
  22. }
  23. if(KeyNum==11)
  24. {
  25. if(Password==2345)
  26. {
  27. LCD_ShowString(1,13,"OK!");
  28. Password=0;
  29. count=0;
  30. LCD_ShowNum(2,1,Password,4);
  31. }
  32. else
  33. {
  34. LCD_ShowString(1,13,"ERR!");
  35. Password=0;
  36. count=0;
  37. LCD_ShowNum(2,1,Password,4);
  38. }
  39. }
  40. if(KeyNum==12)
  41. {
  42. Password/=10;
  43. count--;
  44. LCD_ShowNum(2,1,Password,4);
  45. }
  46. }
  47. }
  48. }

这样我们就实现了密码锁的功能。

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

闽ICP备14008679号