练习使用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就可以找到。
|