电梯直达 楼主
xuwei 发表于 2015-6-24 14:57 | 只看该作者
练习使用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 的变数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就可以找到。