📄 zk.c
字号:
/*
************************************************************************************************
* Name :
* Describe : 从字库中读出指定个数据。主要是分页方面的考虑
* Input : 汉字机内码,点阵缓冲。
* Output :
* Create by : xuyong Date:2003年11月26日 星期三 20:49:52
* Moid by : Date:
************************************************************************************************
*/
bit ZkRdMem(uchar Page,uint Addr,uchar xdata *Dst,uchar Cnt)
{
uchar i;
Page<<=1;
if (Addr >=0x8000)
{
Page ++;
}
else
{
Addr|=0x8000;
}
SelectZKROM(Page);
for(i=0; i<Cnt ; i++)
{
Dst[i] = XBYTE[Addr++];
if ((Addr/256)==0)
{
Page++;
if (!SelectZKROM(Page))//未选中页则返回
{
return 0;
}
Addr|= 0x8000;
}
}
return 1;
}
/*
************************************************************************************************
Name : void OzkGetHzDoint(uint HzCode,uchar xdata *mychinese)
Describe : 得到汉字点阵。14×16纵向取模的点阵。字节倒序
上面14个字节在前,下面14字节在后。
Input : 汉字机内码,点阵缓冲。
Output : void
Create by : xuyong Date:2003年01月05日 星期日 00:49:25
Moid by : Date:
************************************************************************************************
*/
void OzkGetHzDoint(uint HzCode,uchar xdata *mychinese)
{
uchar idata HighCode;
uchar idata LowCode;
// uchar xdata *data RDMODE;
// uchar xdata *data Ptr;
// uchar idata ct;
uint i;
uchar idata addrBuf[3];
//uchar xdata temp[28];
idata union hzk1
{
ulong HZKADRA;
struct hzk2
{
uchar HZKADRH;
uchar HZKADRM;
uint HZKADRL;
}HZKADR;
}HZKADRS;
HighCode=(uchar)(HzCode/0x100);
LowCode=(uchar)(HzCode%0x100);
HZKADRS.HZKADRA=((HighCode-0xa1)*94+(LowCode-0xa1))*28L; //得到数据起始地址。(由区位码*32字节/汉字)。
/*LowCode =0x40+HZKADRS.HZKADR.HZKADRM*2; //计算页面
if (HZKADRS.HZKADR.HZKADRL>=0x8000)
{
LowCode++;
}
XBYTE[ADDR_EX]=LowCode; //选择页面
RDMODE=HZKADRS.HZKADR.HZKADRL|0x8000; //地址
//Ptr*/
addrBuf[0]=(HZKADRS.HZKADRA/0x10000)%256;
addrBuf[1]=(HZKADRS.HZKADRA%0x10000)/256;
addrBuf[2]=HZKADRS.HZKADRA%256;
i= addrBuf[1]*256+addrBuf[2];
ZkRdMem(addrBuf[0],i,mychinese,14);
*(mychinese+14)=0;
*(mychinese+15)=0;
ZkRdMem(addrBuf[0],i+14,mychinese+16,14);
*(mychinese+30)=0;
*(mychinese+31)=0;
SelectRAM0();//XBYTE[ADDR_EX]=0;
}
显示程序如下:
/*
************************************************************************************************
Name : uchar LCMDisp1Chinese(uchar x,uchar y,uint Chinese,bit Type)
Describe : 在指定位置显示一个汉字,
Input : 位置坐标,汉字机内码。
Output : 1--》显示正确, 0---》显示错误或坐标错误。
Create by : xuyong Date:2003年01月14日 星期二 16:50:31
Moid by : Date:
************************************************************************************************
*/
uchar LCMDisp1Chinese(uchar x,uchar y,uint Chinese,bit Type)
{
uchar idata temp;
uchar idata i;
uchar idata j,k;
uchar idata ch;
uchar xdata rdhzk[32];
uchar xdata *Ptr = rdhzk;
if ((x>23)||(y>7))
{
return 0;
}
OzkGetHzDoint(Chinese,rdhzk);
x*=2 ;
temp = x;
LCMSetXY(x,y);
for (i=0;i<2;i++)
{
/*for(j=0;j<16;j++)
{
ch = *Ptr++;
if (Type==1)
{
ch = ~ch;
}
LCMWriteCD(1,ch);
if ((j&7) ==7)
{
x++;
LCMSetXY(x,y);
}
}*/
for(k=0;k<4;k++)
{
for(j=0;j<4;j++)
{
ch = *Ptr++;
if (Type==1)
{
ch = ~ch;
}
LCMWriteCD(1,ch);
}
x++;
LCMSetXY(x,y);
}
x = temp;
y++;
LCMSetXY(x,y);
}
/*
LCMSetXY(x,y);
for(j=0;j<16;j++) //显示上面半个汉字
{
//for(i=0;i<8;i++)
{
LCMWriteCD(1,*Ptr++);//rdhzk//rdhzk[i+j*8]
}
if (j ==7)
{
LCMSetXY(x+1,y);
}
}
LCMSetXY(x,y);
LCMWriteCD(0,0xb8+y*2+1);
for(j=0;j<16;j++) //显示下面半个汉字
{
//for(i=0;i<8;i++)
{
LCMWriteCD(1,*Ptr++);//rdhzk//rdhzk[i+j*8]
}
if (j ==7)
{
LCMSetXY(x+1,y);
LCMWriteCD(0,0xb8+y*2+1);
}
}
*/
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -