51单片机按钮控制流水灯

1.基本功能,系统具有启动,停止,暂停,左移,右移,加速,减速。
2.效果,彩灯效果,跑马效果,流水效果,拉幕效果,或自定义效果。
求程序,求原理图
求求求

img

提供参考实例【51单片机】4个按键分别控制流水灯的开启、关闭、加速、减速,链接:https://blog.csdn.net/m0_46234966/article/details/119023865

51 控制流水灯和按键配合就好了

之前做实验的代码,希望有用。

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint i)        //延时
{
    uchar t;
    while(i--)
    {
        for(t=0;t<120;t++);
    }
}

//1 8个LED灯分别反映8个按键的状态,按键按下LED亮,弹起LED熄灭;
void keyscan()
{
    uchar temp;
    P0=0xff;
    temp=P0;
    if(P0!=0xff)
    {
        delay(20);
        if(P0!=0xff)
        {
            P2=temp;
        }
        else
        {
            P2=0xff;
        }
    }
}

//2 S0按下LED从上到下流水灯,S1按下LED从下到上流水灯,S2按下8个LED闪烁点亮;
void keyscan2()
{
    uchar temp,i,PP;
    P0=0xff;
    PP=P0;
    if(PP!=0xff)
    {
        delay(200);         //消抖
        if(PP!=0xff)
    {
        if(PP==0xfe)
        {
            temp = 0xfe;
          for(i=0;i<8;i++)
          {
              P2=temp;
              delay(500);
              temp =_crol_(temp,1);
          }
        }
        else if(PP==0xfd)
        {
            temp = 0x7f;
          for(i=0;i<8;i++)
          {
              P2=temp;
              delay(500);
              temp=_cror_(temp,1);
          }
        }
        else if(PP==0xfb)
        {
            P2 = 0xff;
          delay(500);
          P2 = 0;
          delay(500);
        }
        else
        {
            P2=0xff;
        }
    }
    else
        {
            P2=0xff;
        }
    
}
}


//3 初始LED0点亮,S1按下LED流水灯往下移1位,S2按下LED流水灯往上移1位,S3按下LED状态取反,S4按下LED0点亮,S5按下LED等全部熄灭;
void keyscan3()
{
    P0=0xff;
    P2=0xfe;
    while(1)
    {
        delay(200);
            if(P0==0xfd)
            {
                P2 =_crol_(P2,1);
                delay(500);
            }
            if(P0==0xfb)
            {
                P2 =_cror_(P2,1);
                delay(500);
            }
            if(P0==0xf7)
            {
                P2=~P2;
                delay(500);
            }
            if(P0==0xef)
            {
                P2=0xfe;
                delay(500);                
            }
            if(P0==0xdf)
            {
                P2=0xff;
                delay(500);
            }
        
    }
}


void main()
{ 
    while(1)
    {
        keyscan();
      //keyscan2();
      //keyscan3();
    }
}