51单片机驱动 矩阵键盘

连接方式为8-1顺序连接P1端口P10-P17,代码返回键值 0-15.

cpp 复制代码
// 矩阵键盘扫描
uchar key_scan(void)
{
    u8 key_value = 255;
    u8 row, col;
    
    // 设置P1.0-P1.3为输出,P1.4-P1.7为输入
    P1 = 0xF0;  // 1111 0000
    
    if((P1 & 0xF0) != 0xF0) {  // 有按键按下
        delay_ms(10);  // 消抖
        if((P1 & 0xF0) != 0xF0) {  // 确认按键按下
            // 逐行扫描
            for(row = 0; row < 4; row++) {
                P1 = ~(1 << row) | 0xF0;  // 将当前行置低,其他行置高
                
                // 检查列
                if((P1 & 0x10) == 0) col = 0;  // 第1列
                else if((P1 & 0x20) == 0) col = 1;  // 第2列
                else if((P1 & 0x40) == 0) col = 2;  // 第3列
                else if((P1 & 0x80) == 0) col = 3;  // 第4列
                else continue;
                
                // 计算键值
                key_value = row * 4 + col ;  // 键值从0开始
                
                // 等待按键释放
                while((P1 & 0xF0) != 0xF0);
                delay_ms(10);  // 消抖
                
 
                break;
            }
        }
    }
		return key_value;
}
相关推荐
科济管线制药IPD咨询17 分钟前
IPD的基础理论与框架——(四)矩阵型组织:打破部门壁垒,构建高效协同的底层
线性代数·矩阵
Psycho_MrZhang5 小时前
高等数学基础(向量矩阵及其创建和特殊的矩阵)
线性代数·矩阵
Always_away11 小时前
26考研|高等代数:λ-矩阵
笔记·学习·线性代数·矩阵
巷北夜未央12 小时前
矩阵方程$Ax=b$的初步理解.
线性代数·矩阵
苏荷水12 小时前
day12 leetcode-hot100-21(矩阵4)
算法·leetcode·矩阵
liuyang-neu12 小时前
力扣 74.搜索二维矩阵
算法·leetcode·矩阵
Yvonne爱编码15 小时前
JavaScript- 3.2 JavaScript实现不同显示器尺寸的响应式主题和页面
java·开发语言·前端·javascript·计算机外设·ecmascript
gantengsheng19 小时前
基于51单片机和8X8点阵屏、独立按键的飞行躲闪类小游戏
51单片机·小游戏·独立按键·普中开发板·甘腾胜·飞行躲闪类·点阵屏
苏荷水20 小时前
day12 leetcode-hot100-19(矩阵2)
算法·leetcode·矩阵
之之为知知20 小时前
数学笔记三:特殊矩阵
笔记·学习·线性代数·算法·职场和发展·矩阵·职场发展