Arduino周边模块:LCD与数码管

Arduino周边模块:LCD与数码管

数码管的介绍



数码管一般是用来显示数字和字符的

数码管原理

一位数码管



该图是一个8段数码管,该数码管中包含了8个LED发光二极管,因此称为8段数码管。该数码管共有10个引脚,有2个引脚是公共的负极或者正极,另外8个引脚分别按顺时针控制LED的亮片。

数码管的连接图,下面是两种连接方式



一种是将所有的正极连接到一起,另外的一种是将所有的负极连接到一起

我们可以在连接的时候进行测试,3脚接GND,4脚接高电平,如果有LED被点亮则为共阴,不亮则为共阳

四位数码管



原理:

四位数码管有12个引脚,我们将这12个引脚分为2组,一组是上面的12 、9、8、6,这些引脚是用来选择的,哪个引脚是低电平,那么该数码管就被选中。第二组引脚的高低电平是用来决定该数码管中显示的数字

数码管实例演示

硬件连接

下面的连接方式是共阴:

程序

1.int numData[8]={1,0,1,1,1,1,1,0};
2.void setup(){
3. for(int pinIndex=2;pinIndex<=9;pinIndex++)
4. {
5. pinMode(pinIndex,OUTPUT);
6. }
7.}
8.void loop()
9.{
10. for(int index=0;index<9;index++)
11. {
12. digitalWrite(2+index,numData[index]);
13. }
14.}

下载运行,显示数字0

1.int numData[10][8]={{1,0,1,1,1,1,1,0},
2. {1,0,0,0,0,1,0,0},
3. {0,0,1,1,1,1,0,1},
4. {1,0,1,0,1,1,0,1},
5. {1,0,0,0,0,1,1,1},
6. {1,0,1,0,1,0,1,1},
7. {1,0,1,1,1,0,1,1},
8. {1,0,0,0,1,1,0,0},
9. {1,0,1,1,1,1,1,1},
10. {1,0,1,0,1,1,1,1}};
11.void setup(){
12. for(int pinIndex=2;pinIndex<=9;pinIndex++)
13. {
14. pinMode(pinIndex,OUTPUT);
15. }
16.}
17.void loop()
18.{
19. DisplayNumber(1);
20.}
21.
22.void DisplayNumber(int num)
23.{
24. for(int index=0;index<9;index++)
25. {
26. digitalWrite(2+index,numData[num][index]);
27. }
28.}

运行,数码管显示1(可通过DisplayNumber(1);改变)

如果我们想要每秒循环显示0~9这几个数字,只需要修改loop类

1.void loop(){
2. for(int num=0;num<10;num++)
3. {
4. DisplayNumber(num);
5. delay(1000);
6. }
7.}

LCD1602的介绍

LCD1602是一种工业字符型液晶显示器



LCD表示该器件的类型是液晶显示器

1602表示该器件的型号可以显示2行每行16个字符

原理:



HD44780:控制芯片,与微控制器进行通信,并控制字符的显示

CGROM:存储字库

CGRAM:存储用户自定义字库

DDRAM:存储显示的数据


tips:ROM与RAM

ROM:Read-only Memory(只读存储器),存储不可变的数据,断电后数据不消失。

RAM:Random Access Memory(随机存取存储器),存储易变的数据,断电后数据消失。


LCD1602中的CGROM存储可显示字符的点阵数据



LCD每个字符点阵大小为5*8

LCD1602中的DDRAM用于存储显示的数据。与显示屏上的数据一一对应

LCD1602中的CGRAM用于存储用户自定义的图形。自定义图形大小为5*8,在程序中使用字节数组来进行数据的存储

  1. 创建字符的点阵数据,将点阵数据告知LCD1602

  2. 将其存储到CGRAM

存储并显示自定义图形,程序:

1.LiquidCrystal lcd(12,11,5,4,3,2);
2.byte heart[8]={
3. B00000,
4. B01010,
5. B11111,
6. B11111,
7. B01110,
8. B00100,
9. B00000,
10. B00000
11.};
12.void setup()
13.{
14. lcd.createChar(2,heart);
15. lcd.write(2);
16.}

LCD1602引脚

引脚号 引脚名 电平 输入/输出 作用
1 VSS 电源地
2 VDD 电源(+5V)
3 V0 对比度调整电压
4 RS 0/1 输入 0=输入指令 1=输入数据
5 R/W 0/1 输入 0=向LCD写入指令或者数据 1=从LCD读取数据
6 E 1,1→0 输入 使能信号,1时读取信息。1→0(下降沿)执行指令
7 D0 0/1 输入/输出 数据总线line0(最低位)
8 D1 0/1 输入/输出 数据总线line1
9 D2 0/1 输入/输出 数据总线line2
10 D3 0/1 输入/输出 数据总线line3
11 D4 0/1 输入/输出 数据总线line4
12 D5 0/1 输入/输出 数据总线line5
13 D6 0/1 输入/输出 数据总线line6
14 D7 0/1 输入/输出 数据总线line7
15 A +VCC LCD背光电源正极
16 K 接地 LCD背光电源负极

LCD1602硬件连接

LCD1602实例——LiquidCrystal Library

LCD1602的库函数

函数库是一组预先写好的函数,可以直接用在自己的程序中,我们可以在Arduino的编程参考中找到

Help->Reference->Library



我们能够看到几个库函数的分类:

其中的标准库(Standard Libraries)贡献库(Contributed Libraries)

其中标准库是由arduino的核心团队进行建设和维护的,包含arduino常用外设以及总线的功能,比如以太网接口、液晶显示屏、SD存储卡、SPI总线等等

由于arduino的软硬件开发环境是开源的,所以会有很多arduino的爱好者向arduino核心团队推送了他们自己写的库函数,这些库函数能操纵更多的外设,并为arduino提供更加强大的功能。这就是贡献库

将标准函数库加入到程序中

点击Sketch->Import Library->LiquidCrystal

然后就会将我们选中的库函数的头文件插入到我们自己写的程序中

LCD1602的库函数主要包括下面五大类型

下面是利用上面的这些库函数,进行文字的显示

  1. 加入库函数
1.#include <LiquidCrystal.h>
  1. 搭建程序的大体框架
1.void setup()
2.{}
3.void loop()
4.{}
  1. 初始化一个液晶显示器的对象

    LiquidCrystal()构造函数

    语法

    根据接线法的不同,函数的使用方法也不同:

    • 4位接线法

      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:连接到R/W的Arduino引脚的编号

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

      d0,d1,d2,d3,d4,d5,d6,d7:连接到对应数据线的Arduino引脚

整体代码如下

1.#include <LiquidCrystal.h>
2.LiquidCrystal lcd(12,11,5,4,3,2);//我们使用4位接线法,其中12,11,5,4,3,2为引脚编号
3.void setup()
4.{
5. lcd.begin(16,2);//对lcd 这个对象的高度和宽度进行设置,高度为2,宽度为16
6. lcd.print("hello world!");//进行文本输出
7.}
8.void loop()
9.{}

点击下载按钮即可显示

  1. 如果文本太长,无法在一行显示处理,那么我们就需要分行显示
1.#include <LiquidCrystal.h>
2.LiquidCrystal lcd(12,11,5,4,3,2);
3.void setup()
4.{
5. lcd.begin(16,2);
6. lcd.print("hello");
7. lcd.setCursor(0,1);//将光标移到下一行
8. lcd.print("world!");
9.}
10.void loop()
11.{}
  1. 为了显示良好,进行居中显示
1.#include <LiquidCrystal.h>
2.LiquidCrystal lcd(12,11,5,4,3,2);
3.void setup()
4.{
5. lcd.begin(16,2);
6. lcd.setCursor(5,0);//将光标平移5个字符位
7. lcd.print("hello");
8. lcd.setCursor(0,1);
9. lcd.print("world!");
10.}
11.void loop()
12.{}

这样简单的LCD1602的演示就完成了

Arduino周边模块:LCD与数码管的更多相关文章

  1. Arduino周边模块:传感器部件(温敏、光敏、湿敏)

    Arduino周边模块:传感器部件(温敏.光敏.湿敏) Arduino周边模块:传感器部件(温敏.光敏.湿敏) Arduino的模数转换 对于Arduino来说,它只认识数字量,模拟量对其来说就是一门 ...

  2. Arduino周边模块:执行部件(舵机、直流电机、步进电机)

    Arduino周边模块:执行部件 Arduino周边模块:执行部件 嵌入式系统的构成 如今已经有各种各样的基于Arduino的嵌入式系统, 比如:智能小车.3D打印机.机器人,甚至还有基于Arduin ...

  3. Arduino周边模块:LED部件

    Arduino周边模块:LED部件 Arduino周边模块:LED部件 1. LED的使用 LED的原理: LED是会发光的二极管,它具有单向导电性.两端加上正向电压,即能将电能转化为光能. 正向电压 ...

  4. 【Arduino】开发入门【十】Arduino蓝牙模块与Android实现通信

    [Arduino]开发入门[十]蓝牙模块 首先show一下新入手的蓝牙模块 蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机 ...

  5. Arduino蓝牙模块实现通信

    蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接 2.led指示蓝牙连接状态,闪烁表示没有 ...

  6. 【Arduino】8地点LED数码管(3461BS)

    淘宝买了一块3461BS的8地点LED数码管,婴儿就迫不及待地尝试,结果看到了文件,好家伙无Arduino测试程序. 莫急~莫急~无论如何串行操作,大不了呗瞎蒙! 以下几点是在更有趣的点瞎蒙: 1.须 ...

  7. Arduino 各种模块篇 摇杆模块

    Arduino的另外几种模块,我们常见的joystick摇杆模块. 用起来很爽,摇杆 有X,Y轴可调 这里有一篇非常想尽的示例代码: http://www.geek-workshop.com/foru ...

  8. Arduino 各种模块篇 蓝牙模块 手机蓝牙控制Arduino LED灯

    解决方案. 条件: 1.手机android 商店下载 blueTerm 2.向arduino中载入如下代码: char val; ; void setup() { Serial.begin(); pi ...

  9. Arduino 各种模块篇 粉尘传感器 dust sensor 空气质量检测

    Testing a sensor from here. http://www.seeedstudio.com/wiki/Grove_-_Dust_Sensor It's a dust sensor. ...

随机推荐

  1. C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库

    第一步:首先需要将csv先装换成datatable,这样我们就容易进行对datatable进行遍历: /// 将CSV文件的数据读取到DataTable中 /// CSV文件路径 /// 返回读取了C ...

  2. 第001篇——C#学习计划开启

    大年三十了,选在今天开启Blog,就是为了克服拖延症! Windows桌面程序,多年的执念,到现在一直不会写,再拖拉谁知道又要拖几年? 特此立下目标: 基本掌握C# winform 半年内可以做出一些 ...

  3. 《JavaScript 闯关记》之简介

    简介 JavaScript 是面向 Web 的编程语言,绝大多数现代网站都使用了 JavaScript,并且所有的现代 Web 浏览器(电脑,手机,平板)均包含了 JavaScript 解释器. 这使 ...

  4. Android Service 系统服务

    android sdk 提供很多公用的服务,也就是系统服务,开发者可以通过Activity类的getSystemService方法获取指定的服务.系统服务包含音频服务.视频服务窗口服务等.本篇主要讲T ...

  5. Java日志管理

    首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼ 您还未登录 ! 登录 注册 JavaCrazyer的ItEye(codewu.com)技术博客   博客 微博 相册 收藏 留言 关于我   ...

  6. windows不能在本地计算机启动SQL Server(MSSQLSERVER)

    windows不能在本地计算机启动sql server 在登录数据库的时候,发现数据库不能登录,提示[无法连接到实例],很明显这是因为数据库服务没有启动导致的,我们打开[服务]启动相应的SQL数据库服 ...

  7. CoreLocation导航Demo

    CoreLocation实现定位和导航功能还是非常简单的,基本思路是: 1.导入<CoreLocation/CoreLocation.h>头文件 2.使用该框架内的导航管理者,创建该导航管 ...

  8. 在ASP.NET MVC自定义错误页面

    异常处理跳转页面 第一步,在项目的Web.config文件中找到节点<system.web> 在此节点下添加配置(Error为定义的控制器也可以多添加些error标签用于区分不同的错误) ...

  9. JavaScript 面向对象思想 贪吃蛇游戏

    js代码: 游戏的对象 ,食物,蛇 ,游戏控制思路如下 (完整代码在https://github.com/774044859yf/ObjectSnakeGame下载) var snake = { aS ...

  10. zoj 1078

    非常简单的题,没什么好说的.唯一值得一提的就是在判断是否是回文的时候只需遍历一半的元素即可,稍微提高一点性能. #include<iostream> using namespace std ...