#include <AT89X52.h> //調用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設置
sbit U15E3=P1^3; //LED點陣屏單元的U15(74HC138)的使能端E3腳接在P1.3口上
sbit 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)
}
}
|