教你学会ST7920的液晶显示模组LCM12864自定义字模(教你学会ST7920的液晶显示模组LCM12864自定义字模)

Hello,大家好,公众号曾经发布了一篇《基于ST7920的液晶显示模组LCM12864之指令篇》,它详尽讲述了芯片ST7920内部DDRAM与屏幕的对应关系,以及如何让相应的模组显示字库中的字符,文章最终的效果类似下图所示。其中,前三行字符是由两个字节的GB2312编码从CGROM(Character Generator ROM,字符生成只读存储器,简单地说,就是一个字库)中查询获得,每个字符由16X16点阵构成,而最后一行是从半宽字符生成只读存储器(HCGROM, Half height CGROM)中查询获得,每个字符由16X8点阵构成(两个字符拼成16X16点阵)。很明显,这些显示的字符都是字库中已经存在的,但是如果想要显示的字符并不存在于字库中,该怎么办呢?我们可以自定义字模,这就是本文讨论的内容。

教你学会ST7920的液晶显示模组LCM12864自定义字模(教你学会ST7920的液晶显示模组LCM12864自定义字模)(1)

为了保证文章的完整性,我们再次简单回顾一下ST7920内部存储器的基本构成。DDRAM是数据显示存储器(Data Display RAM),该存储器的每个单元都是16位(2个字节),当你往其中写入2个字节的字模地址(不是字模本身,先写高字节,后写低字节),屏幕上就会显示相应字库中定义的字符。

GDRAM为图形显示存储器(Graphic Display RAM),与DDRAM不同,我们往其中写入的数据就是字模本身(每次同样写入2个字节,先写高字节,再写低字节),这16位数据就代表屏幕像素的亮灭(0为灭,1为亮)。使用GDRAM也可以显示字库中不存在的字符,但这并非本文的关注点,后续有机会再来讨论。CGRAM也表示字符生成存储器,本质上也是一个字库,只不过我们能够将自己定义的的字模数据写入进去,然后再将相应的字模地址写入到DDRAM即可显示自定义字符。

这里重点强调一下CGRAM与DDRAM的区别DDRAM中的数据只是字模地址,也就是字符相应字模数据的索引,而CGRAM(或CGROM)中字模数据才是真正显示的内容。就如同图书馆一样,CGRAM(或CGROM)中的数据就相当于图书本身,而图书都有一个索引号,这个索引号就相当于DDRAM中的内容(GDRAM中的内容也相当于图书本身,但这些图书没有索引)。如果要让模组显示字库中不存在的字符(就相当于你想借一本图书馆中不存在的图书),就必须首先在CGRAM中创建这个字符(就相当于将图书归入图书馆系统中),然后再将该字符的索引号写入到DDRAM即可(就相当于通过图书的索引号找到相应的图书)

ST7920允许用户自定义4个16×16点阵的字符,如下图所示,它们的字模地址分别为0x0000、0x0002、0x0004、0x0006(因为仅B1与B2位有效,相应的值为00,01,10,11,而B0是无效的),它们分别各自代表右侧16个连续CGRAM地址中的数据(整个CGRAM地址空间为0x00~0x3F)。也就是说,如果你想在屏幕上显示自定义的“电”字,则往DDRAM中写入的2个字节数据依次为0x00与0x00。如果想显示汉字“子”,则需要往DDRAM中依次写入0x00与0x02(先写高字节,再写低字节)

教你学会ST7920的液晶显示模组LCM12864自定义字模(教你学会ST7920的液晶显示模组LCM12864自定义字模)(2)

那字模数据到底以何种顺序写入到CGRAM呢?同样是以2个字节为一个单位写入,完整的一个汉字应该由32个字节构成。以汉字“电”为例,相应的CGRAM数据由左至右(先高字节,再低字节)、从上至下如下图所示。

教你学会ST7920的液晶显示模组LCM12864自定义字模(教你学会ST7920的液晶显示模组LCM12864自定义字模)(3)

好的,现在开始正式自定义字模!基本思路是,首先需要使用指令定位CGRAM地址到0x00(当然,也可以是0x20、0x40、0x60,只需要注意字模地址不同,但是切勿写入到类似0x21、0x42、0x65等低4位非零的CGRAM地址,因为这样一来,一个完整的汉字字模数据会分别对应2个字模地址,后续显示出来的汉字肯定是不完整的)。当字模数据写入完成后,再使用指令定义到DDRAM地址,最后写入字模地址(此处为0x0000)即可,我们来看看相应发送的数据,如下图所示。

教你学会ST7920的液晶显示模组LCM12864自定义字模(教你学会ST7920的液晶显示模组LCM12864自定义字模)(4)

其中,设置CGRAM地址指令0x40表示将当前地址计数器指向CGRAM地址0x00,接下来写入32个字节的字模数据后,再将DDRAM首地址设置为代表屏幕左上角的0x80即可显示相应的字符,最后的效果如下图所示(后续写入的“欢迎关注”等汉字依次右移)

教你学会ST7920的液晶显示模组LCM12864自定义字模(教你学会ST7920的液晶显示模组LCM12864自定义字模)(5)

放大后的效果如下图所示:

教你学会ST7920的液晶显示模组LCM12864自定义字模(教你学会ST7920的液晶显示模组LCM12864自定义字模)(6)

关联阅读:基于ST7920的液晶显示模组LCM12864之指令篇

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页