#include <REGX52.H>
void _74595_writebite(unsigned char bite);
sbit RCK =P3^5;
sbit SER = P3^4;
sbit SRCLK = P3^6;
unsigned char code ani[]={0xFF,0x80,0x08,0xFF,0x00,0x1E,0x15,0x15,0x0D,0x00,0x7F,0x00,0x7F,0x00,0x06,0x09,
0x09,0x0E,0x00,0x7D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//将数组放在flash,不放RAM
void delay(unsigned int i) //@12.000MHz
{
while(--i)
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void lattice( char led_list,unsigned char dat)
{
_74595_writebite(led_list);
//delay(5);
P0=~0x80>>dat;
delay(1);
P0=0xFF;
}
void _74595_writebite(unsigned char bite)
{char i;
/* while(--i){
SER=0;SRCLK=1;
delay(20);
SRCLK=0;
}//必须先初始化
*/
for(i=0;i<8;i++)
{
SER=bite&(bite>>i);
SRCLK=1;
SRCLK=0;
}
RCK=1;
RCK=0;
/*
SER=bite&0x80;//由于从规则为先传最高位,所以先取最高位
SRCLK=1;
delay(20);
SRCLK=0;
SER=bite&0x40;
SRCLK=1;
delay(20);
SRCLK=0;
SER=bite&0x20;
SRCLK=1;
delay(020);
SRCLK=0;
SER=bite&0x10;
SRCLK=1;
delay(20);
SRCLK=0;
SER=bite&0x08;
SRCLK=1;
delay(20);
SRCLK=0;
SER=bite&0x04;
SRCLK=1;
delay(20);
SRCLK=0;
SER=bite&0x02;
SRCLK=1;
delay(20);
SRCLK=0;
SER=bite&0x01;
SRCLK=1;
delay(20);
SRCLK=0;
RCK=1;
RCK=0;
*/
}
void main()
{
unsigned char i,k=0,w=0;
SRCLK=0;//初始化
RCK=0;//初始化
while(1)
{
for(i=0;i<8;i++)
{
lattice(ani[i+k],i);
}
w++;
if(w==40)
{
k++;
w=0;
}
if(k==30)
{
k=0;
}
}
}
51点阵移动字幕
于 2022-07-04 02:22:57 首次发布