//此程序由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--; } }