4x4矩阵键盘扫描

0
回复
209
查看
[ 复制链接 ]

38

主题

1

回帖

130

积分

管理员

积分
130
2025-6-30 08:45:27 显示全部楼层 阅读模式
4x4矩阵键盘扫描
🕹️ 硬件优化方案:
[backcolor=var(--ds-md-code-block-banner-wrap-background-color)][color=var(--dsr-text-2)]markdown
[color=var(--dsr-icon-fg-1)][color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

复制

[color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

下载





[接线图]:P1.0~P1.3 → 行线(接上拉电阻)P1.4~P1.7 → 列线(扫描输出)
⚡ 状态机扫描代码:
[backcolor=var(--ds-md-code-block-banner-wrap-background-color)][color=var(--dsr-text-2)]c
[color=var(--dsr-icon-fg-1)][color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

复制

[color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

下载





unsigned char Key_Scan() {    static unsigned char key_state = 0;    unsigned char col, row;        P1 = 0xF0; // 列线全低,行线上拉    if((P1 & 0x0F) != 0x0F) { // 有按键按下        switch(key_state) {            case 0: key_state = 1; break; // 消抖            case 1:                 col = P1 & 0x0F;                P1 = 0x0F; // 反转扫描方向                row = (~P1 >> 4) & 0x0F;                return (row << 4) | col;        }    } else {        key_state = 0;    }    return 0xFF; // 无按键}
📊 性能对比:
方案
扫描速度
抗干扰性

传统逐行扫描慢差
状态机扫描快3倍优秀



收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则