4×4 矩阵式键盘识别
[实验任务]
用 AT89S51 的并行口 P3 接 4×4 矩阵键盘,以 P3.0-P3.3 作输入线,以 P3.4
-P3.7 作输出线;在每一个数码管上显示每个按键的“0-F”序号。
[硬件电路]
[实验原理]
每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和 CPU 通信。键盘处理程序的任务是:确
定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断
开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并
行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软
件查表,查出该键的功能。
[C 语言源程序]
#include <reg52.h>
Unsigned char code
seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0
x8e };
unsigned char k;
void delay10ms(void) //延时程序
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void Getch ( )
{ unsigned char X,Y,Z;
P3=0xff;
P3=0x0f; //先对 P3 置数 行扫描
if(P3!=0x0f) //判断是否有键按下
{delay10ms(); //延时,软件去干扰
if(P3!=0x0f) //确认按键按下 X = P3;
{