#include //调用51单片机的头文件
//---------------------------------------
unsigned char code han1[]=
{ //定义表格一定要使用code,这样会做到程序存储区中
/*-- 文字: 因为移动汉字,所以首尾都填充一些0 --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
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,
/*-- 文字: L --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: O --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,
/*-- 文字: V --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0x1E,0x11,0x00,0x00,0x13,0x1C,0x10,
/*-- 文字: E --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0x1F,0x11,0x11,0x17,0x10,0x08,0x00,
/*-- 文字: 因为移动汉字,所以首尾都填充一些0 --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
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,
};
//---------------------------------------
unsigned char code han2[]=
{ //定义表格一定要使用code,这样会做到程序存储区中
/*-- 文字: 因为移动汉字,所以首尾都填充一些0 --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
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,
/*-- 文字: L --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x04,0xFC,0x04,0x04,0x04,0x04,0x0C,0x00,
/*-- 文字: O --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,
/*-- 文字: V --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0xE0,0x1C,0x70,0x80,0x00,0x00,
/*-- 文字: E --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x04,0xFC,0x04,0x04,0xC4,0x04,0x18,0x00,
/*-- 文字: 因为移动汉字,所以首尾都填充一些0 --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
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,
};
//---------------------------------------
//LED点阵屏相关I/O设置
***it U15E3=P1^3; //LED点阵屏单元的U15(74HC138)的使能端E3脚接在P1.3口上
***it U14E3=P1^4; //LED点阵屏单元的U14(74HC138)的使能端E3脚接在P1.4口上
//---------------------------------------
//---------------------------------------
//LED点阵屏寄存器设置
unsigned char m=15; //设置8位的unsigend char型寄存器用来做汉字显示的索引
unsigned char n; //设置8位的unsigend char型寄存器用来做延时用
unsigned char w; //设置8位的unsigend char型寄存器用来做延时用
unsigned char v; //设置8位的unsigend char型寄存器用来做移动索引
//---------------------------------------
//---------------------------------------
void main(void) //主函数,单片机开机后就是从这个函数开始运行
{
while(1) //死循环,单片机初始化后,将一直运行这个死循环
{
for(n=0;n<200;n++); //做一个0-80的循环,不执行其他操作,只为延时
if(++w>180) //再嵌套一个延时,每220个扫描周期将汉字左移一格
{
w=0; //清零,以准备下一个延时
if(++v>60) v=0;//移动索引,限定在0-176
}
if(++m>15) m=0; //每调用一次函数将m加1,并限制在0-15以内
P1=0; //将LED点阵屏的列控制信号全部清零,准备重置
P0=han1[m+v]; //LED点阵屏的上半屏,按m+v索引查表han1送P0
P2=han2[m+v]; //LED点阵屏的下半屏,按m+v索引查表han2送P2
P1|=m&0x07; //将索引m的低3位送给P1的低3位,以使74HC138去片选
if(m<8) U15E3=1; //前8列需要使能U15(74HC138)
else U14E3=1; //后8列需要使能U14(74HC138)
}
}
|