Stc89c52UART串口通信控制数码管显示1时亮灯0时灭灯的代码
时间: 2024-01-01 11:05:53 浏览: 36
以下是基于STC89C52单片机和UART串口通信控制数码管显示1时亮灯0时灭灯的代码:
```c
#include <reg52.h> // STC89C52头文件
sbit LED = P1^0; // 定义P1.0口控制LED灯
sbit DIO = P2^0; // 定义P2.0口控制数码管数据线
sbit CLK = P2^1; // 定义P2.1口控制数码管时钟线
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for (i = t; i > 0; i--)
for (j = 100; j > 0; j--);
}
void send_byte(unsigned char dat) // 发送字节数据到数码管
{
unsigned char i;
for (i = 0; i < 8; i++)
{
CLK = 0;
DIO = dat & 0x01;
dat >>= 1;
CLK = 1;
}
}
void main()
{
unsigned char ch;
TMOD = 0x20; // 设置定时器1为模式2,8位自动重装载
TH1 = 0xfd; // 波特率设置为9600
TL1 = 0xfd;
SCON = 0x50; // 设置UART为模式1,允许接收数据
TR1 = 1; // 启动定时器1
ES = 1; // 允许串口中断
EA = 1; // 允许总中断
while (1)
{
if (LED) // 如果LED灯亮,则显示1
{
send_byte(0x3f); // 发送0b00111111给数码管
}
else // 如果LED灯灭,则显示0
{
send_byte(0x06); // 发送0b00000110给数码管
}
delay(100); // 延时一段时间
}
}
void ser() interrupt 4 // 定义串口中断服务函数
{
if (RI) // 如果收到数据
{
RI = 0; // 清除接收标志位
ch = SBUF; // 读取数据
if (ch == '1') // 如果收到1,则点亮LED灯
{
LED = 1;
}
else if (ch == '0') // 如果收到0,则熄灭LED灯
{
LED = 0;
}
}
}
```
以上代码将UART串口设置为模式1,允许接收数据。当接收到字符'1'时,点亮P1.0口的LED灯,同时数码管显示1;当接收到字符'0'时,熄灭LED灯,同时数码管显示0。通过定时器和延时函数实现数码管的动态显示。