c51单片机用一位八段共阴数码管显示4×4矩阵键盘的输入数的接线说明和c程序
时间: 2024-05-14 07:15:31 浏览: 107
以下是c51单片机使用一位八段共阴数码管显示4×4矩阵键盘输入数的接线说明和c程序:
接线说明:
- P0口接八段数码管的段选引脚。
- P1口接八段数码管的位选引脚。
- P2口接4x4矩阵键盘的列引脚。
- P3口接4x4矩阵键盘的行引脚。
C程序:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = { // 数码管显示0-9的值
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
void delay(uint i) { // 延时函数
while (i--);
}
uchar key_scan() { // 键盘扫描函数
uchar row, col;
uchar code[] = {0xEE, 0xED, 0xEB, 0xE7}; // 行扫描码
uchar data[] = {0xDE, 0xBD, 0x7B, 0x0F}; // 列数据
P2 = 0xFF; // 列输入模式
for (col = 0; col < 4; col++) {
P2 = code[col];
delay(100); // 延时等待稳定
row = P2 & 0x0F;
if (row != 0x0F) {
P2 = 0xFF; // 恢复列输入模式
return data[col*4 + row];
}
}
P2 = 0xFF; // 恢复列输入模式
return 0xFF;
}
void main() {
uchar num = 0;
while (1) {
num = key_scan(); // 获取键盘输入的数值
P0 = table[num]; // 显示在数码管上
P1 = 0xFE; // 第1位数码管选通
delay(1000);
P1 = 0xFD; // 第2位数码管选通
delay(1000);
P1 = 0xFB; // 第3位数码管选通
delay(1000);
P1 = 0xF7; // 第4位数码管选通
delay(1000);
}
}
```
程序实现的功能是:通过4x4矩阵键盘输入数值,并在一位八段共阴数码管上进行显示。具体实现是通过键盘扫描函数获取键盘输入的数值,然后将数值转换成相应的数码管显示值,并通过位选引脚依次选通每一位数码管进行显示。
阅读全文