//此程序由Undertaker独立完成,QQ:120594698 不懂可以询问!此程序硬件为两片164控制行,两片595控制列。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit datat=P2^0 ;
sbit sh=P2^1 ;
sbit st=P2^2 ;
sbit ab=P2^4 ;
sbit sck=P2^5 ;
uchar xdw[32];
void display();
void displaysp(uint timer) ;
void zuoyi(uchar *lp,uchar c,uchar timer) ;
//void shangxia(uchar din,uchar *lp,uchar timer) ;
void delay(uint z) ;
code uchar yh[32]={0x00,0x00,0x00,0x00,0x78,0x00,0x78,0x00,0x78,0x20,0x78,0x30,0x78,0x38,0x7F,0xFC,
0x7F,0xFE,0x7F,0xFF,0x7F,0xFE,0x7F,0xFC,0x00,0x38,0x00,0x30,0x00,0x20,0x00,0x00};
code uchar huan[32]={/*-- 文字: 欢 --*/
0x00,0x80,0x00,0x80,0xFC,0x80,0x05,0xFE,0x85,0x04,0x4A,0x48,0x28,0x40,0x10,0x40,
0x18,0x40,0x18,0x60,0x24,0xA0,0x24,0x90,0x41,0x18,0x86,0x0E,0x38,0x04,0x00,0x00};
code uchar ying[32]={0x40,0x00,0x21,0x80,0x36,0x7C,0x24,0x44,0x04,0x44,0x04,0x44,0xE4,0x44,0x24,0x44,
0x25,0x44,0x26,0x54,0x24,0x48,0x20,0x40,0x20,0x40,0x50,0x00,0x8F,0xFE,0x00,0x00};
code uchar lai[32]={0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,0x09,0x30,0x05,0x20,0x03,0x40,0x7F,0xFE,
0x01,0x80,0x03,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00};
code uchar dao[32]={0x00,0x04,0x7F,0x84,0x08,0x04,0x12,0x24,0x21,0x24,0x7F,0xA4,0x25,0x24,0x04,0x24,
0x04,0x24,0x7F,0xA4,0x04,0x24,0x04,0x24,0x05,0x84,0x0E,0x04,0x70,0x14,0x20,0x08};
code uchar Un[32]={0x00,0x00,0x00,0x00,0xE7,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x5C,
0x42,0x62,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0xE7,0x00,0x00,0x00,0x00};
code uchar de[32]={0x00,0x00,0x02,0x00,0x06,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x1E,0x3C,
0x22,0x42,0x42,0x7E,0x42,0x40,0x42,0x40,0x26,0x42,0x1B,0x3C,0x00,0x00,0x00,0x00};
code uchar rt[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x77,0x7C,
0x19,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x0C,0x00,0x00,0x00,0x00};
code uchar ak[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x20,0x00,0x20,0x00,0x20,0x3C,0x27,
0x42,0x24,0x1E,0x28,0x22,0x34,0x42,0x24,0x42,0x22,0x3F,0x77,0x00,0x00,0x00,0x00};
code uchar er[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0xEE,
0x42,0x32,0x7E,0x20,0x40,0x20,0x40,0x20,0x42,0x20,0x3C,0xF8,0x00,0x00,0x00,0x00};
code uchar dan[]={0x08,0x20,0x06,0x30,0x04,0x40,0x3F,0xF8,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,
0x3F,0xF8,0x21,0x08,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00};
code uchar pian[]={0x00,0x40,0x10,0x40,0x10,0x40,0x10,0x44,0x1F,0xFE,0x10,0x00,0x10,0x00,0x10,0x00,
0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20,0x10,0x40,0x10,0x80,0x10};
code uchar ji[]={0x10,0x00,0x10,0xF8,0x10,0x88,0xFE,0x88,0x10,0x88,0x10,0x88,0x38,0x88,0x34,0x88,
0x54,0x88,0x50,0x88,0x91,0x08,0x11,0x0A,0x12,0x0A,0x12,0x0A,0x14,0x06,0x10,0x00};
code uchar shi[]={0x00,0x00,0x12,0x10,0x12,0x10,0x12,0x10,0x12,0x10,0xFF,0xFE,0x12,0x10,0x12,0x10,
0x12,0x10,0x13,0xF0,0x12,0x10,0x10,0x00,0x10,0x08,0x1F,0xFC,0x00,0x00,0x00,0x00};
code uchar jie[]={0x1F,0xF8,0x11,0x08,0x11,0x08,0x1F,0xF8,0x11,0x08,0x11,0x08,0x1F,0xF8,0x11,0x88,
0x02,0x40,0x04,0x30,0x1A,0x4E,0x62,0x44,0x02,0x40,0x04,0x40,0x08,0x40,0x10,0x40};
void main()
{ uchar i;
for(i=0;i<32;i++)
xdw[i]=yh[i];
displaysp(2);
for(i=0;i<32;i++)
xdw[i]=huan[i];
displaysp(2);
for(i=0;i<32;i++)
xdw[i]=ying[i];
displaysp(2);
while(1)
{
zuoyi(huan,14,15);
}
}
void display()
{
uchar i,ia,j,tmp3;
ab=0;
for(i=0;i<16;i++)
{
sck=0;
st=0;
for(ia=2;ia>0;)
{
ia--;
tmp3=xdw[2*i+ia];
for(j=0;j<8;j++)
{
sh=0;
datat=~tmp3&0x01;
sh=1;
tmp3>>=1;
}
}
P2|=0x24;
ab=1;
//delay(1);
}
j=60;
while(j--);
ab=1;
sck=0;
sck=1;
}
void displaysp(uint timer)
{
uchar i;
while(timer--)
{
i=100;
while(i--)
{
display();
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--) ;
}
void zuoyi(uchar *lp,uchar c,uchar timer)
{
uchar tmp2[16];
uchar j,i,ia,tmp,timerc;
c*=2;
for(i=0;i<16;i++)
tmp2[i]=0;
while(c)
{
if(lp!=0)
{
tmp=c%2;
for(j=0;j<16;j++)
{
tmp2[j]=lp[2*j+tmp] ;
}
if(tmp==1)
{lp+=32;}
}
tmp=8;
while(tmp)
{
ia=0;
for(i=0;i<16;i++)
{
xdw[ia]<<=1;
if(xdw[ia+1]&0x80)
{xdw[ia]++;}
ia++;
xdw[ia]<<=1;
if(tmp2[i]&0x80)
{xdw[ia]++; }
ia++;
tmp2[i]<<=1;
}
tmp--;
timerc=timer;
while(timerc--)
{
display();
}
}
c--;
}
}
