|
楼主 |
发表于 2009-5-13 10:32:18
|
显示全部楼层
现在我可以证明字型代码已经成功写入CGRAM,8X8共四个块(左上+左下+右上+右下),比如我显示"束"左上字型时,显示的是两个垂直的,多了一半.程序如下:
/*************************************************
建立 cgram,将显示字符送入cgram中
入口参数约定:Base.... 起始 参考A
*************************************************/
void BuildCgram(void)
{
uchar i;
send_cmd(cgram); //写设置CGRAM开始地址命令
Write16BitData(cgram_adr); //写设置CGRAM地址命令的参数+0x80*8????
send_cmd(csrw); //光标定位
Write16BitData(cgram_adr+(uint)0x80*8); //写设置光标地址命令的参数
send_cmd(csrdir_down); //光标向右移动
send_cmd(mwrite);
for (i=0;i<16;i=i+2)send_dat(Cdotlib);//Cdotlib是"束"的点阵库,由上向下由左向右取模 ,这是写左上
for (i=1; i<16; i=i+2)send_dat(Cdotlib);
for (i=16;i<32; i=i+2)send_dat(Cdotlib);
for (i=17;i<32; i=i+2)send_dat(Cdotlib);
}
/****************************************************************************
汉字写入子程序(文本方式)
在文本方式下显示汉字, 首先要建立汉字Cgram, 要定义汉字代码.
在文本方式下写汉字需要写入4 个代码以组成一个汉字
每8字节组成一个点阵Ascii小区,4个小区组合成一个汉字所以需要4个代码 参考B
*****************************************************************************/
void PutCdotInAlpha( uint x, uint y)
{
uint temp;
uchar i;
uchar code_number=0x80;
temp=y*xsize+x;
send_cmd(csrdir_down);
send_cmd(csrw); // 写入“光标地址 CSR 设置”命令
Write16BitData(temp); //设置光标地址 CSR =计算得到的光标地址
send_cmd(mwrite); // 写入“连续写入显示数据”命令
send_dat(code_number) ; // 写入汉字的左上部?这个地方出问题,实际显示的是相同的两个左上部,一上一下排列
//send_dat(code_number+1);
//send_dat(code_number+2);
//send_dat(code_number+3);
} |
|