12864 显示汉字

Volftooth 2011-04-30 06:18:55
比如说显示一个 12*12 的汉字、取模出来是 12*16、
如果从第 0 页写起、则第 1 页只用写 4 个 bit 就可以了、
如果第一页后 4 个字节本来就有数据就会覆盖掉、

现在有种方法是读-修改-写、就是把显示 RAM 中的数据读回和原始数据做或运算后再写回、
对于每页从第 0 行写来说可行、还比较方便、
但是说如果我不从第 0 行写起、从第3行写起、那么我原本的数据要拆成两段、一段显示在上面一页、一段显示在下面一页、
这样就非常麻烦、有没有简单点的方法、
0
1
第 2
3 0
0 4 1
5 0
页 6 1
7 0
-------------------------------
0 1
1 1
第 2 0
---------------到这里是 8 个字节
3 0
1 4 1
5 1
页 6 0
7
...全文
426 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bateagle 2011-05-06
  • 打赏
  • 举报
回复
最近实验刚好用到12864液晶,弄懂了一点,或许能帮到你
一般汉字都是用的16*16点阵,网上有很多取字模的软件,下载一个
液晶扫描的时候,我观察的是两页一起,比如说先扫描0,1页,然后2,3,然后4,5,最后6,7.
写数据的时候顺序
x轴行,y轴页,设其实地址(0x00,0x00)则
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15(点)
0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31

1 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32
(页)
每一个汉字点阵对应32个元素,即为上面顺序。
假设一个汉字
A[] = {0x40,0x08,0x7C,0x87,0x40,0x40,0xFF,0x2F,0x48,0x10,0x6C,0x0F,0x4A,0x80,0xF2,0x8F,
0x12,0x40,0x1A,0x20,0xD6,0x1F,0x12,0x20,0x12,0x40,0xFB,0xCF,0x12,0x00,0x00,0x00}
void disp_word(xpos, ypos, uchar m)
{
uchar i,data_out;
for(i = 0; i < 16; i++)
{
data_out = disp_code[i*2+m*32];
lcdwrite(xpos+i,ypos,data_out);
delay(50);
data_out = disp_code[i*2+1+m*32];
lcdwrite(xpos+i,ypos+1,data_out);
delay(50);
}
}
按照上面的思想,应该就没问题
天亮后说晚安 2011-05-06
  • 打赏
  • 举报
回复
+1
[Quote=引用 5 楼 lbing7 的回复:]
同楼上

喜欢16*16的汉字字模

这样处理起来方便些

分上下两部分的8位*16,然后直接贴进去就可以
[/Quote]
lbing7 2011-05-06
  • 打赏
  • 举报
回复
同楼上

喜欢16*16的汉字字模

这样处理起来方便些

分上下两部分的8位*16,然后直接贴进去就可以
dceacho 2011-05-04
  • 打赏
  • 举报
回复
没用过12864,只用过增强51做过LCD点阵的汉字显示,是有1.7K的XDATA
开辟出一个"显存"区,处理上会简单很多
例如如果是320*240的点阵
xdata uchar disram[40][30]
rahpven 2011-05-04
  • 打赏
  • 举报
回复
如果字不多可以改成逐个点逐个点的写,一个16*16的字模要写16*16次,每次写点 读-修改-读
pengjiang8508 2011-05-04
  • 打赏
  • 举报
回复
没太看懂你的意思,不过一般12864中都带中文字库的,按照lcd地址进行汉字的显示就可以了...

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧