开发版小张 2023-09-23 23:14 采纳率: 0%
浏览 21
已结题

蓝桥杯c51单片机问题

蓝桥杯c51实现这个功能。
实现LED小灯(L1~L8)组成的流水灯效果,并利用按键控制方向,
a)按S4,流水灯走左往右,
b)按S5,流水灯走右往左,
c)按S6,流水灯从中间往两边
d)按S7,流水灯熄灭
#单片机

  • 写回答

15条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-09-23 23:17
    关注
    获得0.45元问题酬金

    引用 皆我百晓生 小程序回复内容作答:

    下面是一个使用C语言在蓝桥杯C51单片机上实现该功能的示例代码:

    #include <reg51.h>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit LED1 = P2^0;
    sbit LED2 = P2^1;
    sbit LED3 = P2^2;
    sbit LED4 = P2^3;
    sbit LED5 = P2^4;
    sbit LED6 = P2^5;
    sbit LED7 = P2^6;
    sbit LED8 = P2^7;
    
    sbit S4 = P3^2;
    sbit S5 = P3^3;
    sbit S6 = P3^4;
    sbit S7 = P3^5;
    
    void delay(uint ms)   //延时函数
    {
        uint i, j;
        for(i=ms;i>0;i--)
            for(j=110;j>0;j--);
    }
    
    void main()
    {
        while(1)
        {
            if(S4==0)   //按下S4,流水灯从左往右
            {
                LED1 = 0;
                delay(100);
                LED1 = 1;
                LED2 = 0;
                delay(100);
                LED2 = 1;
    
                //...
                //依次控制其他灯的显示状态,以此类推
            }
            else if(S5==0)   //按下S5,流水灯从右往左
            {
                LED8 = 0;
                delay(100);
                LED8 = 1;
                LED7 = 0;
                delay(100);
                LED7 = 1;
    
                //...
                //依次控制其他灯的显示状态,以此类推
            }
            else if(S6==0)   //按下S6,流水灯从中间往两边
            {
                LED4 = 0;
                delay(100);
                LED4 = 1;
                LED5 = 0;
                delay(100);
                LED5 = 1;
                LED3 = 0;
                delay(100);
                LED3 = 1;
                LED6 = 0;
                delay(100);
                LED6 = 1;
    
                //...
                //依次控制其他灯的显示状态,以此类推
            }
            else if(S7==0)   //按下S7,流水灯熄灭
            {
                LED1 = 1;
                LED2 = 1;
                LED3 = 1;
                LED4 = 1;
                LED5 = 1;
                LED6 = 1;
                LED7 = 1;
                LED8 = 1;
            }
        }
    }
    

    在以上代码中,我们使用了P2口的8个引脚来控制8个LED灯的显示状态。而使用P3口的4个引脚来检测按键输入。

    当按下不同的按键时,根据按键的状态不同,控制LED灯的显示状态达到不同的效果。其中函数delay()用来实现延时效果,从而让LED灯的变化能够被人眼感知到。

    请注意,此示例代码仅为参考,实际运行时可能需要根据硬件连接和开发环境做一些调整。另外,此示例代码只实现了按键功能,并没有添加其他逻辑,如当按键按下后需要保持持续亮灭的效果等。如有需要,请根据实际需求修改代码。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月1日
  • 赞助了问题酬金15元 9月23日
  • 创建了问题 9月23日