搜索
bottom↓
回复: 8

纠结了2天1602的cgram,请指教

[复制链接]

出0入0汤圆

发表于 2011-8-16 11:21:54 | 显示全部楼层 |阅读模式
DD RAM DATA
CHARACTER CODES   CGRAM ADDRESS      CGRAM DATA PETERNS
7 6 5 4 3 2 1 0    5 4 3 2 1 0           7 6 5 4 3 2 1 0
LLLLXLLL                L L L                L H H H H
                        L L H                H L L L L
                        L H L                H L L L L
                        L H H                L H H H L
                   LLL  H L L            XXX L L L L H
                        H L H                L L L L H
                        H H L                H H H H L
                        H H H
    zhey这样显示的就是一个S型
自编字形的列位置对应于CGRA DATA 的0—4 位,行位置对应于
CGRAM ADDRESS 的0—2 位 这个是咋么对应的,还有1602两行5*8的单元格一共有32个,我想问就是自定义的单元格最多是可以定义多少个
希望哪个知道的告诉我一下 ,先谢谢了

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-8-19 09:58:00 | 显示全部楼层
我也不是很确定对不对先暂时说下把

1602 是只能显示16个字符,能显示两行
一个字符是8位
内部RAM地址映射表如下
第一行  00H 01H 02H 03H ......27H
第二行  40H 41H 42H 43H ......67H
当我们向00-0F,40H-4FH地址的任何一位写入数据时可以立即显示出来
但是将数据写到10-27H,50-67H的时候必须通过特别指令移位移动到正常的显示区域。

出0入0汤圆

发表于 2011-8-19 10:07:17 | 显示全部楼层
你说的是自己编汉字啊
注意它最多只能写八个汉字,一个汉字是连个字节。
一个字要用到上下两行

出0入0汤圆

发表于 2011-8-19 10:37:33 | 显示全部楼层
我正好刚研究完1602的CGRAM。具体是这样的

1602总共有8x8字节的CGRAM,如果用5x8点阵,就只能写8个字,如果用5x11点阵就只有4个字了。
就是说有8个CGRAM,每个CGRAM有8个字节的空间,这8个字节对应着5x8点阵的8行。
定义好的字符对应的DDRAM地址是0x00-0x07,直接调用就好。

我举个例子:

unsigned char code chs[][8]={             //LCD自造字符数据
0x04,0x04,0x04,0x07,0x04,0x04,0x1f,0x00,  //上
0x1f,0x04,0x04,0x06,0x05,0x04,0x04,0x00};//下
unsigned char code cgramaddr[][8]={          //CGRAM地址
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,  //第一个
0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};//第二个

char i;

for(i=0;i<2;i++)                          //循环写入第一个和第二个CGRAM
{
        for(j=0;j<8;j++)
        {
                lcdwrite_cmd(cgramaddr[j]);//lcdwrite_cmd是1602命令写入子函数
                lcdwrite_dat(chs[j]);      //lcdwrite_dat是1602数据写入子函数
        }
}

//1602经过初始化之后可以直接执行下列函数

lcdwrite_dat('a'); //这是直接写入字符a
lcdwrite_dat(0x61);//通过写入DDRAM地址显示字符a
lcdwrite_dat(0x00);//写入DDRAM地址显示第一个自定义字符
lcdwrite_dat(0x01);//写入DDRAM地址显示第二个自定义字符

出0入0汤圆

发表于 2011-10-19 23:23:25 | 显示全部楼层
mark.

出0入0汤圆

发表于 2011-10-20 22:24:20 | 显示全部楼层
可以显示汉字,不过要自定义字库。挺麻烦的。效果不好。

出0入0汤圆

发表于 2011-10-25 19:00:14 | 显示全部楼层
一行最多只能显示32位,再多了就会乱码呀

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-27 01:14

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

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