Skip to main content

矩阵键盘的扫描

实现代码(其实直接塞进去就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 用于表示按下的键。

解释:

  1. P1 控制了矩阵键盘的四行,每行控制一个引脚的电平。
  2. Delay(20) 用于防抖处理,防止按键按下时产生多次信号。
  3. while(P1_7==0) 确保按键被按下时不再继续读取,直到松开。
  4. 每个 if 判断对应了按下某个键时的动作,设置相应的键编号。

Matrixkey 函数最终返回被按下的键的编号。


这个代码提供了以下函数:

  1. Matrixkey() (在 matrixkey.c 中)

    • 作用:读取矩阵键盘的按键输入。它通过扫描不同的行来判断按下的键,并返回对应的按键编号。函数通过设置不同的行 (P1_3, P1_2, P1_1, P1_0) 为低电平来触发按键检测,然后判断哪些列(P1_7, P1_6, P1_5, P1_4)被按下,最后返回按下的键的编号。
  2. Delay(unsigned int x) (在 Delay10.c 中)

    • 作用:实现一个延时功能,单位为 12MHz 时钟下的循环次数。每次调用该函数会产生一个基于 x 参数的延时。该延时用于按键扫描中的消抖(去除按键抖动)以及防止按键输入被重复识别。

这两个函数是配合使用的,用于实现矩阵键盘的输入功能,并确保输入稳定性。

流程图

逻辑流程

时序流程