|
练习使用HD44780 相容的文字型LCD(Liquid crystal display),在2×16 LCD 上显示”Hello World” 讯息。 2×16 LCD 简介HD44780 相容的2×16 LCD 可以显示两行讯息,每行16 个字元,它可以显示英文字母、希腊字母、标点符号以及数学符号,除了显示讯息外,它还有其它功能,包括讯息卷动(往左和往右卷动)、显示游标和LED背光等。
LCD 总共有14 支接脚,如果内建背光的话是16 支,这些脚位的功能整理于下表: 脚位编号 | 名称 | 说明 | 1 | Vss | 接地(0V) | 2 | Vdd | 电源(+5V) | 3 | Vo 或称Vee | 对比(0-5V), 可接一颗1k 电阻,或利可变电阻调整适当的对比 | 4 | RS | Register Select:
1: D0 – D7当作资料解释
0: D0 – D7当作指令解释 | 5 | R/W | Read/Write mode:
1:从LCD读取资料
0:写资料到LCD 因为很少从LCD这端读取资料,可将此脚位接地以节省I/O脚位。 | 6 | E | Enable | 7 | D0 | Bit 0 LSB | 8 | D1 | Bit 1 | 9 | D2 | Bit 2 | 10 | D3 | Bit 3 | 11 | D4 | Bit 4 | 12 | D5 | Bit 5 | 13 | D6 | Bit 6 | 14 | D7 | Bit 7 MSB | 15 | A+ | 背光(串接330R 电阻到电源) | 16 | K- | 背光(GND) |
日立HD44780 相容的LCD 有4-bit 和8-bit 两种使用模式,使用4-bit 模式主要的好处是节省I/O 脚位,通讯的时候只会用到4 个高位元(D4-D7 ),D0-D3 这四支脚位可以不用接。每个送到LCD 的资料会被分成两次传送– 先送4 个高位元,然后才送4 个低位元。 材料- 面包板x 1
- Arduino 主板x 1
- HD44780 相容LCD x 1 (本文所用的为14 pin 无背光LCD)
- 旋转式可变电阻x 1
- 单心线x N
接线- 将LCD 的RS, Enable, D4, D5, D6, D7 依序接到12, 11, 5, 4, 3, 2 等脚位上
- 将LCD 的Vss 及R/W 接到GND,Vdd 接到+5V
- 可变电阻中间脚位接到LCD 的Vo,剩下的两支脚位,一支接到5V,另外一支接到GND (注:也可以不使用可变电阻,只要在LCD 的Vo 上串接一颗1k ohm 电阻连到GND 即可)
电路图程式码要在LCD上显示讯息,会涉及初始化LCD 、下指令以及传送资料给LCD等工作,Arduino LiquidCrystal Library已经把这些工作简化了,所以你不需要知道这些低阶的指令。底下的程式在2×16 LCD上第一行显示”hello, world!”讯息,并在第二行不断更新Arduino重开之后经过的秒数,使用的是4-bit模式( HelloWorld.pde ): 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| /* Lab9 - 在2x16 LCD 上显示"Hello World" 讯息
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* 10K Potentiometer:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
// 引用LiquidCrystal Library
#include <LiquidCrystal.h>
// 建立LiquidCrystal 的变数lcd
// LCD 接脚: rs, enable, d4, d5, d6, d7
// 对应到Arduino 接脚: 12, 11, 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// 设定LCD 的行列数目(2 x 16)
lcd.begin(16, 2);
// 列印"Hello World" 讯息到LCD 上
lcd.print("hello, world!");
}
void loop() {
// 将游标设到column 0, line 1
// (注意: line 1 是第二行(row),因为是从0 开始数起):
lcd.setCursor(0, 1);
// 列印Arduino 重开之后经过的秒数
lcd.print(millis()/1000);
}
|
如果讯息没有显示在萤幕上,或者是模糊朦胧的,首先应该做的事是检查可变电阻以调整对比。 注:这支是Arduino内建的范例程式,点选File > Examples > LiquidCrystal > HelloWorld就可以找到。
|
|