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

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

该回答引用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用于控制流水灯的流动速度。