#include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit ROW1 = P1^0; sbit ROW2 = P1^1; sbit ROW3 = P1^2; sbit ROW4 = P1^3; sbit COL1 = P1^4; sbit COL2 = P1^5; sbit COL3 = P1^6; sbit COL4 = P1^7; uchar code keyValue[4][4] = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}}; uchar keyCode = 0; void delay(uint t) { while(t--); } uchar getKeyCode() { uchar row, col; P1 |= 0xF0; while(1) { ROW1 = 0; if(!(P1 & 0x10)) { row = 0; break; } ROW2 = 0; if(!(P1 & 0x20)) { row = 1; break; } ROW3 = 0; if(!(P1 & 0x40)) { row = 2; break; } ROW4 = 0; if(!(P1 & 0x80)) { row = 3; break; } return 0xFF; } P1 &= 0x0F; while(1) { col = P1; if(col == 0x0F) continue; else break; } delay(1000); //消除抖动 col = P1; P1 |= 0xF0; if(col == 0xE0) return keyValue[row][0]; else if(col == 0xD0) return keyValue[row][1]; else if(col == 0xB0) return keyValue[row][2]; else if(col == 0x70) return keyValue[row][3]; else return 0xFF; } void main() { P1 = 0xFF; while(1) { keyCode = getKeyCode(); if(keyCode != 0xFF) { //处理按键 //... } } }解释意思
时间: 2024-01-28 16:03:20 浏览: 67
按矩阵键盘显示平方#include<reg52.h>
4星 · 用户满意度95%
这是一个基于51单片机的矩阵键盘扫描程序。代码中定义了4个行引脚和4个列引脚,使用了一个二维数组来存储键值。在主函数中不断调用getKeyCode函数扫描键盘,并根据返回的键值进行处理。其中getKeyCode函数实现了键盘的扫描过程,通过行列扫描的方式,检测到按键后返回对应的键值。整个程序中还包含了一些延时操作来消除按键抖动。
阅读全文