1 矩阵按键
1.1 需求描述
本案例实现以下功能:按下矩阵按键SW5到SW20,数码管会显示对应的按键编号。
1.2 硬件设计
1.2.1 硬件原理图
1.2.2 矩阵按键原理
1.3软件设计
1)Int_MatrixKeyboard.h
在项目的Int目录下创建Int_MatrixKeyboard.h,写入以下内容。
#ifndef __INT_MATRIXKEYBOARD_H__
#define __INT_MATRIXKEYBOARD_H__
#include "Util.h"
/**
?* @brief 查看是否有矩阵按键被按下
?*
?* @return u8 返回被按下的按键编号,没有按键被按下返回0
?*/
u8 Int_MatrixKeyboard_CheckKey();
#endif
2)Int_MatrixKeyboard.c
在项目的Int目录下创建Int_MatrixKeyboard.c,写入以下内容。
#include "Int_MatrixKeyboard.h"
#include <STC89C5xRC.H>
#define KEYIN P2
u8 Int_MatrixKeyboard_CheckKey()
{
// 将P20 置为 0 ;则P27 - P20分别为1111 1110 0xFE
KEYIN = 0xFE;
// SW5 按下 ;则P27 - P20分别为1110 1110 0xEE
if (KEYIN == 0xEE) {
// 消前抖
Com_Util_Delay1ms(10);
if (KEYIN == 0xEE) {
// SW5 已经被按下等待抬起
while (1) {
if (KEYIN == 0xFE) {
// 消后抖
Com_Util_Delay1ms(10);
if (KEYIN == 0xFE) {
return 5;
}
}
}
}
}
// SW6 按下 ;则P27 - P20分别为1101 1110 0xDE
if (KEYIN == 0xDE) {
// 消前抖
Com_Util_Delay1ms(10);
if (KEYIN == 0xDE) {
// SW5 已经被按下等待抬起
while (1) {
if (KEYIN == 0xFE) {
// 消后抖
Com_Util_Delay1ms(10);
if (KEYIN == 0xFE) {
return 6;
}
}
}
}
}
// SW7 按下 ;则P27 - P20分别为1011 1110 0xBE
if (KEYIN == 0xBE) {
// 消前抖
Com_Util_Delay1ms(10);
if (KEYIN == 0xBE) {
// SW5 已经被按下等待抬起
while (1) {
if <