Keil AT89C51单片机接收串口助手发送的字符串并转化为整数然后显示在数码管上的示例代码
时间: 2024-03-07 12:47:01 浏览: 143
以下是一个示例代码,可以实现Keil AT89C51单片机接收串口助手发送的字符串并转化为整数,然后将该整数显示在四位共阳数码管上。
```
#include <reg51.h>
sbit D1 = P2^0; // 数码管第一位
sbit D2 = P2^1; // 数码管第二位
sbit D3 = P2^2; // 数码管第三位
sbit D4 = P2^3; // 数码管第四位
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管显示0~9的编码
void delay(unsigned int i) // 延时函数
{
unsigned int j, k;
for(j = i; j > 0; j--)
for(k = 110; k > 0; k--);
}
void display(unsigned int num) // 数码管显示函数
{
unsigned int i, j, k;
unsigned char temp;
temp = num / 1000; // 取出千位数
D1 = 0; D2 = 1; D3 = 1; D4 = 1; // 第一位数码管亮
for(i = 0; i < 50; i++) // 延时
delay(1);
P0 = table[temp]; // 显示千位数
for(i = 0; i < 50; i++) // 延时
delay(1);
temp = (num % 1000) / 100; // 取出百位数
D1 = 1; D2 = 0; D3 = 1; D4 = 1; // 第二位数码管亮
for(i = 0; i < 50; i++) // 延时
delay(1);
P0 = table[temp]; // 显示百位数
for(i = 0; i < 50; i++) // 延时
delay(1);
temp = (num % 100) / 10; // 取出十位数
D1 = 1; D2 = 1; D3 = 0; D4 = 1; // 第三位数码管亮
for(i = 0; i < 50; i++) // 延时
delay(1);
P0 = table[temp]; // 显示十位数
for(i = 0; i < 50; i++) // 延时
delay(1);
temp = num % 10; // 取出个位数
D1 = 1; D2 = 1; D3 = 1; D4 = 0; // 第四位数码管亮
for(i = 0; i < 50; i++) // 延时
delay(1);
P0 = table[temp]; // 显示个位数
for(i = 0; i < 50; i++) // 延时
delay(1);
}
void main()
{
unsigned char ch, i;
unsigned int num = 0;
TMOD = 0x20; // 定时器1工作在方式2(自动重装载)
TH1 = 0xfd; // 波特率为9600bps
TL1 = 0xfd;
SCON = 0x50; // 串口工作在方式1
TR1 = 1; // 启动定时器1
while(1)
{
while(RI == 0); // 等待接收到一个字符
ch = SBUF; // 读取接收到的字符
if(ch == '\r') // 如果接收到回车符,则表示整个字符串接收完毕
{
display(num); // 在数码管上显示该整数
num = 0; // 清零,准备接收下一个整数
}
else // 如果还没有接收到回车符,则将接收到的字符转化为整数
{
num = num * 10 + ch - '0';
}
RI = 0; // 清除接收中断标志位
}
}
```
需要注意的是,本示例代码中假设串口助手发送的字符串中只包含一个整数,并且该整数不大于9999。如果需要处理更复杂的情况,可以根据具体需求进行修改。
阅读全文