📄 ziku.c
字号:
/*************************************
文件名:ziku.c
功 能:处理编码转换和与字库相关的操作
*************************************/
#include <W77C32.h>
#include <absacc.h>
#include "hal.h"
#include "ziku.h"
#include "unicode.h"
//把unicode码转换为其在GB2312字库中的地址
ulong UNI2CBSP(uint hanzi)
{ulong abspad;
uchar x,y;
for(y=0;y<72;y++)
{for(x=0;x<96;x++)
{if(hanzi==Unicode[y][x])
{break;}
}
if(hanzi==Unicode[y][x])
break;
}
abspad=((ulong)(((y+0x0f)*94)+(x-1)))*32;
return(abspad);
}
//两个ASCII码转为单字节
uchar DoubleAscii2Byte(uchar ValH,uchar ValL)
{
uchar cHigh,cLow;
if(ValH >= '0' && ValH <= '9')
{
cHigh = (ValH-'0')<<4;
}
else if(ValH >= 'A' && ValH <= 'F')
{
cHigh = (ValH-'A'+10)<<4;
}
else if(ValH >= 'a' && ValH <= 'f')
{
cHigh = (ValH-'a'+10)<<4;
}
else
cHigh = 0;
if(ValL >= '0' && ValL <= '9')
{
cLow = (ValL-'0');
}
else if(ValL >= 'A' && ValL <= 'F')
{
cLow = (ValL-'A'+10);
}
else if(ValL >= 'a' && ValL <= 'f')
{
cLow = (ValL-'a'+10);
}
else
cLow = 0;
return ((cHigh & 0xf0)+(cLow & 0x0f));
}
//设置分页,获取总线地址
uint DEAL_BANK(ulong zkad)
{PAGE0 = zkad&0x008000;
PAGE1 = zkad&0x010000;
PAGE2 = zkad&0x020000;
return((uint)zkad&0x7f);
}
//计算出最终的显示数据
void GET_DISDATA(void)
{uint i;
uchar j;
for(i=0;i<datalen;i+=2)
{databuff[i/2]=DoubleAscii2Byte(databuff[i],databuff[i+1]);}
for(i=0;i<datalen/2;i+=2)
{for(j=0;j<32;j++)
disdata[i*16+j]=XBYTE[DEAL_BANK(UNI2CBSP((uint *)(&databuff)[i]))+j];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -