📄 hzcl.c
字号:
/************************UCDOS的HZK16汉字点阵为横向,在LGM12641中显示为乱码,
必须对其处理,此文件实现功能:汉字点阵处理,汉字在LCD上显示方式*****/
uchar a,b; //中间变量
uchar graph8[8];//1/4汉字点阵暂存数组
uchar graph32[32];//全汉字点阵数组,graph32存放了完整的经过调整的16*16汉字点阵
/***********写汉字子函数,使LCD按4行,8列方式显示
word[]为32位数组,包含16*16汉字点阵信息。
i为行(取值范围0-3)。
j为列(取值范围0-7)。
reverse=1表示所显示的汉字反色(黑底白字),=0则正常显示(白底黑字)********************/
void wrhz(uchar word[],uchar i,uchar j,bit reverse)
{
uchar k,z,s;
setp(i*2);//LCD的页数刚好是汉字行数的2倍,即汉字第0行是从第零页开始,汉字第1行是从第二页开始
// if(reverse)
// {
// for (s=0;s<32;s++) {word[s]=~word[s];};
// } //这里我想反色,但怎么也调试不过,请各位高手指点
if(j>=4)
{
j=j-4;
k=2;//从第4个汉字以后,就是写入右半屏了
}
else
{
k=1;
}
setc(j*16);
for(z=0;z<16;z++)
{
wrd(word[z],k);
}//先写左上、右上的16字节
setp(i*2+1);
setc(j*16);
for(z=0;z<16;z++)
{
wrd(word[(z+16)],k);
}//再写左下,右下的16字节
}
/************1/4汉字点阵生成函数
功能:给定汉字的地址,则读出汉字,
把HZK16的点阵格式转换为本LCD的显示格式**********/
//输入:被读取点阵的起始地址
//输出:修改全局变量graph8[]
void hzof(uchar xdata *addc,uchar offset)
{
uchar word[8]; //中间变量
uchar map[8]; //中间变量
uchar xdata *bddc; //中间变量
uchar i;
uchar j;
uchar k; //中间变量
for(i=0;i<8;i++)
{
graph8[i]=0;
}
bddc=addc+offset;
for(i=0;i<8;i++)
{
word[i]=*bddc;
bddc=bddc+2;
}//把第0、2、4、6、8、10、12、14字节(即一个汉字的左上角部分)读出,暂存于word[]中
for(j=0;j<8;j++)
for(k=0;k<8;k++)
{
map[k]=word[k]<<j;
map[k]=map[k]>>7;
map[k]=map[k]<<k;
graph8[j]=graph8[j]+map[k];
}//将word[]”转置,存放于graph8[]中
}
/**********************生成一个完整的汉字点阵*********/
//输出:修改全局变量graph32[],graph[]存放点阵的顺序是左上、右上、左下、右下(各8字节,共32字节)
char* hz32(uchar xdata *addc)
{
uchar i;
hzof(addc,0);
for(i=0;i<8;i++)
{
graph32[i]=graph8[i];
}
hzof(addc,1);
for(i=0;i<8;i++)
{
graph32[i+8]=graph8[i];
}
hzof(addc,16);
for(i=0;i<8;i++)
{
graph32[i+16]=graph8[i];
}
hzof(addc,17);
for(i=0;i<8;i++)
{
graph32[i+24]=graph8[i];
}
return graph32;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -