AT89C51单片机将串口助手发送的字符串转化为整数并储存,将其转化为十六进制显示在两位数码管上的keil程序
时间: 2023-11-19 08:05:00 浏览: 101
下面是一个AT89C51单片机将串口助手发送的字符串转化为整数并储存,并将其转化为十六进制显示在两位数码管上的Keil程序:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1 = P1^0; // 数码管第一位
sbit D2 = P1^1; // 数码管第二位
uchar hexTable[] = "0123456789ABCDEF"; // 十六进制转换表
void delay(uint t)
{
uint i;
while(t--)
{
for(i = 0; i < 100; i++);
}
}
void initUART()
{
TMOD |= 0x20; // 设置定时器1为模式2
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD; // 波特率9600
SCON = 0x50; // 8位数据,可变波特率
TR1 = 1; // 启动定时器1
}
uchar hexToChar(uchar hex)
{
if(hex >= 0 && hex <= 15)
{
return hexTable[hex];
}
else
{
return ' ';
}
}
void displayHex(uint num)
{
D1 = hexToChar(num >> 4);
D2 = hexToChar(num & 0x0F);
}
void main()
{
uchar input[4];
uint num;
uchar i;
initUART(); // 初始化串口
while(1)
{
if(RI) // 接收到数据
{
RI = 0;
for(i = 0; i < 4; i++) // 读取四个字符
{
input[i] = SBUF;
while(!RI); // 等待接收完毕
RI = 0;
}
num = ((input[0] - '0') * 1000) + ((input[1] - '0') * 100) + ((input[2] - '0') * 10) + (input[3] - '0'); // 转换为整数
displayHex(num); // 显示十六进制数
}
}
}
```
这个程序的主要思路是:
1. 初始化串口,设置波特率为9600。
2. 循环读取4个字符,将其转换为整数。
3. 将整数转换为十六进制,并在两位数码管上显示。
阅读全文