)编程实现使用单片机 U1 通过串行口 TXD,将数码管 1、2、3、4 共四 个数字的字型码以方式 1 循环发送至单片机 U2 的 RXD,并由 RXD 控制 P1 口 上的数码管进行显示。
时间: 2024-03-05 10:53:42 浏览: 127
好的,我理解您的问题是需要一个具体的编程实现方案。以下是一个基本的方案:
发送端程序:
```C
#include <reg52.h>
sbit TXD = P3^1; // 串口发送引脚
unsigned char num[4] = {0xC0, 0xF9, 0xA4, 0xB0}; // 数字 0~3 的字型码
void send_data(unsigned char dat) {
SBUF = dat;
while(!TI);
TI = 0;
}
void main() {
unsigned char i = 0;
TMOD = 0x20; // 设置定时器模式为 8 位自动重装载
TH1 = 0xFD; // 波特率 9600,晶振 11.0592MHz
TL1 = TH1;
PCON = 0x00; // 波特率不加倍
SCON = 0x50; // 设置串口工作模式为模式 1(8 位数据,可变波特率)
TR1 = 1; // 启动定时器 1
while(1) {
send_data(num[i]);
i = (i + 1) % 4;
DelayMs(100); // 延时 100ms,等待接收端处理完毕
}
}
```
接收端程序:
```C
#include <reg52.h>
sbit RXD = P3^0; // 串口接收引脚
sbit P1_0 = P1^0; // 数码管第一位控制引脚
sbit P1_1 = P1^1; // 数码管第二位控制引脚
sbit P1_2 = P1^2; // 数码管第三位控制引脚
sbit P1_3 = P1^3; // 数码管第四位控制引脚
sbit DIO = P2^0; // 数码管数据引脚
sbit CLK = P2^1; // 数码管时钟引脚
void recv_data() interrupt 4 {
unsigned char dat;
if(RI) { // 接收到数据
RI = 0;
dat = SBUF;
// 将接收到的数据显示到数码管上
DIO = dat;
CLK = 1;
CLK = 0;
}
}
void main() {
TMOD = 0x20; // 设置定时器模式为 8 位自动重装载
TH1 = 0xFD; // 波特率 9600,晶振 11.0592MHz
TL1 = TH1;
PCON = 0x00; // 波特率不加倍
SCON = 0x50; // 设置串口工作模式为模式 1(8 位数据,可变波特率)
TR1 = 1; // 启动定时器 1
ES = 1; // 允许串口中断
EA = 1; // 开启总中断
while(1) {
P1_0 = 1;
DIO = 0;
CLK = 1;
CLK = 0;
P1_0 = 0;
DelayMs(1); // 延时 1ms,控制数码管亮度
}
}
```
以上程序仅为参考,具体实现方式可能会有所不同,需要根据实际情况进行调整。希望能对您有所帮助!
阅读全文