单片机595扩展通过按键控制8*8流水灯速度跟方向

我做的是595扩展,控制8*8点阵实现流水灯,并通过按键控制方向速度,现在的代码只能8x8点阵向左移动循环0,1,2三个数字,能不能帮我改一下程序

添加变量sd=40;修改if(y>40)为if(y>sd)调节速度
添加按键if(key==0&&++xd==0){sd+=10;while(key==0);}添加变量xd=0;

#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char

typedef unsigned int u16;
typedef unsigned char u8;

sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;

sbit key=P3^7;

u8 ledxian[8];
u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00};
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

void delay(u16 i)
{
while(i--);
}

void Hc595SendByte(u8 dat)
{
u8 a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;

    SRCLK=1;
    _nop_();
    _nop_();
    SRCLK=0;
}

RCLK=1;
_nop_();
_nop_();
RCLK=0;

}
void main()
{
u8 i;
u8 j;
u8 y;
u8 k;
u8 m;
while(1)
{

    P0=0x7f;
    for(i=0;i<8;i++)
    {
        
        P0=ledwei[i];          
        Hc595SendByte(ledxian[i]);    
        delay(100);          
        Hc595SendByte(0x00);  
    }
  
    y++;
    if(y>40)
    {
    
        P0=0x7f;
        delay(1);
        y=0;
        for(j=0;j<8;j++)
        {

            ledxian[j]=ledduan[k];
            k++;
            if(k>=24){
                k=0;
            }    
        }
        k=m++;
        if(m>=24){
                m=0;
            }
         

    }    
}        

}

////num代表当前显示的第几个数
void main()
{
u8 i;
u8 j;
u8 y;
u8 k;
u8 m;
while(1)
{

P0=0x7f;
for(i=0;i<8;i++)
{
    P0=ledwei[i];          
    Hc595SendByte(ledxian[i+num*8]);    
    delay(100);///显示时间        
    Hc595SendByte(0x00);  
          if(num<2)////要循环显示的个数
                num++;
            else
                num=0;
}

}
}