用AT89C51单片机汇编实现按键流水灯

用单片机系统设计流水灯控制电路,具体要求:
(1)用 8 个 LED 发光二极管实现至少 4 种彩灯灯光效果;
(2)用输入按钮在几种灯光效果间切换;
(3)在显示器上能显示按键的编号;
(4)通过按钮暂停彩灯效果,使小灯全亮,再次按下相同按钮后继续之前
的效果;
(5)具备自动在几种效果间切换的功能。
(6)用汇编语言实现

就几个灯和key的控制,汇编也没啥难度,可以查看:https://blog.csdn.net/weixin_44026026/article/details/109965153,稍加修改就ok'


#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^4;
void delay(uint i)
{
        uint j;
    while(i--)
    for(j=0;j<100;j++);
}
 
void key_1()
{
    uint i;
    uchar temp;
    temp=0xfe;
    for(i=0;i<4;i++)
    {
        P3=temp;
        temp=_crol_(temp,2);
        delay(300);
    }
    P3=0xff;
}
void key_2()
{
    uint i;
    uchar temp;
    temp=0x7f;
    for(i=0;i<4;i++)
    {
        P3=temp;
        temp=_cror_(temp,2);
        delay(300);
    }
    P3=0xff;
}
void key_3()
{
        uint i;
        uchar temp;
        temp=0xfe;
    for(i=0;i<4;i++)
    {
        P3=temp;
        temp=_crol_(temp,2);
        delay(300);
    }
    temp=0x7f;
    for(i=0;i<4;i++)
    {
        P3=temp;
        temp=_cror_(temp,2);
        delay(300);
    }
    P3=0xff;
}
void key_4()
{
    uint i;
    for(i=0;i<5;i++)
    {
        P3=0x0f;
        delay(300);
        P3=0xf0;
        delay(300);
        P3=0xff;
    }
}
void main()
{
    P1=0x0f;
    if((0x0f&P1)!=0x0f)
    {   delay(30);
            if((0x0f&P1)!=0x0f)
         {
                    switch(P1)
                {
                case 0x0e:{key_1();break;}
                case 0x0d:{key_2();break;}
                case 0x0b:{key_3();break;}
                case 0x07:{key_4();break;}
                }
         }
  }
}

提供参考链接:基于AT89C51的按键控制流水灯,链接:https://blog.csdn.net/ICnku/article/details/127683431