矩阵键盘常见的扫描方式就是一列一列扫描或者一行一行扫描,再或者就是交叉扫描,我们在这里采用一列一列扫描的方式,我们首先来看矩阵键盘在开发板上的原理图
此时我们只需要控制P10~P13依次将为0,来检测P14~P17之间谁为0,就可以知道是哪一个按键按下。
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"
void main()
{
unsigned char KeyNumber;
LCD_Init();
LCD_ShowString(1,1,"Hello World");
while(1)
{
if(KeyNumber=MatrixKey())
{
LCD_ShowNum(2,1,KeyNumber,2);
}
}
}
这就是主函数的代码
#include <REGX52.H>
#include "Delay.h"
unsigned char MatrixKey()
{
unsigned char KeyNumber = 0;
P1 = 0xFF;
P1_3 = 0;
if(P1_7 == 0){Delayms(20);while(P1_7 == 0);Delayms(20);KeyNumber=1;}
if(P1_6 == 0){Delayms(20);while(P1_6 == 0);Delayms(20);KeyNumber=5;}
if(P1_5 == 0){Delayms(20);while(P1_5 == 0);Delayms(20);KeyNumber=9;}
if(P1_4 == 0){Delayms(20);while(P1_4 == 0);Delayms(20);KeyNumber=13;}
P1 = 0xFF;
P1_2 = 0;
if(P1_7 == 0){Delayms(20);while(P1_7 == 0);Delayms(20);KeyNumber=2;}
if(P1_6 == 0){Delayms(20);while(P1_6 == 0);Delayms(20);KeyNumber=6;}
if(P1_5 == 0){Delayms(20);while(P1_5 == 0);Delayms(20);KeyNumber=10;}
if(P1_4 == 0){Delayms(20);while(P1_4 == 0);Delayms(20);KeyNumber=14;}
P1 = 0xFF;
P1_1 = 0;
if(P1_7 == 0){Delayms(20);while(P1_7 == 0);Delayms(20);KeyNumber=3;}
if(P1_6 == 0){Delayms(20);while(P1_6 == 0);Delayms(20);KeyNumber=7;}
if(P1_5 == 0){Delayms(20);while(P1_5 == 0);Delayms(20);KeyNumber=11;}
if(P1_4 == 0){Delayms(20);while(P1_4 == 0);Delayms(20);KeyNumber=15;}
P1 = 0xFF;
P1_0 = 0;
if(P1_7 == 0){Delayms(20);while(P1_7 == 0);Delayms(20);KeyNumber=4;}
if(P1_6 == 0){Delayms(20);while(P1_6 == 0);Delayms(20);KeyNumber=8;}
if(P1_5 == 0){Delayms(20);while(P1_5 == 0);Delayms(20);KeyNumber=12;}
if(P1_4 == 0){Delayms(20);while(P1_4 == 0);Delayms(20);KeyNumber=16;}
return KeyNumber;
}
这就是读取键值的函数体,将最终读取的键值,显示在LCD屏幕上。