#include <regx52.h>
#define uchar unsigned char
#define uint unsigned int
#define light 3 //定义亮度
uchar col,disrow; //col为位移变量,disrow为行变量
uint word;
uchar code tab[]=
{0x0f,0x09,0x05,0x02,0x08,0x04,0x00,0x0c,0x03,0x0b,0x07,0x0d,0x01,0x0e,0x0a,0x06};
uchar code HZ[];
uchar BUFF[10];
void loadoneline(void);
void sendoneline(void);
/*******根据列指针,由双字节合并为单字节的子程序模块12MHZ************/
uchar two_onebyte(uchar h1,uchar h2)
{
uchar temp,tempcol;
if(col<8) tempcol=col;
else tempcol=col-8;
temp=(h1<<tempcol)|(h2>>(8-tempcol));
temp=255-temp;
return temp;
}
/****************************主函数***************************/
void main(void)
{
uchar i;
col=0;word=0;
while(1)
{
while(col<16)// 循环16次,点亮并移动一个汉字
{
for(i=0;i<SPEED;i++)//汉字在屏幕上的停留时间(即移动速度快慢)
{
for(disrow=0;disrow<16;disrow++)//扫描16行
{
loadoneline();//装载一线点阵数据
sendoneline();//发送一线点阵数据
P2_4=1;//消影。 E接在P2_4 ,=1;
P2_5= 1; // 点亮屏幕
P2=tab[disrow];
P3_1=1; //(CLK=P3_1)上升沿595输出
}
}
col++; //列指针递增
}
col=0;word=word+32;// 一个汉字移动后,指向下一个汉字
if(word>=5086)word=0;// 移动154个汉字后,重新开始
}
}
/**************装载一线点阵数据****************/
void loadoneline(void)
{
uchar s;
for(s=0;s<5;s++) //s为要显示的数字+1
{
BUFF[2*s]=~HZ[word+32*s+2*disrow];
BUFF[2*s+1]=~HZ[word+1+32*s+2*disrow];
}
}
/***************发送一线点阵数据*******************/
void sendoneline(void)
{
char s;uchar inc;
if(col<8)inc=0;else inc=1;
for(s=9+inc;s>=0+inc;s--)
{
SBUF=two_onebyte(BUFF[s],BUFF[s+1]);
while(!TI);TI=0;
}
}
/***********************汉字点阵码*************************/
uchar code HZ[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//=============================================================================
0x40,0x08,0x40,0x14,0x40,0x04,0x48,0x24,0x4F,0xE4,0x48,0x24,0x48,0x24,0x48,0x24,
0x4F,0xE4,0x40,0x04,0x40,0x04,0x5F,0xF4,0x40,0x04,0x40,0x04,0x7F,0xFC,0x00,0x00,/*"同",0*/
0x00,0x00,0x1F,0x84,0x20,0x8A,0x20,0x82,0x20,0x82,0x22,0x12,0x25,0x12,0x21,0x12,
0x21,0x12,0xBF,0x12,0x40,0x92,0x21,0xD2,0x13,0x12,0x14,0x12,0x08,0x02,0x08,0x02,/*"创",1*/
0x00,0x00,0x00,0xFE,0x01,0x02,0x01,0x02,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,
0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,/*"电",2*/
0x00,0x00,0x92,0x04,0xAB,0xFC,0x4B,0x04,0x4A,0x94,0x4A,0x94,0x4A,0x64,0x7A,0x64,
0x4A,0x64,0x4A,0x94,0x48,0x10,0x78,0x00,0x4B,0xFE,0x48,0x20,0x78,0x40,0x00,0x80,/*"脑",3*/
0x00,0x00,0x00,0x00,0x60,0xE7,0x60,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x62,
0x00,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*".n",153*/
0x00,0x00,0x00,0x00,0x3C,0x0C,0x42,0x10,0x40,0x10,0x40,0x10,0x7E,0x10,0x42,0x10,
0x3C,0x7C,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"et",154*/
//============================================================================
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};