YFROBOT创客社区

标题: Arduino入门教程—拓展实验篇七 1602液晶显示实验 [打印本页]

作者: AllBlue    时间: 2013-6-28 20:49
标题: Arduino入门教程—拓展实验篇七 1602液晶显示实验
1602液晶显示实验

本次实验我们要用arduino驱动1602显示。

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它 2x16个5x7点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602实物图(正反面):
[attach]428[/attach]
[attach]434[/attach]
下面我们介绍下LCD1602的管脚功能(共有16个引脚,如下图):
[attach]408[/attach]
1602采用标准的16脚接口,其中:

第1脚:VSS为电源地

第2脚:VCC接5V电源正极

第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

第6脚:E(或EN)端为使能(enable)端,写操作时,下降沿使能;读操作时,E高电平有效。

第7~14脚:D0~D7为8位双向数据端;其中D7为最高位,也是busy flag(忙碌标志位);D0为最低位。

第15脚:A(或BLA)背光电源正极

第16脚:K(或BLK)背光电源负极
寄存器选择控制表
[attach]411[/attach]
注:关于E=高脉冲——开始时初始化E为0,然后置E为1,再清0.
busy flag(DB7):在此位为1时,LCD忙,将无法再处理其他的指令要求。
1602LCD主要技术参数:

显示容量:16×2个字符

芯片工作电压:4.5—5.5V

工作电流:2.0mA(5.0V)

模块最佳工作电压:5.0V

字符尺寸:2.95×4.35(W×H)mm

如果各位还想深入了解1602,请点击下载:

[attach]412[/attach]


本次实验我们还要使用到一个10K电位器(用来调节对比度的),和一个220欧限流电阻;
下面我们看下1602与Arduino的连接示意图与实物图(4位接法):
[attach]488[/attach]
下图为原理图:
[attach]417[/attach]
下面我们看下官方的hello, world!程序:

  1. // include the library code:
  2. #include <LiquidCrystal.h>

  3. // initialize the library with the numbers of the interface pins
  4. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

  5. void setup() {
  6. // set up the LCD's number of columns and rows:
  7. lcd.begin(16, 2);
  8. // Print a message to the LCD.
  9. lcd.print("hello, world!");
  10. }

  11. void loop() {
  12. // set the cursor to column 0, line 1
  13. // (note: line 1 is the second row, since counting begins with 0):
  14. lcd.setCursor(0, 1);
  15. // print the number of seconds since reset:
  16. lcd.print(millis()/1000);
  17. }
复制代码

官方的例子使用了自带的库文件,它使得1602的使用更加简便!

将例程写入arduino,将看到如图效果:
[attach]426[/attach]









下面我们来介绍下官方库的使用
1、LiquidCrystal() :创建一个LiquidCrystal类型的变量
语法

4线连接(d0~d3悬空):

LiquidCrystal(rs, enable, d4, d5, d6, d7)

LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)

8线连接:

LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)

LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
参数

rs: rs连接的Arduino的引脚编号

rw: rw连接的Arduino的引脚编号 (可选,当rw直接连接地时可省略)

enable:enable连接的Arduino的引脚编号

d0, d1, d2, d3, d4, d5, d6, d7: 连接的Arduino的引脚编号

2、begin() : 指定尺寸(宽度和高度)的显示
语法

lcd.begin(cols, rows)
参数

lcd:  一个LiquidCrystal类型的变量

cols: 显示器可以显示的列数(1602是16列)

rows: 显示器可以显示的行数(1602是2行)

3、clear() :清除LCD屏幕内容并将光标置位于左上角(起始位)
语法

lcd.clear()
参数

lcd: 一个LiquidCrystal类型的变量

4、home() :将光标置位于左上角(如还需清除屏幕内容请用clear()代替)
语法

lcd.home()
参数

lcd: 一个LiquidCrystal类型的变量

5、setCursor() :设定光标的位置,后文将从此处开始显示
语法
lcd.setCursor(col, row)
参数

lcd: 一个LiquidCrystal类型的变量

col: 设定光标显示的列数 (从0开始计数)

row:设定光标显示的行数 (从0开始计数)

6、write() :向LCD写一个字符
语法

lcd.write(data)
参数

lcd: 一个LiquidCrystal类型的变量

data: 写入的字符
返回值

byte

write()将返回写入的字节数,尽管读这个数字是可选的  ps:很少用哦~~

7、print() :将内容显示在LCD上
语法

lcd.print(data)

lcd.print(data, BASE)
参数

lcd: 一个LiquidCrystal类型的变量

data: 要显示的内容 (可以是char, byte, int, long, or string类型)

BASE (可选):数据以何种数制显示(BIN 为二进制, DEC 为十进制, OCT 为八进制, HEX 为十六进制)
返回值

byte

print() 将返回已显示的字节数,尽管读这个数字是可选的

8、cursor() :显示光标(光标所在的位置, 就是下一个字符将会被显示的位置)
      noCursor():隐藏光标
语法

lcd.cursor()

lcd.noCursor()
参数

lcd: 一个LiquidCrystal类型的变量
例子

官方例程(关于cursor And noCursor)

9、blink() :显示闪烁的光标(如果和cursor()一起使用,最终结果将取决于您使用的LCD屏幕)
      noBlink() :关闭闪烁的光标
语法

lcd.blink()

lcd.noBlink()
参数

lcd: 一个LiquidCrystal类型的变量
例子

官方例程(关于blink And noBlink)

10、display() :打开液晶显示器(在调用noDisplay()关闭显示器之后,使用本函数可以恢复显示)
        noDisplay() :关闭液晶显示器(原显示内容不会丢失,调用display()函数即可恢复显示)
语法

lcd.display()

lcd.noDisplay()
参数

lcd: 一个LiquidCrystal类型的变量
例子

官方例程(关于 display And noDisplay)

11、scrollDisplayLeft() :使屏幕上显示内容(光标及文字)向左滚动一个字符。
        scrollDisplayRight() :使屏幕上显示内容(光标及文字)向右滚动一个字符。
语法

lcd.scrollDisplayLeft()

lcd.scrollDisplayRight()
参数

lcd: 一个LiquidCrystal类型的变量
例子

官方例程(关于scrollDisplay Left or Right)

12、autoscroll() :打开液晶的自动滚动功能
        noAutoscroll() :关闭液晶的自动滚动功能
语法

lcd.autoscroll()

lcd.noAutoscroll()
参数

lcd: 一个LiquidCrystal类型的变量
例子

官方例程(关于autoscroll And noAutoscroll)

13、leftToRight() :设置文本从左往右(默认方向)输入液晶,但不影响已显示字符

rightToLeft() :设置文本从右往左(默认方向为从左往右)输入液晶,这意味着后面输入的字符将从右往左显示,但不影响已显示字符
语法

lcd.leftToRight()

lcd.rightToLeft()
参数

lcd: 一个LiquidCrystal类型的变量
例子

官方例程(关于TextDirection leftToRight or rightToLeft)


14、createChar() :为液晶创建一个自定义的字符(可创建8个自定义字符,编号0~7,5*7像素支持),使用write()函数写0~7编号,来显示自定义字符
语法

lcd.createChar(num, data)
参数

lcd: 一个LiquidCrystal类型的变量

num: 创建字符的编号(0 到 7)

data: 字符的像素数据
例子

[attach]418[/attach]  
效果图:
[attach]431[/attach]


LCD库使用官方介绍地址:

http://arduino.cc/en/Reference/LiquidCrystal


IIC1602模块,连接方法更加方便,只要4根导线就可以驱动1602了,帖子地址:

Arduino驱动IIC/I2C LCD1602模块显示(4根线解决连接) -YFROBOT




作者: yjx189    时间: 2016-4-28 15:36
楼主先生:
   一,我写进上面的”hello, world“的程序,1602屏显示正常,
   二,然后我把第5句的LiquidCrystal lcd(12, 11, 5, 4, 3, 2);改写成LiquidCrystal lcd(12, 11, 10,9,8,7);连线也做相应变动,1602屏显示依然正常。
   三,我按后面的方法,连接IIC转接板,用尽了网上能看到,能问到的所有办法,1602屏都只显示一行黑方块。(我的2只IIC转接板地址是0X3F,把板上的A0,A1,A2全部连接后,地址变为0X38)
   四,连线错误等问题皆可以排除(无数次的检查),液晶屏也证明是好的!
   请问楼主先生,我的问题出在哪里?
作者: wangkun    时间: 2016-7-20 17:35
:):):):):):):):):):):):)
作者: kkjjww    时间: 2017-3-7 00:30

感谢楼主,学习。
作者: 明月知行    时间: 2018-5-2 19:44
大神就是厉害
作者: tiantianyouyou    时间: 2019-5-4 20:32
学习学习,很好的资料
作者: tiantianyouyou    时间: 2019-5-23 16:08
学习学习,谢谢分享
作者: heping2019    时间: 2019-8-4 14:35
学习了。谢谢楼主
作者: zh68a11    时间: 2019-11-22 20:06
很好的资料,谢谢分享.




欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) Powered by Discuz! X3.1