如何初始化 LCD 的 4 位操作

Posted

技术标签:

【中文标题】如何初始化 LCD 的 4 位操作【英文标题】:How to initialize 4-bit operation of an LCD 【发布时间】:2014-01-11 04:44:08 【问题描述】:

我很难找到有关 LCD 控制器初始化的简洁教程。我在数据表中读到了应该发送到 LCD 的特定位序列。此处介绍了这样的初始化序列:

我根本无法理解此处提供的信息。我可以看到前几个步骤需要用户给设备上电,等待足够长的时间,然后设置几根数据线的状态。我可以通过以下方式理解:

假设我们使用如下字节格式:D7 D6 D5 D4 RS RW X X

开机 等待 >40 毫秒 写入 0011 0000 => 0x30 等待 >4.1 毫秒 写入 0011 0000 => 0x30 等待 >100uS 写入 0011 0000 => 0x30

之后我就不知道了。我浏览了数据表,发现很少解释下面显示的 N、I/D、D、B、F、C 的引用(有些未显示)。此外,我读过的任何教程都经常引用一个不确定的神秘“Function Set”(即下面的Function set: interface is 8 bits long?)。

我实际拥有的液晶显示器型号是:WH2004A-CFH-JT# 但据我了解,大多数 LCD 都是 HD44780 的衍生产品

因此,我第一次尝试初始化此显示器是为了实现该显示器的数据表中给出的序列。

有什么好的资源可以推荐吗?谁能解释一下“函数集是什么以及相关的变量B、C、F、I/D ..等等?

此外,在 4 位模式下,是否只需首先显示最高数据位(7、6、5、4)的 4 位半字节,然后输入该数据,就可以将信息发送到 LCD,然后用低位半字节重复?

【问题讨论】:

我用了大约 2 秒,谷歌,找到'设置界面数据长度(DL),显示行数(N)和字符字体(F)','读取繁忙标志( BF) 指示正在执行的内部操作并读取 CGRAM 或 DDRAM 地址计数器内容(取决于先前的指令)。'、'设置所有显示器的开/关 (D)、光标开/关 (C) 和光标位置字符的闪烁(B).'。这一切都在文档中。我知道这很令人困惑('因为硬件接口通常是这样的),但是这些常见设备上的所有数据都在那里。 @MartinJames 伟大的侦探工作!你破案了! ;-) 你知道最后一张表是不是9个独立的数据写入事件吗?还是只有5个?它们被组合在一起,但没有提及这一点。 它们是独立的写事件。 DB5中第一行的0表示下一个输入是指令的第二行。 【参考方案1】:
B ->  The character at the the cursor position blinks when B = 1
Blinking is performed by switching between all blank dots and the display character

C ->  The cursor is displayed when C = 1 and is not displayed when C = 0.
The cursor is displayed as 5 dots in the 8th line when the 5 x 7 dot character font is selected and as 5 dots in the 11th line when the 5 x 10 dot character font is selected. 

    enter code here

D ->  The display is ON when D = 1 and OFF when D = 0. The DD RAM contents remain unchanged.    

Function set specifies of 
    1. DL -> number data length (4 bit or 8 bit) 
        Data sent or received in 8 bit lengths (DB7-DB0) when DL = 1
        Data sent or received in 4 bit lengths (DB7-DB4) when DL = 0 
    2.N -> Sets number of display lines.
    3.f -> Sets character font.

After setting function set , set CGRAM Address and DDRAM Address (Refer Data Sheet)

表示检查BF标志的读写操作是否执行。

这可能会对你有所帮助...

【讨论】:

以上是关于如何初始化 LCD 的 4 位操作的主要内容,如果未能解决你的问题,请参考以下文章

为树莓派3B添加LCD1602液晶屏

带 Atmega32 的 4 位 4x20 LCD

AM335X用RGB888连接LCD如何以16位色彩模式显示图片

用Booth算法计算-4×3的4位补码乘法运算,要求写出每一步运算过程及运算结果 麻烦详细说明每一步的操作

如何使用 C++ 中的位操作从长变量中破译 4 个短变量?

如何使用位掩码来允许/禁止某些位的操作