用AT89C51设计一个流水灯,至少使用8的发光二极管,按下s1时,依次点亮d1-d8,直到全亮。按下s2,依次熄灭d8-d8,直到全灭

单片机两个按键的怎么弄的呀,加急,对于小白来说有点困难,求大佬指点

#include <reg51.h>

// 定义引脚连接的发光二极管
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;

// 定义按钮引脚
sbit S1 = P3^0;
sbit S2 = P3^1;

// 延时函数,参数为毫秒
void delay(unsigned int milliseconds) {
    unsigned int i, j;
    for (i = 0; i < milliseconds; i++) {
        for (j = 0; j < 5000; j++);
    }
}

void main() {
    while (1) {
        // 检测按钮 S1 是否按下
        if (S1 == 0) {
            // 按下 S1,点亮 LED
            for (int i = 0; i < 8; i++) {
                // 依次点亮 LED1 到 LED8
                switch (i) {
                    case 0: LED1 = 1; break;
                    case 1: LED2 = 1; break;
                    case 2: LED3 = 1; break;
                    case 3: LED4 = 1; break;
                    case 4: LED5 = 1; break;
                    case 5: LED6 = 1; break;
                    case 6: LED7 = 1; break;
                    case 7: LED8 = 1; break;
                }
                delay(500);
            }
        }
        
        // 检测按钮 S2 是否按下
        if (S2 == 0) {
            // 按下 S2,熄灭 LED
            for (int i = 7; i >= 0; i--) {
                // 依次熄灭 LED8 到 LED1
                switch (i) {
                    case 7: LED8 = 0; break;
                    case 6: LED7 = 0; break;
                    case 5: LED6 = 0; break;
                    case 4: LED5 = 0; break;
                    case 3: LED4 = 0; break;
                    case 2: LED3 = 0; break;
                    case 1: LED2 = 0; break;
                    case 0: LED1 = 0; break;
                }
                delay(500);
            }
        }
    }
}

以上代码,是否满足你的需求?