之前的原代码,一直循环啊
51单片机用三种方法实现流水灯
如有帮助,望采纳
https://blog.csdn.net/qq_51029592/article/details/119038052
下面是一段修改后的C语言代码,它能够实现51单片机的流水灯效果,并通过4个独立的按键来控制LED灯的亮灭。望采纳
#include "STC8A8K64D4.H"
#include "intrins.h"
// 定义延时函数
void Delay500ms()
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 154;
k = 122;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main()
{
// 定义变量
int i = 0;
int count = 0;
int j = 0;
unsigned char keys = 0;
// 设置P1口为输出模式
P1M1 = 0;
P1MO = 0;
// 循环两次
for (j = 0; j < 2; j++)
{
for(i=0;i<8;i++){
P1=~(0x01<<);
// 延时
Delay500ms();
}
}
while(1){
// 读取按键状态
keys = P0;
// 根据按键状态更新LED灯状态
switch (keys)
{
case 0x01:
P1 = 0x01; // 亮一个LED灯
break;
case 0x02:
P1 = 0x03; // 亮两个LED灯
break;
case 0x04:
P1 = 0x07; // 亮三个LED灯
break;
case 0x08:
P1 = 0x0f; // 亮四个LED灯
break;
default:
P1 = 0x00; // 没有按键按下,则所有的LED灯都灭
break;
}
// 延时
Delay500ms();
}
return 0;
}
如果要对这段代码进行修改,可以改变循环的次数,改变每次循环的延时时间,或者改变按键和LED灯的对应关系等。
修改你的main函数里面的while循环啊,进入while循环之前先流水灯两次,把按键检测放在while循环里面,检测到那个按键点亮或熄灭对应灯就ok了