51单片机仿真用串口通信实现发字母s实现数码管设置时间为120001
时间: 2023-11-27 20:01:07 浏览: 44
要使用51单片机仿真进行串口通信,实现发字母s并设置数码管显示时间为120001,首先需要编写一段代码。下面是一个简单的示例代码:
```c
#include <reg51.h>
#include <stdio.h>
#define FOSC 11059200UL
#define BAUD 9600
#define BPS (FOSC / 16 / BAUD - 1)
sbit D0 = P0^0;
sbit D1 = P0^1;
sbit D2 = P0^2;
sbit D3 = P0^3;
sbit D4 = P0^4;
sbit D5 = P0^5;
sbit D6 = P0^6;
sbit D7 = P0^7;
void delay(unsigned int ms);
void main()
{
TMOD = 0x20; // 设置定时器1工作在定时器模式2
TH1 = BPS; // 设置波特率
TL1 = BPS;
PCON = 0x00; // 波特率不倍增
TR1 = 1; // 启动定时器1
REN = 1; // 允许串口接收
SM0 = 0;
SM1 = 1; // 串口工作在模式1,允许9位数据发送和接收并使用波特率发生器
while (1)
{
if (RI)
{
RI = 0;
if (SBUF == 's') // 接收到字母s时执行以下内容
{
D0 = 0; // 控制数码管的引脚
D1 = 0;
D2 = 1;
D3 = 2;
D4 = 0;
D5 = 0;
D6 = 0;
D7 = 1;
delay(1000); // 延时1秒
D0 = 1;
D1 = 2;
D2 = 0;
D3 = 0;
D4 = 0;
D5 = 0;
D6 = 1;
D7 = 2;
delay(1000);
}
}
}
}
void delay(unsigned int ms)
{
unsigned int i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
```
这段代码使用定时器1来进行延时,并通过串口进行字母的接收。当接收到字母's'时,控制数码管的引脚输出数字120001,并使用延时函数delay进行延时。在最后的while循环中,程序会一直等待接收到字母's'。当接收到字母's'后,就会执行控制数码管的设置,并且延时1秒钟。然后再次进入while循环等待接收到字母's'。这样就实现了通过串口通信控制数码管显示时间为120001。