⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zk.c

📁 14*14点阵
💻 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 + -