51单片机发八个数码管内容给电脑串口显示
时间: 2024-02-16 15:00:31 浏览: 151
以下是基于STC89C52单片机编写的示例代码,实现将8个数码管上显示的内容通过串口发送给电脑进行显示:
```C
#include <reg52.h>
#define FOSC 18432000L
#define BAUD 9600
#define TIMER_1MS_RELOAD_VALUE (65536-FOSC/1000)
sbit LATCH = P2^2;
sbit DATA = P2^0;
sbit CLK = P2^1;
void init_uart();
void uart_send_byte(unsigned char byte);
void uart_send_string(unsigned char *str);
void delay(unsigned int ms);
void display(unsigned char *data);
void main()
{
unsigned char data[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
init_uart();
TMOD = 0x10;
TH1 = TL1 = TIMER_1MS_RELOAD_VALUE / 256;
TR1 = 1;
while(1)
{
display(data);
uart_send_string(data);
delay(1000);
}
}
void init_uart()
{
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/32/BAUD);
TR1 = 1;
}
void uart_send_byte(unsigned char byte)
{
SBUF = byte;
while(TI == 0);
TI = 0;
}
void uart_send_string(unsigned char *str)
{
while(*str)
{
uart_send_byte(*str++);
}
}
void delay(unsigned int ms)
{
unsigned int i, j;
for(i = ms; i > 0; i--)
{
for(j = 100; j > 0; j--);
}
}
void display(unsigned char *data)
{
unsigned char i;
LATCH = 0;
for(i = 0; i < 8; i++)
{
DATA = data[i];
CLK = 0;
CLK = 1;
}
LATCH = 1;
}
```
其中,`init_uart()` 函数用于初始化串口;`uart_send_byte()` 函数用于发送一个字节数据;`uart_send_string()` 函数用于发送一个字符串;`delay()` 函数用于延时;`display()` 函数用于将8个数码管上的数据进行显示。
在 `main()` 函数中,首先定义了一个数组 `data` 存储8个数码管上的数据,然后在一个无限循环中,调用 `display()` 函数将数据进行显示,然后调用 `uart_send_string()` 函数将数据通过串口发送给电脑进行显示,最后延时1秒钟。
需要注意的是,本示例代码中使用的是波特率为9600的串口通信,因此在电脑端接收数据时,需要设置相应的波特率才能正确接收到数据。
阅读全文