LCD1602它是低-cost输出装置。它具有体积小、简单的操作、低功耗优势。因此,在一些DIY 用它来输出关于产品的一些信息。

昨日在使用,尽管平局网上资源,但仍存在一些问题,确处理。

一、LCD1602 相关[1]

工业字符型液晶,可以同一时候显示16x02即32个字符。(16列2行)

1.1 管脚

1602字符型LCD通常有14条引脚线或16条引脚线的LCD。多出来的2条线是背光电源线。

引脚 符号 功能说明
1 VSS 一般接地
2 VDD 接电源(+5V)
3 V0 晶显示器对照度调整端。接正电源时对照度最弱。接地电源时对照度最高(对照度过高时会产生“鬼影”。使用时能够通过一个10K的电位器调整对照度)。
4 RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

5 R/W R/W为读写选择。高电平(1)时进行读操作,低电平(0)时进行写操作。
6 E
E(或EN)端为使能(enable)端,
写操作时,下降沿使能。
读操作时。E高电平有效
7 DB0 低4位三态、 双向数据总线 0位(最低位)
8 DB1 低4位三态、 双向数据总线 1位
9 DB2 低4位三态、 双向数据总线 2位
10 DB3 低4位三态、 双向数据总线 3位
11 DB4 高4位三态、 双向数据总线 4位
12 DB5 高4位三态、 双向数据总线 5位
13 DB6 高4位三态、 双向数据总线 6位
14 DB7 高4位三态、 双向数据总线 7位(最高位)(也是busy flag)
15 BLA 背光电源正极
16 BLK 背光 电源负极

1.2 寄存器选择控制

依据上面的表中管脚说明,我们能够知道主要操控的是RS 和R/W 两个管脚:

RS R/W 操作说明
0 0 写入指令寄存器(清除屏等)
0 1 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值
1 0 写入数据寄存器(显示各字型等)
1 1 从数据寄存器读取数据
注:关于E=H脉冲——開始时初始化E为0,然后置E为1。再清0.
busy flag(DB7):在此位为1时。LCD忙,将无法再处理其它的指令要求。也即:D7=1。禁止读写操作;D7=0,同意读写操作;



所以对控制器每次进行读写操作前,必须进行读写检測。

(即后面的读忙子程序)

1.3 指令集

LCD_1602 初始化指令小结:





0x38   设置16*2显示(总共能够输出16*2=32个字符),5*7点阵(每一个字符为5*7的点阵显示),8位数据接口



0x01   清屏



0x0F   开显示,显示光标,光标闪烁



0x08   仅仅开显示



0x0e   开显示,显示光标,光标不闪烁



0x0c   开显示。不显示光标



0x06   地址加1。当写入数据的时候光标右移



0x02   地址计数器AC=0;(此时地址为0x80) 光标归原点,可是DDRAM中断内容不变



0x18   光标和显示一起向左移动

1.4 显示地址

602字符液晶显示可分为上下两部分各16位进行显示,处于不同行时的字符显示地址例如以下:

显示字符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
第一行地址 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH
第二行地址 40H 41H 42H 43H 44H 45H 46H 47H 48H 49H 4AH 4BH 4CH 4DH 4EH 4FH

1.5 字符集

1602液晶模块内部的字符发生存储器CGROM)已经存储了160个不同的点阵字符图形。这些字符有:阿拉伯数字、英文字母的大写和小写、经常使用的符号、和日文假名等。每个字符都有一个固定的代码。比方大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来。我们就能看到字母“A”。
由于1602识别的是ASCII码,试验能够用ASCII码直接赋值,在单片机编程中还能够用字符型常量变量赋值,如'A’。
下面是1602的16进制ASCII码表:

读的时候,先读上面那列。再读左边那行,如:感叹号!的ASCII为0x21。字母B的ASCII为0x42(前面加0x表示十六进制)。

注: 第一节的这些信息都是来源于互联网。网上另一些操控程序。相信大家仅仅要搜集一下就能够获取丰富资料。有了这些我们能够自己C 语言编程输出信息。可是本文的程序是基于国外的库进行的,并没有太大的复杂性。

在GitHub 上找到了一个关于树莓派使用1602 打印的一个项目。地址是:https://github.com/qtsharp/pi-screen。

而这个小项目是基于一个国外大牛创建的树莓派的库:其地址为 https://projects.drogon.net/raspberry-pi/wiringpi/ 。

亲測可用,可是会遇到一些问题,所以以下两节我们分开来说说。

二、怎样连接树莓派

在大神的LCD 连接网页上,我们能够看到树莓派与1602之间这么连接:

上述的图还是非常清晰地。看图接线应该还是比較简单的。

注意: LCD1602 的第三个管脚接的是电位器。用于调节屏幕的对照度(也就是说字与背景亮光之间的颜色差异)。

树莓派的 GPIO 口接线,由于我的是有亚巧克力外壳的。所以从外面接进去还是比較麻烦的。我使用的方法是:

使用两派母口杜邦线将全部的GPIO 口接出来。然后接出来的线对于LCD1602这样接16根线的就须要通过面包板衔接。假设是一些类似于超声波模块仅仅要接三根线的,直接将传感器模块接上这些母口就能够使用。还是非常方便的吧!!

三、正确信息打印

对于大神的库假设你没有耐心看或者想尽快看出LCD1602 的效果。这个树莓派1602信息打印的小项目倒是比較好的选择:

1. 给你的树莓派配置好源后,使用sudo apt-get install git  安装版本号管理软件Git 。

2. git clone https://github.com/qtsharp/pi-screen  将此小项目的仓库克隆下来

依据pi-screen/README.md的描写叙述,我们须要先将 大神的库wiringPi  编译好后,才干编译此项目中的1602.c。由于1602.c使用了wiringPi 库文件提供的树莓派1602 操控函数。

3. git clone git://git.drogon.net/wiringPi



   cd wiringPi

克隆好wiringPi 的git 仓库后,我们须要的不是直接 “ ./build ”。由于此库经过大神的不断改进。已经到了v2 版本号,而pi-screen 的作者一直没有更新。所以眼下有两个选择:

(1) 依据库的API改动源码 1602.c

(2) 跟我学偷懒,既然 pi-screen/1602.c 使用v1 版,我们就使 wiringPi 库回到 v1 版:

我们能够看到 pi-screen 的最后改动时间为 2013年5月8号, 我们就将 wiringPi 的git 仓库回到2013年5月8号曾经。

使用 git log 追溯库的曾经版本号(假设你对git 这个神器还不是非常了解,欢迎学习《Git
使用及进阶实战
》)。我们能够找到:

commit da38443cb257a3bbbe4ad7f54ee3f569710a2fe7

Author: Gordon Henderson <projects@drogon.net>

Date:   Mon +0100





    wiringPi Version 2 - First commit (of v2)





commit 98bcb20d9391ebde24f9eb1244f0d238fb1a1dab

Author: Gordon Henderson <projects@drogon.net>

Date:   Thu +0000





    Slight change to the gpio program to fix SPI buffer size when loading

    the module.

    Typo in gpio man page

    Bug fixed in board revision detection (which would never happen

    anyway, however)

与 2013-5-8 最接近的一次commit 是2013-2-7。 并且不巧的是5月13 就升级到了 v2 版本号。所以我们仅仅要使用 "
git reset --hard 98bcb20d9391ebde24f9eb1244f0d238fb1a1dab " 回到2月7日这个版本号就能够了。

然后使用 " sudo ./build
" 编译这个库就能够了。

4. 至此, wiringPi 库编译完后。我们就“ cd ../pi-screen ”回到pi-screen 文件夹:

使用 “ gcc 1602.c -o 1602 -L lib -l wiringPi  ” 编译好这个打印文件就可以。

5. 然后使用 "sudo ./1602 你想打印的信息" 执行就可以。

来显摆一下打印效果。

顺便啰嗦一句:树莓派使用文本界面然后使用ssh 登陆操控体验真的非常好。并且超级省资源。能够看到图中,447MB的内存还有402M 可用。

而使用图形界面的话应该仅仅会剩下一半的样子。

只是即便我加了散热片。树莓派的温度一直持续在55度的样子。不知道你们那怎样?

四、 总结

4.1 好好接线非常重要

在本次操作中,因为一点失误,将当中一根数据线接错,导致后来使用程序打印的字符有问题:

比方我想打印的是 0123456789 ,出来的结果却是: 0101454589

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9uZ2Vyem9uZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

4.2 用好 Git 仓库非常重要

我们能够看到。本次实验中。因为1602.c 使用的是老版本号的库,而最新的库已经提供了有所不同的API, 而我使用的较为偷懒的方法就是得益于强大的Git 。所以对于程序猿来说使用 Git 是一个好习惯,会用Git 快要成了最主要的基础技能。

好吧。写到这,算结束了。以后再发使用其它的传感器与1602 接轨,相信会更好玩。再有时间能够自己写c 程序直接对1602 的寄存器读写数据。还是挺好玩的。

===================

引用资料:

[1]
百度百科 -- 1602字符液晶

[2] https://projects.drogon.net/raspberry-pi/wiringpi/lcd-library/

[3] https://github.com/qtsharp/pi-screen

版权声明:本文博客原创文章,博客,未经同意,不得转载。

树莓派的演奏音符3 -- LCD1602显示文章的更多相关文章

  1. 51单片机—LCD1602显示模块

    文章目录 - 什么是LCD1602 - 如何操作LCD1602 - 上代码 - 什么是LCD1602 LCD:Liquid Crystal Display-液晶显示器,简称LCD,其主要显示原理是以电 ...

  2. Laravel大型项目系列教程(四)显示文章列表和用户修改文章

    小编心语:不知不觉已经第四部分了,非常感谢很多人给小编提的意见,改了很多bug,希望以后能继续帮小编找找茬~小编也不希望误导大家~这一节,主要讲的 是如何显示文章列表和让用户修改文章,小编预告一下(一 ...

  3. 如何给wordpress首页自动显示文章内容的第一个图片

    敏捷个人手机应用中使用到的数据来源于wordpress中,因为自己写的页面,所以可以自己写代码获取文章内容的第一个图片作为文章缩略图来显示,这样用户看到首页时图文并茂,感觉会好一些. 现在后台简单的使 ...

  4. wordpress chronus主题 显示文章阅读数

    wordpress chronus主题 显示文章阅读数 第一步:将下面的代码拷贝到文件 /wp-content/themes/chronus/inc/template-tags.php 中 funct ...

  5. 实现 AD 采样,使用 LCD1602 显示 AD 数值

    实现 AD 采样,使用 LCD1602 显示 AD 数值 写在前面 单片机内集成的A/D转换,一般都有相应的特殊功能寄存器来设置A/D的使能标志,参考电压,转换频率,通道选择,A/D输入口的属性(模拟 ...

  6. 3.5.基于STC89C52+MC20的短信远程控制开关LCD1602显示

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  7. Laravel 项目使用 Carbon 人性化显示文章发表时间

    比如说有这样一个需求:一篇文章的发表时间: **距离现在时间** **显示格式** < 1小时 xx分钟前 1小时-24小时 xx小时前 1天-10天 xx天前 >10天 直接显示日期 针 ...

  8. LCD1602显示中文汉字

    小子在西藏 2011-11-25编写 特别说明笔者是上面的作者,感谢那些原意分享知识的人.时隔5年我又看到了笔者当年写的东西,我想这期间还有许许多多的人 今天写在博客上,愿更多后来者可以学习. LCD ...

  9. Hexo瞎折腾系列(4) - 站点首页不显示文章全文

    文章摘要设置 打开主题配置文件 _config.yml 文件,找到如下: # Automatically Excerpt. Not recommend. # Please use <!-- mo ...

随机推荐

  1. (hdu 7.1.8)Quoit Design(最低点——在n一个点,发现两点之间的最小距离)

    主题: Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...

  2. Vue.js学习与理解

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的库.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue.js 自身不 ...

  3. [Windwos Phone 8]多个按钮的共用事件

    原文:[Windwos Phone 8]多个按钮的共用事件 前言 ------------------------------------------------------------------- ...

  4. IOS --- 日期时间格式 更改

    1.怎样怎样将一个字符串如" 20110826134106"装化为随意的日期时间格式.以下列举两种类型:    NSString* string =@"201108261 ...

  5. iSwifting如何发送照片社区

    登录iSwifting社区 1,首先点击"帖子": 2,点击"照片": 3.点击"选择文件上传" 4,上传后的照片: 5,点击上传的照片: ...

  6. 重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口

    原文:重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口 [源码下载] 重新想象 Windows 8 Store Apps (27) - ...

  7. OTG驱动分析(二)

    上回介绍了OTG功能的 OTG部分驱动,本片分析OTG功能的从设备部分驱动.从设备的注冊过程和OTG的一样,首先注冊设备. 流程是: 1.定义platform_device结构. 2.定义platfo ...

  8. Thinkphp编辑器扩展类kindeditor用法

    一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...

  9. FusionCharts简明教程(一)---建立FusionCharts图形

    由于该项目需要的报告需要做的事情,选择FusionCharts作为一种工具. 由于该报告没有任何接触,网上有没有更具体fusionCharts课程,所以我们决定做一个彻底的研究FusionCharts ...

  10. 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes

    贝叶斯分类器 贝叶斯分类分类原则是一个对象的通过先验概率.贝叶斯后验概率公式后计算,也就是说,该对象属于一类的概率.选择具有最大后验概率的类作为对象的类属.现在更多的研究贝叶斯分类器,有四个,每间:N ...