shaochai520 2023-04-18 14:58 采纳率: 0%
浏览 264

利用两个按键分别控制流水灯流动的方向,一个按键按下去之后,流水灯从左往右流动,另一个按键按下后,流水灯从右往左。

利用两个按键分别控制流水灯流动的方向,一个按键按下去之后,流水灯从左往右流动,另一个按键按下后,流水灯从右往左。

  • 写回答

2条回答 默认 最新

  • 守时间的孤岛 2023-04-18 15:23
    关注

    该回答引用chatgpt:
    这里提供一种基于8051单片机的C语言程序,实现利用两个按键分别控制流水灯流动的方向,一个按键按下去之后,流水灯从左往右流动,另一个按键按下后,流水灯从右往左。

    
    #include <reg51.h>
    
    #define LED_PORT P1
    
    sbit KEY1 = P2^0; //定义按键1对应的引脚为P2.0
    sbit KEY2 = P2^1; //定义按键2对应的引脚为P2.1
    
    void delay(unsigned int n)
    {
        while(n--);
    }
    
    void main()
    {
        unsigned char i = 0;
        unsigned char flag = 0; //定义标志位,用来记录流水灯流动方向,0表示从左往右,1表示从右往左
        
        while(1)
        {
            if(KEY1 == 0) //判断按键1是否被按下
            {
                delay(1000); //延时去抖动
                if(KEY1 == 0)
                {
                    flag = 0; //设置标志位为0,表示流水灯从左往右
                }
                while(KEY1 == 0); //等待按键1释放
            }
            
            if(KEY2 == 0) //判断按键2是否被按下
            {
                delay(1000); //延时去抖动
                if(KEY2 == 0)
                {
                    flag = 1; //设置标志位为1,表示流水灯从右往左
                }
                while(KEY2 == 0); //等待按键2释放
            }
            
            if(flag == 0) //从左往右
            {
                for(i=0; i<8; i++)
                {
                    LED_PORT = ~(1<<i); //点亮LED
                    delay(50000); //延时一段时间,控制流水灯的流动速度
                }
            }
            else //从右往左
            {
                for(i=7; i>=0; i--)
                {
                    LED_PORT = ~(1<<i); //点亮LED
                    delay(50000); //延时一段时间,控制流水灯的流动速度
                }
            }
        }
    }
    
    

    该程序中,定义了按键1和按键2对应的引脚,以及一个标志位flag用于记录流水灯的流动方向,0表示从左往右,1表示从右往左。在主程序中,通过检测按键1和按键2的状态来改变流水灯的流动方向,然后根据标志位flag的值来控制流水灯的流动方向,从而实现流水灯从左往右和从右往左的切换。延时函数delay用于控制流水灯的流动速度。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月18日