51单片机P1口流水灯先聚拢再扩散代码
时间: 2023-06-01 14:04:22 浏览: 78
以下是51单片机P1口流水灯先聚拢再扩散的代码:
```c
#include <reg51.h>
#define LED_PORT P1
void delay(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 110; j++);
}
}
int main() {
unsigned int i;
LED_PORT = 0xFE;
while (1) {
for (i = 0; i < 3; i++) {
LED_PORT = ~(1 << i);
delay(100);
}
for (i = 1; i < 7; i++) {
LED_PORT = ~(0xFE >> i);
delay(100);
}
for (i = 0; i < 3; i++) {
LED_PORT = ~(0x04 << i);
delay(100);
}
for (i = 1; i < 7; i++) {
LED_PORT = ~(0x7F << i);
delay(100);
}
}
return 0;
}
```
解释一下代码:
- `delay()`函数是延时函数,用来控制流水灯每个LED亮的时间间隔,这里简单实现了一个粗略的延时函数。
- `LED_PORT`宏定义了LED灯所在的端口,这里是P1口。
- 程序开始时,先将P1口的输出全部置为1,即所有LED灯都不亮。
- 进入死循环,先往中间聚拢,再往两边扩散。
- 聚拢的过程,先让最左边的LED灯亮,再让中间的两个LED灯亮,循环3次。
- 扩散的过程,先让中间的4个LED灯亮,再让左边的3个LED灯亮,循环6次。
- 聚拢的过程,先让中间的两个LED灯亮,再让最右边的LED灯亮,循环3次。
- 扩散的过程,先让中间的4个LED灯亮,再让右边的3个LED灯亮,循环6次。
代码中的位运算符用来控制LED灯的亮灭,具体可以参考51单片机的位运算符使用方法。