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;
}
相关推荐
ZNineSun1 小时前
搜索二维矩阵II
矩阵·二分查找·二维矩阵
phoenix@Capricornus12 小时前
主成分分析(PCA)例题——给定协方差矩阵
线性代数·矩阵
西猫雷婶12 小时前
python学智能算法(十三)|机器学习朴素贝叶斯方法进阶-简单二元分类
开发语言·人工智能·python·深度学习·机器学习·矩阵·分类
iFulling15 小时前
【单片机】51单片机练习代码
单片机·嵌入式硬件·51单片机
一眼青苔16 小时前
vs code 如何开启按住ctrl和滚动鼠标来缩放字体大小
计算机外设
云云32119 小时前
轻量化社交管理方案:Skout与云手机的巧妙搭配
大数据·网络·游戏·智能手机·矩阵
iFulling19 小时前
【单片机】51单片机学习笔记
单片机·学习·51单片机
木尧大兄弟1 天前
Cubase 通过 MIDIPLUS MIDI 键盘进行走带控制的设置方法
计算机外设
lishaoan771 天前
Tensorflow基础之矩阵计算回顾及Tensorflow基础计算一
矩阵·tensorflow·变量·tensor·张量·variables
monicaaaaan1 天前
矩阵置零C++
c++·算法·矩阵