以下是内码的程序虽然有注释还是看不懂,求详细解释
main()
{ uchar xdata* addx=0; //初始值指向U6的开始,用于读取U6中天龙八部的内码
ulong addf; //算得特定汉字在U0-U5中的位置
uint i; //存放汉字点阵的片内偏移地址
ulong k,l; //k存放内码的高8位,l存放内码的低八位
uchar phang=0,plie=0; //用于存放已显示汉字的个数
uchar* hzdot;//用于存放调整好的汉字点阵的数组首地址,直接用于显示的输入
E=1;
dspon();
cls();
sets(0);
cls(); //lcd初始化
do
{
P1=5; //选中U6,装天龙八部的内码的
while(((k=*addx)&0x80)==0x0) //识别该字符是ASCII码还是汉字码,ASCII码的最高位为0
{
if(k==0) while(1);//读到末尾标记/0的时候停止,死机
if(k==0x0d)
{plie=0;
phang++;
if(phang>3) {phang=0;delay(1000);cls();}
addx+=2;
}
}
addx++;
l=*addx;
addx++; //一个汉字的内码包括2个字节,下面的算法是根据汉字的内码来计算其在字库点阵中的位置
addf=((k-161)*94+(l-161))*32; //由内码计算汉字点阵首地址,k存放内码的高8位,l存放内码的低8位
P1=addf/0x10000; //计算汉字点阵所在的rom,片选
i=(addf%0x10000); //计算在汉字点阵被选中rom中的偏移地址地址
hzdot=hz32(i); //汉字点阵转向,转好后把调整好的汉字点阵放在全局变量graph32[]中
wrhz(hzdot,phang,plie,0); //显示汉字
plie++;
if(plie>7)
{phang++;plie=0;} //列满7则行加1
if(phang>3) //行满3则翻屏
{phang=0;delay(1000);cls();}
}while(1);
}
|