51串口通信并且在数码管显示的代码
时间: 2024-03-03 12:53:38 浏览: 78
以下是一个在51单片机上实现串口通信并在数码管上显示接收到的字符的示例代码:
```c
#include <reg51.h>
#define FOSC 11059200L
#define BAUD 9600
#define TH1 (256 - FOSC / 12 / BAUD)
typedef unsigned char uchar;
sbit LSA = P2 ^ 2;
sbit LSB = P2 ^ 3;
sbit LSC = P2 ^ 4;
uchar code smgduan[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void delayms(uint ms) {
uint i, j;
for (i = ms; i > 0; i--)
for (j = 114; j > 0; j--);
}
void init_serial() {
TMOD |= 0x20;
TH1 = TL1 = TH1;
TR1 = 1;
SCON = 0x50;
ES = 1;
EA = 1;
}
void serial_isr() interrupt 4 {
if (RI) {
RI = 0;
P0 = SBUF;
}
}
void display(uchar num) {
uchar i;
LSA = 0;
LSB = 0;
LSC = 0;
P0 = smgduan[num];
for (i = 0; i < 100; i++);
}
void main() {
uchar num = 0;
init_serial();
while (1) {
display(num);
num++;
if (num > 9) {
num = 0;
}
delayms(500);
}
}
```
这个代码使用了一个中断来接收串口数据,并将接收到的数据显示在P0口上(通过连接到数码管驱动芯片)。串口的波特率为9600,单片机的晶振频率为11.0592MHz。在主循环中,程序循环显示0-9的数字,并在每个数字之间延迟500毫秒。
阅读全文