WellLife942 2022-12-04 15:54 采纳率: 0%
浏览 26

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

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

  • 写回答

1条回答 默认 最新

  • Ak混子 2023-05-29 16:37
    关注
    #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);
                }
            }
        }
    }
    

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

    评论 编辑记录

    报告相同问题?

    问题事件

    • 创建了问题 12月4日

    悬赏问题

    • ¥20 如何用Numpy库的向量化方法提高delta对冲的计算效率?(代码已附,只需修改第三个函数,在一小时内绘制出散点图即可)
    • ¥15 yolov5双目识别输出坐标代码报错
    • ¥15 这个代码有什么语法错误
    • ¥15 给予STM32按键中断与串口通信
    • ¥15 使用QT实现can通信
    • ¥15 关于sp验证的一些东西,求告知如何解决,
    • ¥35 关于#javascript#的问题:但是我写的只能接码数字和字符,帮我写一个解码JS问题
    • ¥15 prophet运行报错,如何解决?
    • ¥15 用GPU跑pytorch搭建的LSTM的时候出现了奇怪的报错
    • ¥20 前端数据是从session等作用域拿到的,如何取值继续传递后端呢