#include <AT89X52.h> //調(diào)用51單片機(jī)的頭文件
//---------------------------------------
unsigned char code han1[]=
{ //定義表格一定要使用code,這樣會(huì)做到程序存儲(chǔ)區(qū)中
/*-- 文字: 因?yàn)橐苿?dòng)漢字,所以首尾都填充一些0 --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: O --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,
/*-- 文字: V --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x10,0x1E,0x11,0x00,0x00,0x13,0x1C,0x10,
/*-- 文字: E --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x10,0x1F,0x11,0x11,0x17,0x10,0x08,0x00,
/*-- 文字: 因?yàn)橐苿?dòng)漢字,所以首尾都填充一些0 --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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,這樣會(huì)做到程序存儲(chǔ)區(qū)中
/*-- 文字: 因?yàn)橐苿?dòng)漢字,所以首尾都填充一些0 --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x04,0xFC,0x04,0x04,0x04,0x04,0x0C,0x00,
/*-- 文字: O --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,
/*-- 文字: V --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x00,0xE0,0x1C,0x70,0x80,0x00,0x00,
/*-- 文字: E --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x04,0xFC,0x04,0x04,0xC4,0x04,0x18,0x00,
/*-- 文字: 因?yàn)橐苿?dòng)漢字,所以首尾都填充一些0 --*/
/*-- Trebuchet MS12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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點(diǎn)陣屏相關(guān)I/O設(shè)置
sbit U15E3=P1^3; //LED點(diǎn)陣屏單元的U15(74HC138)的使能端E3腳接在P1.3口上
sbit U14E3=P1^4; //LED點(diǎn)陣屏單元的U14(74HC138)的使能端E3腳接在P1.4口上
//---------------------------------------
//---------------------------------------
//LED點(diǎn)陣屏寄存器設(shè)置
unsigned char m=15; //設(shè)置8位的unsigend char型寄存器用來(lái)做漢字顯示的索引
unsigned char n; //設(shè)置8位的unsigend char型寄存器用來(lái)做延時(shí)用
unsigned char w; //設(shè)置8位的unsigend char型寄存器用來(lái)做延時(shí)用
unsigned char v; //設(shè)置8位的unsigend char型寄存器用來(lái)做移動(dòng)索引
//---------------------------------------
//---------------------------------------
void main(void) //主函數(shù),單片機(jī)開(kāi)機(jī)后就是從這個(gè)函數(shù)開(kāi)始運(yùn)行
{
while(1) //死循環(huán),單片機(jī)初始化后,將一直運(yùn)行這個(gè)死循環(huán)
{
for(n=0;n<200;n++); //做一個(gè)0-80的循環(huán),不執(zhí)行其他操作,只為延時(shí)
if(++w>180) //再嵌套一個(gè)延時(shí),每220個(gè)掃描周期將漢字左移一格
{
w=0; //清零,以準(zhǔn)備下一個(gè)延時(shí)
if(++v>60) v=0;//移動(dòng)索引,限定在0-176
}
if(++m>15) m=0; //每調(diào)用一次函數(shù)將m加1,并限制在0-15以內(nèi)
P1=0; //將LED點(diǎn)陣屏的列控制信號(hào)全部清零,準(zhǔn)備重置
P0=han1[m+v]; //LED點(diǎn)陣屏的上半屏,按m+v索引查表han1送P0
P2=han2[m+v]; //LED點(diǎn)陣屏的下半屏,按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)
}
}
|