基于51单片机写按键控制流水灯
时间: 2023-10-03 22:07:01 浏览: 128
好的,下面是一段基于51单片机的按键控制流水灯的代码:
```c
#include <reg52.h> // 引入51单片机头文件
sbit LED1 = P2^0; // 定义LED1引脚,P2.0
sbit LED2 = P2^1; // 定义LED2引脚,P2.1
sbit LED3 = P2^2; // 定义LED3引脚,P2.2
sbit LED4 = P2^3; // 定义LED4引脚,P2.3
sbit KEY = P3^2; // 定义按键引脚,P3.2
void main() {
unsigned char flag = 0; // 定义标志变量,用于控制流水灯的移动
unsigned char i = 0; // 定义计数器变量,用于控制流水灯的亮灭
LED1 = LED2 = LED3 = LED4 = 0; // 将所有LED引脚设置为输出模式,并且初始化为低电平
KEY = 1; // 将按键引脚设置为输入模式,并且初始化为高电平
while (1) { // 进入主循环
if (KEY == 0) { // 如果按键被按下
flag++; // 标志变量自增1
if (flag > 3) { // 如果标志变量大于3,则重置为0,从头开始移动流水灯
flag = 0;
}
switch (flag) { // 根据标志变量的不同值,控制不同的流水灯效果
case 0: // LED1 -> LED2 -> LED3 -> LED4 -> LED1 ...
for (i = 0; i < 4; i++) {
switch (i) {
case 0:
LED1 = 1;
LED2 = LED3 = LED4 = 0;
break;
case 1:
LED2 = 1;
LED1 = LED3 = LED4 = 0;
break;
case 2:
LED3 = 1;
LED1 = LED2 = LED4 = 0;
break;
case 3:
LED4 = 1;
LED1 = LED2 = LED3 = 0;
break;
default:
break;
}
delay(200); // 延时一段时间,控制流水灯的移动速度
}
break;
case 1: // LED1 -> LED3 -> LED2 -> LED4 -> LED1 ...
for (i = 0; i < 4; i++) {
switch (i) {
case 0:
LED1 = 1;
LED2 = LED4 = 0;
LED3 = 1;
break;
case 1:
LED1 = LED4 = 0;
LED2 = 1;
LED3 = 1;
break;
case 2:
LED1 = LED3 = 0;
LED2 = 1;
LED4 = 1;
break;
case 3:
LED2 = LED3 = 0;
LED1 = 1;
LED4 = 1;
break;
default:
break;
}
delay(200);
}
break;
case 2: // LED1 -> LED4 -> LED3 -> LED2 -> LED1 ...
for (i = 0; i < 4; i++) {
switch (i) {
case 0:
LED1 = LED2 = LED3 = 0;
LED4 = 1;
break;
case 1:
LED1 = LED2 = 0;
LED3 = 1;
LED4 = 1;
break;
case 2:
LED1 = 0;
LED2 = LED3 = 1;
LED4 = 1;
break;
case 3:
LED2 = LED3 = LED4 = 0;
LED1 = 1;
break;
default:
break;
}
delay(200);
}
break;
case 3: // LED1 -> LED4 -> LED2 -> LED3 -> LED1 ...
for (i = 0; i < 4; i++) {
switch (i) {
case 0:
LED1 = LED2 = LED3 = 0;
LED4 = 1;
break;
case 1:
LED1 = LED3 = 0;
LED2 = 1;
LED4 = 1;
break;
case 2:
LED1 = LED4 = 0;
LED2 = 1;
LED3 = 1;
break;
case 3:
LED2 = LED4 = 0;
LED1 = 1;
LED3 = 1;
break;
default:
break;
}
delay(200);
}
break;
default:
break;
}
}
}
}
void delay(unsigned int time) { // 延时函数
unsigned int i, j;
for (i = 0; i < time; i++) {
for (j = 0; j < 125; j++);
}
}
```
这段代码中,我们定义了四个LED引脚`LED1`、`LED2`、`LED3`、`LED4`和一个按键引脚`KEY`,并将所有LED引脚设置为输出模式,并初始化为低电平;将按键引脚设置为输入模式,并初始化为高电平。在主循环中,我们不断读取按键的状态,并根据状态控制流水灯的亮灭。当按键被按下时,我们先将标志变量`flag`自增1,然后根据不同的标志变量的值,控制不同的流水灯效果。具体实现可以参考代码中的注释。最后,我们使用一个延时函数`delay()`来控制流水灯的移动速度。
阅读全文