代码编写,使用51单片机开发板设置一个 16 进制数据(数据长度小于等于 5 位并以’h’字母结尾),并把该数据显示到数码显示管上,第二次输入的数据将替换之前的数据显示在数码管上,输入任意非 16 进制数据字符则清除显示内容(显示全 0)。
时间: 2024-02-19 10:58:42 浏览: 59
51单片机串口发送16进制数并在数码管上显示
好的,以下是一份基本的代码实现,仅供参考:
```c
#include <reg52.h>
#include <stdio.h>
#define DISPLAY P0 // 数码管端口
#define KEY P1 // 键盘输入端口
void display(unsigned char num);
void clear_display(void);
void main(void)
{
unsigned char input[6] = "00000h"; // 存储输入数据
unsigned char i = 0; // 输入数据的位数
unsigned char ch; // 输入字符
clear_display();
while (1)
{
ch = KEY; // 读取键盘输入
// 判断是否为16进制字符
if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F'))
{
// 判断输入位数是否超过5位
if (i < 5)
{
input[i] = ch; // 保存输入数据
display(input[i]); // 显示输入数据
i++; // 位数加1
}
}
else
{
clear_display(); // 清空显示
i = 0; // 输入位数清零
}
// 判断是否输入'h'结束符
if (ch == 'h')
{
i = 0; // 位数清零
}
// 第二次输入时替换之前的数据
if (i == 0)
{
for (unsigned char j = 0; j < 5; j++)
{
display(input[j]); // 显示之前输入的数据
}
}
}
}
// 数码管显示函数
void display(unsigned char num)
{
switch (num)
{
case '0':
DISPLAY = 0x3F;
break;
case '1':
DISPLAY = 0x06;
break;
case '2':
DISPLAY = 0x5B;
break;
case '3':
DISPLAY = 0x4F;
break;
case '4':
DISPLAY = 0x66;
break;
case '5':
DISPLAY = 0x6D;
break;
case '6':
DISPLAY = 0x7D;
break;
case '7':
DISPLAY = 0x07;
break;
case '8':
DISPLAY = 0x7F;
break;
case '9':
DISPLAY = 0x6F;
break;
case 'A':
DISPLAY = 0x77;
break;
case 'B':
DISPLAY = 0x7C;
break;
case 'C':
DISPLAY = 0x39;
break;
case 'D':
DISPLAY = 0x5E;
break;
case 'E':
DISPLAY = 0x79;
break;
case 'F':
DISPLAY = 0x71;
break;
default:
DISPLAY = 0x00;
break;
}
}
// 清空数码管显示函数
void clear_display(void)
{
for (unsigned char i = 0; i < 5; i++)
{
DISPLAY = 0x00;
}
}
```
这份代码使用了键盘输入方式,将输入的数据存储在一个长度为6的数组中,其中第5位为'h'字母结尾。在输入过程中,判断输入字符是否为16进制字符,并将其保存到数组中。同时,通过判断输入位数是否超过5位,以及是否输入'h'字母结束符,控制输入数据的有效性。在第二次输入时,将之前输入的数据替换为新的数据。当输入的字符不为16进制字符时,清空显示内容。
阅读全文