#c++51单片机矩阵键盘输出的键值转化为1~15(十进制)在动态数码管显示
时间: 2024-02-06 07:12:07 浏览: 165
矩阵键盘键值在数码管上显示
好的,这个问题其实是前面提到的两个问题的结合,我会给出完整的代码实现。
首先,将矩阵键盘输出的键值转化为1~15(十进制)的代码不变,可以按照以下代码实现:
```c++
int row, col; // 用来存储行列值
int key_value; // 用来存储键值
int decimal_value; // 用来存储十进制值
// 读取行列值
row = read_row_value();
col = read_col_value();
// 计算键值
key_value = row * 4 + col + 1;
// 转化为十进制值
if (key_value <= 9) {
decimal_value = key_value;
} else {
decimal_value = key_value - 10 + 'A';
}
```
其中,`read_row_value()` 和 `read_col_value()` 函数是根据具体的硬件平台实现的读取行列值的函数。在这里,我们假设它们已经实现。
然后,将十进制数动态显示在数码管上的代码也不变,可以按照以下代码实现:
```c++
int digit[4]; // 各位数字
int digit_code[16] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; // 数码管显示的编码
// 将十进制数拆分为各位数字
digit[0] = decimal_value % 10;
digit[1] = decimal_value / 10 % 10;
digit[2] = decimal_value / 100 % 10;
digit[3] = decimal_value / 1000 % 10;
// 将各位数字转化为对应的数码管显示的编码
for (int i = 0; i < 4; i++) {
digit[i] = digit_code[digit[i]];
}
// 在数码管上显示各位数字
display_digit(digit);
```
其中,`display_digit()` 函数是根据具体的硬件平台实现的在数码管上显示数字的函数。在这里,我们假设它已经实现。
完整的代码如下:
```c++
int row, col; // 用来存储行列值
int key_value; // 用来存储键值
int decimal_value; // 用来存储十进制值
int digit[4]; // 各位数字
int digit_code[16] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; // 数码管显示的编码
// 读取行列值
row = read_row_value();
col = read_col_value();
// 计算键值
key_value = row * 4 + col + 1;
// 转化为十进制值
if (key_value <= 9) {
decimal_value = key_value;
} else {
decimal_value = key_value - 10 + 'A';
}
// 将十进制数拆分为各位数字
digit[0] = decimal_value % 10;
digit[1] = decimal_value / 10 % 10;
digit[2] = decimal_value / 100 % 10;
digit[3] = decimal_value / 1000 % 10;
// 将各位数字转化为对应的数码管显示的编码
for (int i = 0; i < 4; i++) {
digit[i] = digit_code[digit[i]];
}
// 在数码管上显示各位数字
display_digit(digit);
```
其中,`read_row_value()` 和 `read_col_value()` 函数是根据具体的硬件平台实现的读取行列值的函数,`display_digit()` 函数是根据具体的硬件平台实现的在数码管上显示数字的函数。在这里,我们假设它们都已经实现。
阅读全文