2 矩阵键盘

就是把一堆按钮并联集中,以扫描的形式读取数据,以达到节省I/O口的目的
![[Pasted image 20250117160829.png]]

1. 读取按键编号至LCD

通过不断对I/O口读取电平值来进行扫描以实现识别按键的功能

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
#include <REGX52.H> #include "DELAY.h" unsigned int keyNumber; unsigned int martixKey() { 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; }
复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
#include "LCD1602.h" #include "martix.h" void main() { LCD_Init(); LCD_ShowString(1,1,"MartixKey"); while (1) { unsigned char reKeyNumber = martixKey(); if (reKeyNumber != 0) { /* code */ LCD_ShowNum(2,1,reKeyNumber,3); } } }

要注意变量数据类型的选择

2.矩阵键盘密码锁

在原先的基础上加入数值判断

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
#include "LCD1602.h" #include "martix.h" unsigned int reKeyNumber; unsigned int count; unsigned int password; void main() { LCD_Init(); LCD_ShowString(1,1,"Password?"); while (1) { reKeyNumber = martixKey(); if (reKeyNumber != 0) { if(reKeyNumber <= 10) { if (count <= 4) { password *= 10; password += reKeyNumber % 10; count++; } LCD_ShowNum(2,1,password,4); } if (reKeyNumber == 11) { if (password == 9876) { LCD_ShowString(1,12,"OK!"); password = 0; count = 0; LCD_ShowNum(2,1,password,4); } else { LCD_ShowString(1,12,"ERR"); } } if (reKeyNumber == 12) { password = 0; count = 0; LCD_ShowNum(2,1,password,4); } } } }
posted @   Lain_surime  阅读(2)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开