51单片机应该怎么改这个程序设置成流水灯循环两次?然后怎么设置通过4个独立按键控制led灯的亮灭,按第一个按键一个LED灯亮,按第二个按键两个LED灯亮,以此类推共四个?

之前的原代码,一直循环啊

img


大一垃圾,谁能懂啊,才刚学一点就要搞这个,人傻了!

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了