51单片机用串口控制流水灯及使用方法
时间: 2024-02-05 22:11:18 浏览: 223
要用51单片机控制串口流水灯,需要以下步骤:
1. 首先需要准备好51单片机的开发环境,例如Keil或者SDCC等。
2. 然后需要连接好串口,将串口的TX和RX分别连接到单片机的P3.1和P3.0引脚上。
3. 接着需要写好串口通信的代码,用来接收PC端发送的指令。具体的代码可以参考如下:
```c
#include <reg51.h>
#include <stdio.h>
#define FOSC 11059200L
#define BAUD 9600
#define TIMER_1MS (65536-FOSC/12/1000)
typedef unsigned char byte;
typedef unsigned int word;
sbit LED1 = P1^0;
sbit LED2 = P1^1;
void init_serial() {
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = TIMER_1MS / BAUD;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
}
void send_byte(byte dat) {
SBUF = dat;
while(!TI);
TI = 0;
}
byte receive_byte() {
while(!RI);
RI = 0;
return SBUF;
}
void main() {
byte ch;
init_serial();
while(1) {
ch = receive_byte();
if(ch == '1') {
LED1 = 1;
LED2 = 0;
}
else if(ch == '2') {
LED1 = 0;
LED2 = 1;
}
else if(ch == '3') {
LED1 = 1;
LED2 = 1;
}
else if(ch == '4') {
LED1 = 0;
LED2 = 0;
}
}
}
```
这段代码实现了串口初始化,以及接收PC端发送的指令,并根据指令控制LED灯的亮灭。
4. 接下来需要编写流水灯的代码。具体的代码可以参考如下:
```c
#include <reg51.h>
typedef unsigned char byte;
typedef unsigned int word;
sbit LED1 = P1^0;
sbit LED2 = P1^1;
void delay(word i) {
while(i--);
}
void main() {
byte i;
while(1) {
for(i=0; i<8; i++) {
LED1 = i & 0x01;
LED2 = (i>>1) & 0x01;
delay(50000);
}
}
}
```
这段代码实现了一个简单的流水灯效果,LED1和LED2分别控制两个LED灯的亮灭。
5. 最后将流水灯的代码和串口通信的代码合并即可。将PC端发送的指令与流水灯的代码结合,即可实现通过串口控制流水灯的效果。
阅读全文