51单片机的P1口接有8个LED,要求通过串口接收PC发送的指令。如果PC发送的是L,则控制流水灯向左流水;如果PC发送的是R,则控制流水灯向右流水。试用C语言编写相关程序
时间: 2024-02-25 09:59:50 浏览: 66
以下是一个简单的51单片机程序,实现了通过串口接收PC发送的指令,控制流水灯向左或向右流水。
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit L1 = P1^0;
sbit L2 = P1^1;
sbit L3 = P1^2;
sbit L4 = P1^3;
sbit L5 = P1^4;
sbit L6 = P1^5;
sbit L7 = P1^6;
sbit L8 = P1^7;
void delay(uint x) {
uint i, j;
for (i = x; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void main() {
uchar c;
TMOD = 0x20; // 定时器1工作在方式2,8位自动重装载模式
TH1 = 0xfd; // 波特率9600,定时器初值
TL1 = 0xfd; // 波特率9600,定时器初值
TR1 = 1; // 启动定时器1
SCON = 0x50; // 串口工作在方式1,允许接收
while (1) {
while (!RI); // 等待接收完成
c = SBUF; // 读取接收到的数据
RI = 0; // 清除接收标志位
if (c == 'L') { // 向左流水灯
L1 = 1;
delay(100);
L1 = 0;
L2 = 1;
delay(100);
L2 = 0;
L3 = 1;
delay(100);
L3 = 0;
L4 = 1;
delay(100);
L4 = 0;
L5 = 1;
delay(100);
L5 = 0;
L6 = 1;
delay(100);
L6 = 0;
L7 = 1;
delay(100);
L7 = 0;
L8 = 1;
delay(100);
L8 = 0;
} else if (c == 'R') { // 向右流水灯
L8 = 1;
delay(100);
L8 = 0;
L7 = 1;
delay(100);
L7 = 0;
L6 = 1;
delay(100);
L6 = 0;
L5 = 1;
delay(100);
L5 = 0;
L4 = 1;
delay(100);
L4 = 0;
L3 = 1;
delay(100);
L3 = 0;
L2 = 1;
delay(100);
L2 = 0;
L1 = 1;
delay(100);
L1 = 0;
}
}
}
```
假设我们使用的是串口助手发送指令,波特率设置为9600,数据位设置为8位,停止位设置为1位,无校验位。在发送指令之前需要打开串口助手并连接到相应的端口,然后输入指令即可。
阅读全文