串口数据接收并显示在数码管
时间: 2024-02-22 20:59:57 浏览: 143
uart接收数据然后用数码管显示的verilog代码
好的,下面是STC89C52RC的C语言代码,实现串口数据接收并显示在数码管上:
```c
#include <reg52.h> //包含STC89C52RC芯片的头文件
#define uchar unsigned char //定义uchar为无符号字符型
sbit LATCH=P2^2; //定义LATCH锁存器接口
sbit SCLK=P2^1; //定义SCLK时钟接口
sbit DS=P2^0; //定义DS数据接口
uchar code LedChar[]={ //定义数码管显示字符集
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71
};
void delay_ms(unsigned int i) //延时函数,单位毫秒(ms)
{
unsigned int j,k;
for(j=0;j<i;j++)
for(k=0;k<125;k++);
}
void Write595(uchar dat) //595写入数据函数
{
uchar i;
for(i=0;i<8;i++)
{
SCLK=0; //SCLK置0
if(dat&0x80)
DS=1; //DS置1
else
DS=0; //DS置0
dat<<=1;
SCLK=1; //SCLK置1
}
LATCH=0; //LATCH置0
LATCH=1; //LATCH置1,595输出数据
}
void UartInit() //串口初始化函数
{
TMOD=0x20; //设置定时器1工作在模式2,8位定时器,自动重装载
TH1=0xfd; //设置定时器1初值,波特率为9600bps
TL1=0xfd;
TR1=1; //启动定时器1
SM0=0; //设置串口工作在模式1,8位数据,波特率可变
SM1=1;
REN=1; //启用串口接收
EA=1; //开启总中断
ES=1; //开启串口中断
}
void Uart() interrupt 4 //串口中断函数
{
static uchar i;
if(RI)
{
RI=0; //接收到数据,RI置0
i=SBUF; //将接收到的数据存入i中
Write595(LedChar[i-'0']); //将i对应的数码管显示字符写入595
}
}
void main()
{
UartInit(); //串口初始化
Write595(0x00); //数码管初始化,全部清0
while(1);
}
```
代码中使用了一个595芯片作为数码管的驱动器,并且定义了一个数码管显示字符集`LedChar`。在`Write595()`函数中,使用了三个引脚`LATCH`、`SCLK`、`DS`来控制595芯片的工作,将要显示的字符写入595芯片中。在串口中断处理函数`Uart()`中,使用了`SBUF`寄存器来接收串口发送的数据,将接收到的数据对应的数码管显示字符写入595芯片中,实现串口数据接收并在数码管上显示的功能。
阅读全文