📄 text1.c
字号:
/*以下是32x64点阵LED电子显示屏的源程序,采用C语言编写。*/
#include <AT89x51.H>
unsigned int zimo,xx=0; //zimo是字模计数器,xx为分屏显示的时候的字数。
unsigned char yid,h; //yid为移动计数器,h为行段计数器
unsigned char code hanzi[]; //汉字字模
unsigned char BUFF[18],BUFF2[18]; //左移显示的缓存
void qing(void); void xianshi(void);
void fen(void); void zuo(void);
void in_data(void); //调整数据
void rxd_data(void); //左移发送数据
void out_rxd(unsigned char *d); //分屏、上移发送数据
char code sw[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x00}; /*8行段码*/
/***********主程序******************/
void main(void)
{ unsigned char ee;
SCON=0;P1=0;yid=0;zimo=0;
while(1)
{ fen(); //分屏显示
for(ee=30;ee>0;ee--)//清屏幕3秒
{qing();}
zuo(); //左移显示
for(ee=30;ee>0;ee--)
{qing();}
}
}
/**********清屏幕*******************/
void qing (void)
{ unsigned char zz,xx=0x0ff;
for (zz=33;zz>0;zz--)
{out_rxd(&xx);}
P1=0xff; P1=0; //锁存为高,74HC595锁存信号
P2=0; //清74LS138的使能端
}
/**********分屏显示***********/
void fen(void)
{ do{ xianshi(); }while(xx++<=5); //调用单屏显示
xx=0;
}
/************单屏显示*************/
void xianshi(void)
{ unsigned char ii,jj; unsigned int kk,aa;
for (kk=500;kk>0;kk--) //每屏显示500次
{for(ii=1;ii<16;ii+=2) //每个汉字分8行扫描
{for (jj=0;jj<8;jj++) //每次要发送8个汉字的2个字节,发送8次
{ aa=(xx*8+jj)*32+ii;
out_rxd(&hanzi[aa]); //从串口输出第1个字的第1字节。
out_rxd(&hanzi[aa-1]); //从串口输出第1个字的第1字节。
}
for (jj=0;jj<8;jj++) //每次要发送8个汉字的2个字节,发送8次
{ aa=(xx*8+jj)*32+ii;
out_rxd(&hanzi[aa+16]); //从串口输出第1个字的第17字节。
out_rxd(&hanzi[aa+15]); //从串口输出第1个字的第18字节
}
P2=0x0ff;
P1=0xff; P1=0; //锁存为高,74HC595锁存信号
P2=sw[h]; //输出行信号
h++; //行加一
if(h==8)h=0;
}
}
}
/***************左移显示************/
void zuo(void)
{ unsigned char i,d=5; //d为移动的时候一个汉字的扫描显示次数
xianshi(); //调用单屏显示
while(zimo<=1450)
{while(yid<16) //数据移位。
{for(i=0;i<d;i++) //移动速度
{for(h=0;h<8;h++) //8行扫描
{ in_data(); //调整数据
rxd_data(); //串口发送数据
P2=sw[h]; //送段码
P1=0xff; //锁存为高,595锁存信号
P1=0;
}
}
yid++; //移动一步
}
yid=0;zimo=zimo+32; //后移一个字,
}
zimo=0;
}
/*************分屏显示的数据发送************/
void out_rxd(unsigned char *d) /*从串口发送数据*/
{ SBUF=*d; while(!TI); //等待发送完毕
TI=0;
}
/*******左移显示读取数据 并调整**************/
void in_data(void)
{ char s,w; unsigned int qqq;
for(s=8;s>=0;s--)
{ w=s+s;
qqq=zimo+h+h+s*32;
BUFF[w+1]=hanzi[qqq];
BUFF[w]=hanzi[qqq+1];
BUFF2[w+1]=hanzi[qqq+16];
BUFF2[w]=hanzi[qqq+17];
}
}
/**********左移显示的数据调整发送***************/
void rxd_data(void) //串行发送数据
{unsigned char inc,s,tempyid,temp;
if(yid<8) inc=0;
else inc=1;
for(s=0+inc;s<16+inc;s++) //发送数据
{ if(yid<8) tempyid=yid;
else tempyid=yid-8;
temp=(BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid));
SBUF=temp; //把BUFF中的字节从大到小移位相或后发送输出。
while(!TI);TI=0; //等待发送中断
}
for(s=0+inc;s<16+inc;s++) //发送8字节数据
{ if(yid<8) tempyid=yid;
else tempyid=yid-8;
temp=(BUFF2[s]>>tempyid)|(BUFF2[s+1]<<(8-tempyid));
SBUF=temp; //把BUFF中的字节从大到小移位相或后发送输出。
while(!TI);TI=0; //等待发送中断
}
}
/*************汉字编码信息*************/
unsigned char code hanzi[]={0x00,0x00,0xF8,0x00,0x00,0x7E,0x52,0x66,0x4A,0x52,0x7E,0x00,0x00,0xF8,0x00,0x00,0x00,0x84,0x65,0x1D,0x05,0x05,0xFF,0x00,0x00,0xFF,0x05,0x05,0x05,0xFD,0x00,0x00},/*"鼎",0*/
{0x00,0x00,0x80,0x9F,0x95,0x95,0x95,0x95,0x95,0xF5,0x95,0xB5,0xDF,0x80,0x80,0x00,0x40,0x30,0x0F,0x02,0x02,0x0A,0x12,0x0E,0x40,0x27,0x18,0x18,0x26,0x40,0x70,0x00},/*"晟",1*/
{0x00,0x00,0xFE,0x22,0x22,0xFE,0x40,0x21,0xD1,0x4F,0x41,0x51,0x61,0xDF,0x00,0x00,0x40,0x60,0x3B,0x01,0x09,0x33,0x60,0x00,0x0F,0x32,0x62,0x02,0x0A,0x37,0x60,0x00},/*"照",2*/
{0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x43,0x20,0x18,0x07,0x01,0x01,0x41,0x81,0x7F,0x00,0x00},/*"明",3*/
{0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00},/*"欢",4*/
{0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00},/*"迎",5*/
{0x80,0x40,0x30,0xFC,0x03,0x90,0x68,0x06,0x04,0xF4,0x04,0x24,0x44,0x8C,0x04,0x00,0x00,0x20,0x38,0x03,0x38,0x40,0x40,0x49,0x52,0x41,0x40,0x70,0x00,0x09,0x30,0x00},/*"您",6*/
{0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",7*/};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -