矩阵键盘的扫描
实现代码(其实直接塞进去就ok)
库
matrixkey.c
#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;
}
matrixkey.h
#ifndef __MATRIXKEY_H__
#define __MATRIXKEY_H__
unsigned char Matrixkey();
#endif
unsigned char Matrixkey()作用是检测矩阵键盘的按键输入并返回相应的按键编号。具体来说,函数会逐列扫描矩阵键盘的四列(通过控制P1口的每一位),如果检测到按键按下(对应的引脚电平为低),就会返回该按键对应的编号(如1、5、9等)。函数返回的 KeyNumber 用于表示按下的键。
解释:
P1控制了矩阵键盘的四行,每行控制一个引脚的电平。Delay(20)用于防抖处理,防止按键按下时产生多次信号。while(P1_7==0)确保按键被按下时不再继续读取,直到松开。- 每个
if判断对应了按下某个键时的动作,设置相应的键编号。
Matrixkey 函数最终返回被按下的键的编号。
这个代码提供了以下函数:
-
Matrixkey()(在matrixkey.c中)- 作用:读取矩阵键盘的按键输入。它通过扫描不同的行来判断按下的键,并返回对应的按键编号。函数通过设置不同的行 (
P1_3,P1_2,P1_1,P1_0) 为低电平来触发按键检测,然后判断哪些列(P1_7,P1_6,P1_5,P1_4)被按下,最后返回按下的键的编号。
- 作用:读取矩阵键盘的按键输入。它通过扫描不同的行来判断按下的键,并返回对应的按键编号。函数通过设置不同的行 (
-
Delay(unsigned int x)(在Delay10.c中)- 作用:实现一个延时功能,单位为 12MHz 时钟下的循环次数。每次调用该函数会产生一个基于
x参数的延时。该延时用于按键扫描中的消抖(去除按键抖动)以及防止按键输入被重复识别。
- 作用:实现一个延时功能,单位为 12MHz 时钟下的循环次数。每次调用该函数会产生一个基于
这两 个函数是配合使用的,用于实现矩阵键盘的输入功能,并确保输入稳定性。