51单片机驱动 矩阵键盘
连接方式为8-1顺序连接P1端口P10-P17,代码返回键值 0-15.
// 矩阵键盘扫描
uchar key_scan(void)
{u8 key_value = 255;u8 row, col;// 设置P1.0-P1.3为输出,P1.4-P1.7为输入P1 = 0xF0; // 1111 0000if((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;
}