我做的是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;
}
}
}