YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 35288|回复: 8
打印 上一主题 下一主题

Arduino入门教程—拓展实验篇七 1602液晶显示实验

[复制链接]

签到天数: 866 天

[LV.10]以坛为家III

跳转到指定楼层
楼主
发表于 2013-6-28 20:49:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1602液晶显示实验

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

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

市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602实物图(正反面):


下面我们介绍下LCD1602的管脚功能(共有16个引脚,如下图):

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)背光电源负极
寄存器选择控制表

注:关于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,请点击下载:


本次实验我们还要使用到一个10K电位器(用来调节对比度的),和一个220欧限流电阻;
下面我们看下1602与Arduino的连接示意图与实物图(4位接法):

下图为原理图:

下面我们看下官方的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,将看到如图效果:










下面我们来介绍下官方库的使用
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: 字符的像素数据
例子

  
效果图:


LCD库使用官方介绍地址:

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


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

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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 支持支持 反对反对

签到天数: 241 天

[LV.8]以坛为家I

沙发
发表于 2016-4-28 15:36:45 | 只看该作者
楼主先生:
   一,我写进上面的”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)
   四,连线错误等问题皆可以排除(无数次的检查),液晶屏也证明是好的!
   请问楼主先生,我的问题出在哪里?
回复 支持 反对

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

板凳
发表于 2016-7-20 17:35:42 | 只看该作者
:):):):):):):):):):):):)
回复 支持 反对

使用道具 举报

该用户从未签到

地板
发表于 2017-3-7 00:30:36 | 只看该作者

感谢楼主,学习。
回复 支持 反对

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

5#
发表于 2018-5-2 19:44:48 | 只看该作者
大神就是厉害
回复 支持 反对

使用道具 举报

签到天数: 22 天

[LV.4]偶尔看看III

6#
发表于 2019-5-4 20:32:08 | 只看该作者
学习学习,很好的资料
回复 支持 反对

使用道具 举报

签到天数: 22 天

[LV.4]偶尔看看III

7#
发表于 2019-5-23 16:08:32 | 只看该作者
学习学习,谢谢分享
回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

8#
发表于 2019-8-4 14:35:48 | 只看该作者
学习了。谢谢楼主
回复 支持 反对

使用道具 举报

签到天数: 65 天

[LV.6]常住居民II

9#
发表于 2019-11-22 20:06:00 | 只看该作者
很好的资料,谢谢分享.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-4-20 17:46 , Processed in 0.051217 second(s), 26 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表