您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
bd hd(透彻理解液晶显示模组LCD1602指令集与驱动编程(1))
地址,字模,数据bd hd(透彻理解液晶显示模组LCD1602指令集与驱动编程(1))
发布时间:2019-02-08加入收藏来源:互联网点击:
-
光标的位置由地址计数器(AC)决定,由于AC=0,所以光标出现在左上角。
执行“0xF”指令后还显示了两行字符“join weixin mp XXXXX”,我们可以查看“内存窗口”中对应的字模地址。例如,0x01地址中数据为0x6A,也就是小写字母“j”的字模地址,其它依此类推。我们买到的真实LCD1602模组当然不会显示这两行字,然而即便如此,我们通常也会习惯使用一条清屏指令(Clear Display)清除屏幕的显示内容,因为上电之后DDRAM中的数据可能是乱码,相应的指令如下所示:
清屏,顾名思义,一旦执行该指令,屏幕上不会有任何内容显示。实际上,清屏指令把所有DDRAM地址中的数据都设置为0x20。
有些人可能会想:为什么不全部设置为0x00呢?因为前面已经提过,DDRAM中的数据代表的是字模地址,而不是字模本身。我们看看前面的CGROM字模表,0x20(0b0010_0000)恰好对应一个空白的字模(实际上,0x20就是空格的ASCII码),这样也就可以清除屏幕显示。
我们在之前的预置数据后再添加了一条指令“0x1”,单步运行后的效果如下图所示:
可以看到,“内存窗口”中的有DDRAM地址的数据全部都修改为0x20,但是原来光标状态还是不变的,该显示的显示,该闪烁的还是闪烁,因为光标不属于显示内容,只不过其位置总会回到左上角(如果原来没在左上角的话),数据手册对此已经明确说明,如下图所示:
这段说明中还提到了I/D位(Increment/Decrement)与S位(Shift),这就要涉及到另一条“进入模式设置(Entry mode set)”,如下图所示。
前面我们不是说过,想往哪个DDRAM地址写数据就需要先设置AC吗?现在我们要写一行16个字符,如果每写一个字符都要使用指令设置一下DDRAM地址,是不是很麻烦?HD44780允许我们往(从)DDRAM地址写(或读)数据后,将AC自动加1(I/D=1)或减1(I/D=0),这样如果你要写一行字符,只需要确定首地址就可以了,是不是很方便?由于光标的位置取决于AC,如果光标显示已经打开,当你往DDRAM连续写入字符时,光标位置也会随之移动。
现在我们要从左上角开始写入字符串“dzzzzcn”,首先从CGROM字模表中找到小写字母“d”、“z”、“c”、“n”对应的字模地址分别为“0x64”、“0x7A”、“0x63”、“0x6E”、,然后在VisualCom软件中再接着添加7个预置数据,即“0x64”、“0x7A”、“0x7A”、“0x7A”、“0x7A”、“0x63”、“0x6E”,如下图所示:
运行后的效果如下图所示:
有人可能会想问:没看到你使用DDRAM地址设置指令呀?也没有使用“进入模式设置”指令设置地址增加模式,怎么它就会从左上角(0x00)开始写起呢?因为我们已经使用的清屏指令,它会把AC清零,并且它还会将I/D位设置为1(地址增加模式)。
S位用来控制移屏功能的开启与否。移屏是个神马东西?其实跟卷屏差不多,只不过卷屏通常是显示内容上下卷动,而HD44780只有两行,它的移屏方向要么左(I/D=1)要么向右(I/D=0),你想要开启它,只要将S位设置为1即可,数据手册说明如下:
注意该段说明中有句话:如果S=1,看起来光标没有移动但屏幕移动了。这是什么意思呢?我们仿真一下不就知道了,将预置数据修改如下:
我们只是在写数据前插入了一条“进入模式设置”指令(0x5),它打开了移屏功能,并且将I/D设置为0。也就是说,每往DDRAM写一个数据,地址会自减1,而且会往右移屏。
我们来看看相应的仿真效果,如下图所示。
运行结果似乎有点耐人寻味?怎么会是这样的呢?其实并没有错,因为我们设置了地址自减模式,而清屏后的AC=0,那么你再写一个数据,它减到哪里去了?就跳到第一行DDRAM的尾地址0x27(而不是0xF)。我们前面已经提过,LCD1602只使用了32个DDRAM地址(第一行0x00~0xF、第二行0x40~0x4F),所以在正常情况下,当你往DDRAM地址0x27写入字模地址时,屏幕上是不会显示相应的字模,对不对?
但是由于你开启了右移屏指令,当你写第一个字母d的时候,AC指向了DDRAM地址0x27,同时往右移了一次屏,所以此时屏幕最左侧对应的DDRAM地址就是0x27(第一行)与0x67(第二行),而不再是原来的0x0与0x40,更不是正常情况下LCD1602最右侧对应的DDRAM地址0xF与0x4F。
当你全部写完“dzzzzcn”字符串后,光标所在的位置(AC)就是0x21。也就是说,你写7个字符的同时也往右移了7次屏。看到没有,光标原来的位置并没有改变就是这个意思。
如果我们把地址模式改为自加模式(“进入模式指令”为0x7),写入同样的数据会出现什么结果呢?自加模式下为左移屏,每写一次数据左移一次,所以最后的结果应该是:从显示屏上来看,相当于什么都没写。我们来看看仿真的结果,如下图所示:
好像跟清屏后的效果一样呀!但是请注意,现在的AC值为0x7,从“内存窗口”可以看到,DDRAM地址0x00~0x07中还是写入了“dzzzzcn”的字模,只不过由于写数据的同时往左移了7次屏,所以看起来好像什么都没写一样。
好的,剩下的指令我们后续有机会再来讨论吧,么么哒~~
本文到此结束,希望对大家有所帮助呢。
上一篇:bb霜哪个牌子好(兰蔻、兰芝、巴黎欧莱雅,凭什么入榜bb霜十大品牌?)
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |