搜索
bottom↓
回复: 8

请傻孩子指教SED1335的CGRAM如何使用?

[复制链接]

出0入0汤圆

发表于 2009-5-11 09:26:50 | 显示全部楼层 |阅读模式
我想在文本方式下显示中文,在自建CGRAM后,显示乱码.不知道问题出在哪里?我怀疑是自己对光标使用不理解,还有就是CGRAM实际地址的计算.
1)在向CGRAM写汉字点阵时,先确定地址为cgram_addr+0x80*8+i,i表示汉字点阵第i个字节.这样对吗?
2)再确定光标移动方向为向右,这点我就不明白,是不是在写CGRAM时,不要使用光标自动移动?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入296汤圆

发表于 2009-5-11 10:25:34 | 显示全部楼层
SD1335我还是2008年用的,现在已经记不太清楚了。
你在文本模式下,用它自己的8*8字体显示正确么?

出0入0汤圆

 楼主| 发表于 2009-5-11 20:54:17 | 显示全部楼层
其他都正常,主要我希望所有文字和ASCII都在文本下显示,这个论坛可能很多人遇到这问题无法解决.主要是数据手册对CGRAM描述有点模糊.

出0入296汤圆

发表于 2009-5-11 21:00:18 | 显示全部楼层
你看得是中文数据手册还是E文数据手册?

出0入0汤圆

 楼主| 发表于 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);   
   
}

出0入0汤圆

发表于 2009-5-13 10:42:54 | 显示全部楼层
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=0;i<8;i=i++)send_dat(Cdotlib);//Cdotlib是"束"的点阵库,由上向下由左向右取模 ,这是写左上               
    for (i=8; i<16; i=i++)send_dat(Cdotlib); //__________这是写左下

不知道为何不用8×16的字符模式?

出0入0汤圆

 楼主| 发表于 2009-5-13 13:26:36 | 显示全部楼层
5楼说的好,看来是个内行,我也用过8X16.同样不行.还请关照下啊!

出0入0汤圆

 楼主| 发表于 2009-5-14 09:27:41 | 显示全部楼层
问题已经解决,过段时间将完整的程序上传.

出0入0汤圆

发表于 2010-4-14 11:06:15 | 显示全部楼层
什么原因???
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 06:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表