电子说
在电子设备的设计中,液晶显示模块是不可或缺的一部分,它为用户提供了直观的信息交互界面。今天我们就来详细解析Newhaven Display International推出的NHD - 0420DZ - NSW - BBW字符液晶显示模块。
NHD - 0420DZ - NSW - BBW是一款具有4行20字符显示能力的液晶显示模块。其型号中的每个部分都有特定含义:
产品符合RoHS标准,这意味着它在生产过程中限制了有害物质的使用,更加环保。
| 该模块共有16个引脚,每个引脚都有其特定的功能: | 引脚编号 | 符号 | 外部连接 | 功能描述 |
|---|---|---|---|---|
| 1 | VSS | 电源地 | 提供电源接地 | |
| 2 | VDD | 电源 | 逻辑供电电压(+5.0V) | |
| 3 | V0 | 电源 | 对比度供电电压(约0.5V) | |
| 4 | RS | MPU | 寄存器选择信号,RS = 0为命令,RS = 1为数据 | |
| 5 | R/W | MPU | 读写选择信号,R/W = 1为读,R/W = 0为写 | |
| 6 | E | MPU | 操作使能信号,下降沿触发 | |
| 7 - 10 | DB0 - DB3 | MPU | 低4位双向三态数据总线,4位操作时不使用 | |
| 11 - 14 | DB4 - DB7 | MPU | 高4位双向三态数据总线 | |
| 15 | LED + | 电源 | 背光阳极(5V时48mA) | |
| 16 | LED - | 电源 | 背光 |
推荐使用2.54mm间距的引脚作为LCD连接器,不过文档中未提及背光连接器的具体信息。
| 项目 | 符号 | 条件 | 最小值 | 典型值 | 最大值 | 单位 |
|---|---|---|---|---|---|---|
| 工作温度范围 | TOP | 绝对最大 | -20 | - | +70 | °C |
| 存储温度范围 | TST | 绝对最大 | -30 | - | +80 | °C |
| 电源电压 | VDD | - | 4.5 | 5.0 | 5.5 | V |
| 电源电流 | IDD | VDD = 5.0V | 1.0 | 1.2 | 1.5 | mA |
| LCD供电(对比度) | VLCD | TOP = 25°C | 4.4 | 4.5 | 4.6 | V |
| “H” 电平输入 | VIH | - | 0.7 * VDD | - | VDD | V |
| “L” 电平输入 | VIL | - | VSS | - | 0.6 | V |
| “H” 电平输出 | VOH | - | 3.9 | - | VDD | V |
| “L” 电平输出 | VOL | - | VSS | - | 0.4 | V |
| 背光电源电压 | VLED | ILED = 48mA | 4.9 | 5.0 | 5.1 | V |
| 背光电源电流 | ILED | - | 15 | 48 | 60 | mA |
需要注意的是,背光采用电流驱动,不要超过60mA,因为亮度与背光电源电流直接相关。
| 项目 | 符号 | 条件 | 最小值 | 典型值 | 最大值 | 单位 | |
|---|---|---|---|---|---|---|---|
| 最佳视角 | 顶部 | ϕY + | CR ≥ 2 | - | 20 | - | ° |
| 底部 | ϕY - | - | 40 | - | ° | ||
| 左侧 | θX - | - | 30 | - | ° | ||
| 右侧 | θX + | - | 30 | - | ° | ||
| 对比度 | CR | - | - | - | 3 | - | |
| 响应时间 | 上升 | TR | TOP = 25°C | - | 150 | 200 | ms |
| 下降 | TF | - | 150 | 200 | ms |
| 模块内置ST7066U控制器,其DDRAM地址有特定的分布: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 13 | 14 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 00 01 02 03 04 05 06 | 07 08 | 09 | 0A 0B 0C 0D 0E 0F 10 11 12 13 | |||||||||||
| 40 41 42 43 44 45 46 | 47 48 | 49 | 4A 4B 4C 4D 4E 4F 50 51 52 53 | |||||||||||
| 14 15 16 17 18 19 1A 1B 1C 1D 1E | 1F | 20 | 21 | |||||||||||
| 54 55 56 57 58 59 5A 5B 5C 5D 5E | 5F | 60 | 61 |
| 该模块有多种指令,不同指令的代码和执行时间如下: | 指令 | 指令代码(RS、R/W、DB7 - DB0) | 描述 | 270 KHZ执行时间(fOSC = ) |
|---|---|---|---|---|
| 清屏 | 0 0 0 0 0 0 0 0 0 1 | 将 “20H” 写入DDRAM,并将DDRAM地址从AC设置为 “00H” | 1.52ms | |
| 返回主页 | 0 0 0 0 0 0 0 0 1 - | 将DDRAM地址从AC设置为 “00H”,如果光标已移动则返回原始位置,DDRAM内容不变 | 1.52ms | |
| 输入模式设置 | 0 0 0 0 0 0 0 1 I/D SH | 设置光标移动方向并指定显示移位,在数据读写时执行 | 37µs | |
| 显示开/关控制 | 0 0 0 0 0 0 1 D C B | D = 1:整个显示开启;C = 1:光标开启;B = 1:闪烁光标开启 | 37µs | |
| 光标或显示移位 | 0 0 0 0 0 1 S/C R/L - - | 设置光标移动和显示移位控制位及方向,不改变DDRAM数据 | 37µs | |
| 功能设置 | 0 0 0 0 1 DL N F - - | DL:接口数据为8/4位;N:行数为2/1;F:字体大小为5x11/5x8 | 37µs | |
| 设置CGRAM地址 | 0 0 0 1 AC5 AC4 AC3 AC2 AC1 AC0 | 在地址计数器中设置CGRAM地址 | 37µs | |
| 设置DDRAM地址 | 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0 | 在地址计数器中设置DDRAM地址 | 37µs | |
| 读取忙标志和地址 | 0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 | 通过读取BF可知是否处于内部操作,也可读取地址计数器内容 | 0s | |
| 向地址写入数据 | 1 0 D7 D6 D5 D4 D3 D2 D1 D0 | 将数据写入内部RAM(DDRAM/CGRAM) | 37µs | |
| 从RAM读取数据 | 1 1 D7 D6 D5 D4 D3 D2 D1 D0 | 从内部RAM(DDRAM/CGRAM)读取数据 | 37µs |
| 参数 | 描述 | 引脚 | 最小值 | 典型值 | 最大值 | 单位 |
|---|---|---|---|---|---|---|
| Tc | 使能周期时间 | 引脚E | 1200 | - | - | ns |
| TPW | 使能脉冲宽度 | 引脚E | 140 | - | - | ns |
| TR,TF | 使能上升/下降时间 | 引脚E | - | - | 25 | ns |
| TAS | 地址建立时间 | 引脚RS、RW、E | 0 | 0 | - | ns |
| TAH | 地址保持时间 | 引脚RS、RW、E | 10 | - | - | ns |
| TDSW | 数据建立时间 | 引脚DB0 - DB7 | 40 | - | - | ns |
| TH | 数据保持时间 | 引脚DB0 - DB7 | 10 | - | - | ns |
| 参数 | 描述 | 引脚 | 最小值 | 典型值 | 最大值 | 单位 |
|---|---|---|---|---|---|---|
| Tc | 使能周期时间 | 引脚E | 1200 | - | - | ns |
| TPW | 使能脉冲宽度 | 引脚E | 140 | - | - | ns |
| TR,TF | 使能上升/下降时间 | 引脚E | - | - | 25 | ns |
| TAS | 地址建立时间 | 引脚RS、RW、E | 0 | 0 | - | ns |
| TAH | 地址保持时间 | 引脚RS、RW、E | 10 | - | - | ns |
| TDDR | 数据建立时间 | 引脚DB0 - DB7 | - | - | 100 | ns |
| TH | 数据保持时间 | 引脚DB0 - DB7 | 10 | - | - | ns |
文档中给出了内置字体表,但内容较为复杂,这里不再详细列出。在实际使用中,可根据需要参考该字体表进行字符显示。
/**********************************************************/
void command(char i) {
P1 = i; //put data on output Port
D_I = 0; //D/I = LOW : send instruction
E = 1;
Delay(1);
RW = 0; //R/W = LOW:Write
Delay(1); //enable pulse width >= 300ns
E = 0; //Clock enable: falling edge
}
void write(char i) {
P1 = i; //put data on output Port
D_I = 1; //D/I = HIGH : send data
RW = 0; //R/W = LOW : Write
E = 1;
Delay(1);
Delay(1); //enable pulse width >= 300ns
E = 0; //Clock enable: falling edge
}
void init() {
E = 0;
Delay(100); //Wait >40 msec after power is applied
command(0x30); //command 0x30 = Wake up
Delay(30); //must wait 5ms, busy flag not available
command(0x30); //command 0x30 = Wake up #2
Delay(10); //must wait 160us, busy flag not available
command(0x30); //command 0x30 = Wake up #3
Delay(10); //must wait 160us, busy flag not available
command(0x38); //Function set: 8-bit/2-line
command(0x10);
command(0x0c); //Set cursor
command(0x06); //Entry mode set
}
void command(char i) {
P1 = i; //put data on output Port
D_I = 0; //D/I = LOW : send instruction
RW = 0;
Nybble(); //Send upper 4 bits
i = i < < 4; //Shift over by 4 bits
P1 = i; //put data on output Port
Nybble(); //Send upper 4 bits
}
void write(char i) {
P1 = i; //put data on output Port
D_I = 1; //D/I = HIGH : send data
RW = 0;
Nybble(); //Clock upper 4 bits
i = i < < 4; //Shift over by 4 bits
P1 = i; //put data on output Port
Nybble(); //Clock upper 4 bits
}
void Nybble() {
E = 1;
Delay(1); //enable pulse width >= 300ns
E = 0; //Clock enable: falling edge
}
void init() {
P1 = 0;
P3 = 0;
Delay(100); //Wait >40 msec after power is applied
P1 = 0x30; //put 0x30 on the output port
Delay(30); //must wait 5ms, busy flag not available
Nybble(); //command 0x30 = Wake up
Delay(10); //must wait 160us, busy flag not available
Nybble(); //command 0x30 = Wake up #2
Delay(10); //must wait 160us, busy flag not available
Nybble(); //command 0x30 = Wake up #3
Delay(10); //can check busy flag now instead of delay
P1 = 0x20; //put 0x20 on the output port
Nybble(); //Function set: 4-bit interface
command(0x28); //Function set: 4-bit/2-line
command(0x10); //Set cursor
command(0x0F); //Display ON; Blinking cursor
command(0x06); //Entry Mode set
}
| 该模块进行了多项质量测试,包括高温存储、低温存储、高温操作、低温操作、高温/湿度存储、热冲击抗性、振动测试和静电测试等,具体测试条件和注意事项如下: | 测试项目 | 测试内容 | 测试条件 | 注意事项 |
|---|---|---|---|---|
| 高温存储 | 长时间施加高存储温度的耐久性测试 | +80°C,200小时 | 2 | |
| 低温存储 | 长时间施加低存储温度的耐久性测试 | -30°C,200小时 | 1,2 | |
| 高温操作 | 长时间施加电应力(电压和电流)和高热应力的耐久性测试 | +70°C, |
全部0条评论
快来发表一下你的评论吧 !