keyBoard.c

该博客介绍了一个使用C语言编写的矩阵键盘驱动程序,包括按键状态检测、按键扫描函数`keyScan()`和按键事件处理函数`keyDriver()`。通过定义按键引脚、映射表和状态数组,实现了按键的前沿触发,并对每个按键进行8点流水采样以提高稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <reg52.h>
#include "stdint.h"

sbit KEY_ROW_0 = P2^3;
sbit KEY_ROW_1 = P2^2;
sbit KEY_ROW_2 = P2^1;
sbit KEY_ROW_3 = P2^0;
sbit KEY_COL_0 = P2^4;
sbit KEY_COL_1 = P2^5;
sbit KEY_COL_2 = P2^6;
sbit KEY_COL_3 = P2^7;

code uint8_t keyCodeMap[4][4] = { //矩阵按键编号到标准键盘键码的映射表
    {0x31, 0x32, 0x33, 0x26}, //数字键1、数字键2、数字键3、向上键
    {0x34, 0x35, 0x36, 0x25}, //数字键4、数字键5、数字键6、向左键
    {0x37, 0x38, 0x39, 0x28}, //数字键7、数字键8、数字键9、向下键
    {0x30, 0x1B, 0x0D, 0x27}  //数字键0、ESC键、  回车键、 向右键
};
pdata uint8_t keyState[4][4] = {  //全部矩阵按键的当前状态
    {1, 1, 1, 1},  {1, 1, 1, 1},  {1, 1, 1, 1},  {1, 1, 1, 1}
};

extern void keyAction(uint8_t keyCode);

void keyDriver() {  //在主循环中调用
    uint8_t i, j;
    static uint8_t backup[4][4] = {   //矩阵按键上一次的状态
        {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}
    };

    for (i = 0; i < 4; i++)
        for (j = 0; j < 4; j++) //依次判断每
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值