/* VC-3.0 32x64 LED 双色显示板 */
/* MCU: STC12C2052AD, */
//#include <STC12C2052AD.h>
#include <AT89x52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
sbit HC138_A=P1^0;
sbit HC138_B=P1^1;
sbit HC138_C=P1^2;
sbit HC138_D=P1^3; //138, 4, 5
sbit HC138_OE=P1^4; //138 6
sbit HC595_LAT=P1^7; //595 12
sbit HC595_CLK=P3^1; //595 11
sbit HC595_GD=P3^0; //595 14
sbit HC595_RD=P3^0; //595 14
/*
sbit HC138_A=P3^7;
sbit HC138_B=P3^2;
sbit HC138_C=P1^0;
sbit HC138_D=P3^3; //138, 4, 5
sbit HC138_OE=P1^5; //138 6
sbit HC595_LAT=P1^1; //595 12
sbit HC595_CLK=P3^4; //595 11
sbit HC595_GD=P1^2; //595 14
sbit HC595_RD=P3^5; //595 14
*/
unsigned char r_data[8], g_data[8];
unsigned char k, t, m, n, p, state;
unsigned char code hanzi[17][32]={ //二维数据
/*-- 文字0: 零 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x1F,0xF8,0x01,0x00,0x7F,0xFE,0x41,0x04,0x1D,0x70,0x01,0x00,0x1D,0x70,0x02,0x80,
0x04,0x60,0x1A,0x1E,0xE1,0x08,0x1F,0xE0,0x00,0x40,0x02,0x80,0x01,0x00,0x01,0x00,
/*-- 文字1: 一 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x04, 0x7F,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字2: 二 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x10,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字3: 三 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,
/*-- 文字4: 四 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x7F,0xFC,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,
0x48,0x84,0x48,0x7C,0x50,0x04,0x60,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00,
/*-- 文字5: 五 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x7F,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x3F,0xF0,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x24,0xFF,0xFE,0x00,0x00,0x00,0x00,
/*-- 文字6: 六 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x04,0x00,0x03,0x00,0x01,0x80,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x04,0x80,
0x06,0x40,0x04,0x20,0x08,0x10,0x08,0x18,0x10,0x0C,0x20,0x0C,0x40,0x08,0x00,0x00,
/*-- 文字7: 七 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFE,0x7F,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00,
/*-- 文字8: 八 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x40,0x04,0x60,0x06,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x20,
0x08,0x20,0x10,0x10,0x10,0x10,0x20,0x08,0x40,0x0E,0x80,0x04,0x00,0x00,0x00,0x00,
/*-- 文字9: 九 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x7F,0xF0,0x02,0x20,0x02,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x08,0x20,0x08,0x24,0x10,0x24,0x20,0x26,0x40,0x3C,0x00,0x00,
/*-- 文字10: 十 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
/*-- 文字11: 测 --*/
/*-- 幼圆12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x44,0xC4,0x8C,0x98,0xF8,0xFC,0xE4,0xF4,0xFC,0xFC,0xF8,0xFC,0xFC,0xFC,0xFC,0x00,
0x80,0xE0,0x79,0xBD,0xCF,0xFF,0x7F,0x1F,0x3F,0xFF,0xCF,0x9F,0x9F,0xFF,0xFF,0x00,
/*-- 文字12: 试 --*/
/*-- 幼圆12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x84,0x9C,0x9C,0x10,0x10,0x10,0x10,0x10,0x10,0xFC,0xFC,0x1C,0x1C,0x38,0x00,
0x00,0x00,0x7F,0x7F,0x60,0x71,0x51,0x7F,0x3F,0x21,0x23,0x3F,0xFF,0xE0,0xF8,0x00,
/*-- 文字13: 开 --*/
/*-- 幼圆12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x04,0x04,0xFC,0xFC,0xFC,0x04,0x04,0x04,0x04,0xFC,0xFC,0xFC,0x04,0x04,0x00,
0x01,0x81,0xC1,0xFD,0x7F,0x0F,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x00,
/*-- 文字14: 始 --*/
/*-- 幼圆12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0xD0,0xFE,0x7E,0x10,0xF0,0xF0,0xE0,0xF8,0xBC,0x8C,0x80,0x98,0xF8,0xE0,0x00,
0x80,0xC7,0xFF,0x78,0x7E,0xEF,0xC3,0xFC,0xFC,0x84,0x84,0x84,0x84,0xFC,0xFD,0x00,
/*-- 文字15: 结 --*/
/*-- 幼圆12; 此字体下对应的点阵为:宽x高=16x16 --*/
0xC0,0xF0,0xFC,0x9C,0xF4,0x70,0x90,0x90,0x90,0xFC,0xFC,0xFC,0x90,0x90,0x90,0x00,
0xC0,0xCC,0x4F,0x4F,0x6D,0x24,0xFC,0xFC,0x84,0x84,0x84,0x84,0x84,0xFC,0xFC,0x00,
/*-- 文字16: 束 --*/
/*-- 幼圆12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0xC8,0xC8,0xE8,0x28,0x28,0x28,0xFE,0xFE,0x28,0x28,0x28,0xE8,0xC8,0xC8,0x08,
0x80,0x83,0xC3,0x67,0x62,0x3A,0x1E,0xFF,0xFF,0x1E,0x32,0x72,0x67,0xC7,0x83,0x80,
};
//delay us
void Delay(uchar us) //5,7,9
{
while(--us);
}
//delay ms
void DelayMS(uint iMs)
{
uint i,j;
for(i=0;i<iMs;i++)
for(j=0;j<65;j++) Delay(1);
}
void write595(unsigned char rdd, gdd)
{
unsigned char i;
for (i=0;i<8;i++)
{
HC595_RD=rdd&0x80;
rdd=rdd<<1;
HC595_GD=gdd&0x80;
gdd=gdd<<1;
HC595_CLK=1;
HC595_CLK=0;
}
}
void main (void)
{
n=0;
state=0;
// HC595_RD=CY;
while(1)
{
for (p=0;p<64;p++)
{
for (t=0;t<16;t++)
{
HC595_LAT=0;
HC595_CLK=0;
HC138_OE=1;
// HC138_OE=0;//by he
if (state==0)
{
for (k=0;k<4;k++)
{
g_data[2*k]=0xff-hanzi[0+k][t*2];
g_data[2*k+1]=0xff-hanzi[0+k][t*2+1];
r_data[2*k]=0xff-hanzi[0+k][t*2];
r_data[2*k+1]=0xff-hanzi[0+k][t*2+1];
}
}
else if (state==1)
{
for (k=0;k<8;k++)
{
g_data[k]=0x00;
r_data[k]=0xff;
}
}
else if (state==2)
{
for (k=0;k<8;k++)
{
g_data[k]=0xff;
r_data[k]=0x00;
}
}
else if (state==3)
{
for (k=0;k<2;k++)
{
g_data[2*k]=0xff-hanzi[4+k][t*2];
g_data[2*k+1]=0xff-hanzi[4+k][t*2+1];
r_data[2*k]=0xff-hanzi[4+k][t*2];
r_data[2*k+1]=0xff-hanzi[4+k][t*2+1];
}
for (k=2;k<4;k++)
{
g_data[2*k]=0xff-hanzi[6+k][t*2];
g_data[2*k+1]=0xff-hanzi[6+k][t*2+1];
r_data[2*k]=0xff-hanzi[6+k][t*2];
r_data[2*k+1]=0xff-hanzi[6+k][t*2+1];
}
}
for (k=0;k<8;k++)
{
write595(r_data[k], g_data[k]);
}
//HC138_OE=1; //by he
HC138_OE=0;
HC595_LAT=1;
HC595_LAT=0;
HC595_CLK=0;
HC138_A=t&0x01;
HC138_B=t&0x02;
HC138_C=t&0x04;
HC138_D=t&0x08;
Delay(200);
//HC138_OE=1;
} //end for t
} //end for p
state=state+1;
if (state>3) state=0;
} //end while
} |