这次我们来了解矩阵键盘

可以看到矩阵键盘和独立键盘是大同小异的,矩阵键盘就是由四个独立键盘组成的4*4的矩阵,才用共阴极共阳极的工作原理。所以控制其工作的代码也与独立键盘类似
#include <REGX52.H>
#include "Delay.h"
unsigned char MatrixKey()
{
unsigned char 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;
}再结合前面所介绍的lcd1602模块可以实现按键控制显示对应的数字以及键盘密码锁的功能
按键显示数字的主程序
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
#include "MatrixKey.h"
unsigned char KeyNum;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"hello word");
while(1)
{
KeyNum=MatrixKey();
if(KeyNum)
{
LCD_ShowNum(2,1,KeyNum,2);
}
}
}使用了模块化编程,在引入了头文件后可以直接使用其相应的功能函数
再按下第6号按键时在lcd1602上显示06

实现矩阵键盘密码锁功能的代码
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
#include "MatrixKey.h"
unsigned char KeyNum;
unsigned int Password,Count;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"Password");
while(1)
{
KeyNum=MatrixKey();
if(KeyNum)
{
if(KeyNum<=10)
{
if(Count<4)
{
Password=Password*10;
Password=Password+KeyNum%10;
Count++;
}
LCD_ShowNum(2,1,Password,4);
}
if(KeyNum==11)
{
if(Password==2345)
{
LCD_ShowString(1,14," OK");
Password=Count=0;
LCD_ShowNum(2,1,Password,4);
}
else
{
LCD_ShowString(1,14,"ERR");
Password=Count=0;
LCD_ShowNum(2,1,Password,4);
}
}
if(KeyNum==12)
{
Password=Password/10;
Count--;
LCD_ShowNum(2,1,Password,4);
}
}
}
}设置从1号键到10号键代表数字1-0,11号键表示确认,12号为清除。
密码初始为2345,正确显示0k,错误显示ERR。
WeChat_20220727173208
版权声明:本文为weixin_68131472原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。