找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5677|回复: 30
收起左侧

【Arduino】108种传感器模块系列实验(134)---2004A LCD液晶屏

[复制链接]
ID:513258 发表于 2019-10-6 20:07 | 显示全部楼层 |阅读模式
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验一百三十四:2004A液晶屏 20X4 J204A字符显示液晶模块 204A LCD/LCM 蓝屏5V(带背光 IIC/I2C)



0.jpg

回复

使用道具 举报

ID:513258 发表于 2019-10-6 20:33 | 显示全部楼层
01.jpg

LCD
液晶显示屏(LCD)用于数字型钟表和许多便携式计算机的一种显示器类型。LCD显示使用了两片极化材料,在它们之间是液体水晶溶液。电流通过该液体时会使水晶重新排列,以使光线无法透过它们。因此,每个水晶就像百叶窗,既能允许光线穿过又能挡住光线。液晶显示器(LCD)目前科技信息产品都朝着轻、薄、短、小的目标发展,在计算机周边中拥有悠久历史的显示器产品当然也不例外。在便于携带与搬运为前题之下,传统的显示方式如CRT映像管显示器及LED显示板等等,皆受制于体积过大或耗电量甚巨等因素,无法达成使用者的实际需求。而液晶显示技术的发展正好切合目前信息产品的潮流,无论是直角显示、低耗电量、体积小、还是零辐射等优点,都能让使用者享受最佳的视觉环境。

要追溯液晶显示器的来源,必须先从“液晶”的诞生开始讲起。在公元1888年,一位奥地利的植物学家,菲德烈.莱尼泽(Friedrich Reinitzer)发现了一种特殊的物质。他从植物中提炼出一种称为螺旋性甲苯酸盐的化合物,在为这种化合物做加热实验时,意外的发现此种化合物具有两个不同温度的熔点。而它的状态介于我们一般所熟知的液态与固态物质之间,有点类似肥皂水的胶状溶液,但它在某一温度范围内却具有液体和结晶双方性质的物质,也由于其独特的状态,后来便把它命名为“Liquid Crystal”,就是液态结晶物质的意思。不过,虽然液晶早在1888年就被发现,但是真正实用在生活周遭的用品时,却是在80年后的事情了。

公元1968年,在美国RCA公司(收音机与电视的发明公司)的沙诺夫研发中心,工程师们发现液晶分子会受到电压的影响,改变其分子的排列状态,并且可以让射入的光线产生偏转的现象。利用此一原理,RCA公司发明了世界第一台使用液晶显示的屏幕。尔后,液晶显示技术被广泛的用在一般的电子产品中,举凡计算器、电子表、手机屏幕、医院所使用的仪器(因为有辐射计量的考虑)或是数字相机上面的屏幕等等。令人玩味的是,液晶的发现比真空管或是阴极射线管还早,但世人了解此一现象的并不多,直到1962年才有第一本,由RCA研究小组的化学家乔.卡司特雷诺(Joe Castellano)先生所出版的书籍来描述。而与映像管相同的,这两项技术虽然都是由美国的RCA公司所发明的,却分别被日本的新力(Sony)与夏普(Sharp)两家公司发扬光大。

回复

使用道具 举报

ID:513258 发表于 2019-10-6 20:49 | 显示全部楼层
02.jpg
LCD物理特性
液晶是这样一种有机化合物, 在常温条件下,呈现出既有液体的流动性,又有晶体的光学各向异性,因而称为“液晶”.在电场、磁场、温度、应力等外部条件的影响下,其分子容易发生再排列,使液晶的各种光学性质随之发生变化,液晶这种各向异性及其分子排列易受外加电场、磁场的控制.正是利用这一液晶的物理基础,即液晶的“电-光效应”,实现光被电信号调制,从而制成液晶显示器件.在不同电流电场作用下,液晶分子会做规则旋转90度排列,产生透光度的差别,如此在电源ON/OFF下产生明暗的区别,依此原理控制每个像素,便可构成所需图像。

液晶的物理特性是:当通电时导通,排列变的有秩序,使光线容易通过;不通电时排列混乱,阻止光线通过。让液晶如闸门般地阻隔或让光线穿透。从技术上简单地说,液晶面板包含了两片相当精致的无钠玻璃素材,称为Substrates,中间夹著一层液晶。当光束通过这层液晶时,液晶本身会排排站立或扭转呈不规则状,因而阻隔或使光束顺利通过。大多数液晶都属于有机复合物,由长棒状的分子构成。在自然状态下,这些棒状分子的长轴大致平行。将液晶倒入一个经精良加工的开槽平面,液晶分子会顺着槽排列,所以假如那些槽非常平行,则各分子也是完全平行的。

回复

使用道具 举报

ID:513258 发表于 2019-10-6 21:02 | 显示全部楼层
03.jpg

LCD主要由以下几个部分构成
1.主板:用于外部RGB信号的输入处理,并控制PANEL工作。
2.Adapter电源适配器:用于将90~240V的交流电压转变为12V的直流电源供给 显示器工作。
3.Inverter逆变器:用于将主板或Adapter输出的12V的直流电压转变为PANEL需 要的高频的1500~1800V的高压交流电,用于点亮PANEL的背光灯。
4.PANEL部分:该部分为液晶显示用模块,它是液晶显示器的核心部件,其包含 液晶板和驱动电路。


05.jpg

回复

使用道具 举报

ID:513258 发表于 2019-10-6 21:10 | 显示全部楼层
04 (1).jpg

LCD工作原理
液晶显示器的组成及工作原理:从液晶显示器的结构来说,无论是笔记本屏还是桌面液晶显示器,采用的液晶显示器屏全是由不同部分组成的分层结构。液晶显示器由两块板构成,厚约1mm,其间由包含有液晶材料的5um均匀间隔隔开。因为液晶材料本身并不发光,所以在显示屏下边都设有作为光源的灯管,而在液晶显示器屏背面有一块背光板(或称匀光板)和反光膜,背光板是由荧光物质组成,可以发射光线,其作用主要是提供均匀的背光源。背光板发出的光线在穿过第一层偏振过滤层之后进入包含成千上万液晶液滴的液晶层。液晶层中的液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。在玻璃板与液晶材料之间是透明的电极,电极分为行和列,在行与列的交叉点上,通过改变电压而改变液晶的旋光状态,液晶材料的作用类似于一个个小光阀。


06.jpg

回复

使用道具 举报

ID:513258 发表于 2019-10-7 09:36 | 显示全部楼层
LCD单色原理
LCD技术是把液晶灌入两个列有细槽的平面之间。这两个平面上的槽互相垂直(相交成90度)。也就是说,若一个平面上的分子南北向排列,则另一平面上的分子东西向排列,而位于两个平面之间的分子被强迫进入一种90度扭转的状态。由于光线顺着分子的排列方向传播,所以光线经过液晶时也被扭转90度。当液晶上加一个电压时,液晶分子便会转动,改变光透过率,从而实现多灰阶显示。

LCD是依赖极化滤光器(片)和光线本身。自然光线是朝四面八方随机发散的。极化滤光器实际是一系列越来越细的平行线。这些线形成一张网,阻断不与这些线平行的所有光线。极化滤光器的线正好与第一个垂直,所以能完全阻断那些已经极化的光线。只有两个滤光器的线完全平行,或者光线本身已扭转到与第二个极化滤光器相匹配,光线才得以穿透。

LCD正是由这样两个相互垂直的极化滤光器构成,所以在正常情况下应该阻断所有试图穿透的光线。但是,由于两个滤光器之间充满了扭曲液晶,所以在光线穿出第一个滤光器后,会被液晶分子扭转90度,最后从第二个滤光器中穿出。

从液晶显示器的结构来看,无论是笔记本电脑还是桌面系统,采用的LCD显示屏都是由不同部分组成的分层结构。LCD由两块玻璃板构成,厚度规格有0.7mm,0.63mm,0.5mm(也可以通过物理或者化学减薄的方式做到更薄),其间由包含有液晶(LC)材料的3~5μm均匀间隔隔开。因为液晶材料本身并不发光,所以需要给显示屏配置额外的光源,在液晶显示屏背面有一块导光板(或称匀光板)和反光膜,导光板的主要作用是将线光源或者点光源转化为垂直于显示平面的面光源。背光源发出的光线在穿过第一层偏振过滤层之后进入液晶层。液晶层中的水晶液滴都被包含在细小的单元格结构中,液晶材料的作用类似于一个个小的光阀。在液晶材料周边是控制电路部分和驱动电路部分。当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。

06-.jpeg


回复

使用道具 举报

ID:513258 发表于 2019-10-7 09:45 | 显示全部楼层
11.jpg
回复

使用道具 举报

ID:513258 发表于 2019-10-7 09:50 | 显示全部楼层
10.gif

2004A LCD字符型液晶显示模块
是专门用于显示字母、数字、符号等的点阵型液晶显示模块。分4位和8位数据传输方式。提供5×7点阵+光标的显示模式。提供显示数据缓冲区符发生器CGRAM,可以使用CGRAM来存储自己定义的8个5×8点阵的图形字符的字模数据。提供了丰富的指令设置:清显示;光标回原点;显示开/关;光标开/关;显示字符闪烁;光标移位;显示移位等。提供内部上电自动复位电路,当外加电源电压超过+4.5V时,自动对模块进行初始化操作,将模块设置为默认的显示工作状态。 显示内容为4行,每行显示20个字符,每个字符大小为5×8点阵。 字符发生器RAM可根据客户需求, 订做中日文、俄文等12种不同国家的字符。

回复

使用道具 举报

ID:513258 发表于 2019-10-7 09:52 | 显示全部楼层
08.jpg
回复

使用道具 举报

ID:513258 发表于 2019-10-7 09:59 | 显示全部楼层
09.jpg

主要参数
型 号  2004A
封 装  COB  
外型尺寸  98.0mm×60.0mm  
连接方式  导电胶条
视域尺寸  76.0mm×26.0mm  
接口方式  单排并口  
点 尺 寸 0.55mm×0.55mm
背光类型 EL/LED
字符尺寸 29.5mm×47.5mm  
显示内容 20个字符×4行
工作电压  +5V/+3.3V
显示屏面 黄绿/蓝屏/黑白屏
背光颜色 黄绿/白光/红光等
工作温度  -10~+60℃  
控 制 器 SPLC780
储存温度  -20~+70℃

回复

使用道具 举报

ID:513258 发表于 2019-10-7 10:58 | 显示全部楼层
IIC(Inter-Integrated Circuit)
字面上的意思是集成电路之间,它其实是I2C Bus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。I2C的正确读法为“I平方C”("I-squared-C"),而“I二C”("I-two-C")则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用I2C协议已经不需要支付专利费,但制造商仍然需要付费以获取I2C从属设备地址。

I2C,一种总线结构。例如:内存中的SPD信息,通过IIC,与BX芯片组联系,IIC 存在于英特尔PIIX4结构体系中。随着大规模集成电路技术的发展,把CPU和一个单独工作系统所必需的ROM、RAM、I/O端口、A/D、D/A等外围电路集成在一个单片内而制成的单片机或微控制器愈来愈方便。目前,世界上许多公司生产单片机,品种很多。其中包括各种字长的CPU,各种容量的ROM、RAM以及功能各异的I/O接口电路等等,但是,单片机的品种规格仍然有限,所以只能选用某种单片机来进行扩展。扩展的方法有两种:一种是并行总线,另一种是串行总线。由于串行总线的连线少,结构简单,往往不用专门的母板和插座而直接用导线连接各个设备。因此,采用串行线可大大简化系统的硬件设计。PHILIPS公司早在十几年前就推出了I2C串行总线,利用该总线可实现多主机系统所需的裁决和高低速设备同步等功能。因此,这是一种高性能的串行总线。

飞利浦电子公司日前推出新型二选一I2C主选择器,可以使两个I2C主设备中的任何一个与共享资源连接,广泛适用于从MP3播放器到服务器等计算、通信和网络应用领域,从而使制造商和终端用户从中获益。PCA9541可以使两个I2C主设备在互不连接的情况下与同一个从设备相连接,从而简化了设计的复杂性。此外,新产品以单器件替代了I2C多个主设备应用中的多个芯片,有效节省了系统成本。
12.jpg


回复

使用道具 举报

ID:513258 发表于 2019-10-7 11:05 | 显示全部楼层
IIC硬件结构
I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出。设备上的串行数据线SDA接口电路应该是双向的,输出电路用于向总线上发送数据,输入电路用于接收总线上的数据。而串行时钟线也应是双向的,作为控制总线数据传送的主机,一方面要通过SCL输出电路发送时钟信号,另一方面还要检测总线上的SCL电平,以决定什么时候发送下一个时钟脉冲电平;作为接受主机命令的从机,要按总线上的SCL信号发出或接收SDA上的信号,也可以向SCL线发出低电平信号以延长总线时钟信号周期。总线空闲时,因各设备都是开漏输出,上拉电阻Rp使SDA和SCL线都保持高电平。任一设备输出的低电平都将使相应的总线信号线变低,也就是说:各设备的SDA是“与”关系,SCL也是“与”关系。

总线对设备接口电路的制造工艺和电平都没有特殊的要求(NMOS、CMOS都可以兼容)。在I2C总线上的数据传送率可高达每秒十万位,高速方式时在每秒四十万位以上。另外,总线上允许连接的设备数以其电容量不超过400pF为限。

总线的运行(数据传输)由主机控制。所谓主机是指启动数据的传送(发出启动信号)、发出时钟信号以及传送结束时发出停止信号的设备,通常主机都是微处理器。被主机寻访的设备称为从机。为了进行通讯,每个接到I2C总线的设备都有一个唯一的地址,以便于主机寻访。主机和从机的数据传送,可以由主机发送数据到从机,也可以由从机发到主机。凡是发送数据到总线的设备称为发送器,从总线上接收数据的设备被称为接受器。

I2C总线上允许连接多个微处理器以及各种外围设备,如存储器、LED及LCD驱动器、A/D及D/A转换器等。为了保证数据可靠地传送,任一时刻总线只能由某一台主机控制,各微处理器应该在总线空闲时发送启动数据,为了妥善解决多台微处理器同时发送启动数据的传送(总线控制权)冲突,以及决定由哪一台微处理器控制总线的问题,I2C总线允许连接不同传送速率的设备。多台设备之间时钟信号的同步过程称为同步化。
12-0 (1).jpg


回复

使用道具 举报

ID:513258 发表于 2019-10-7 11:09 | 显示全部楼层
12-1 (1).jpg
IIC数据传输
在I2C总线传输过程中,将两种特定的情况定义为开始和停止条件(见图3):当SCL保持“高”时,SDA由“高”变为“低”为开始条件;当SCL保持“高”且SDA由“低”变为“高”时为停止条件。开始和停止条件均由主控制器产生。使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样,以检测这种变化。

SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,但每个字节必须要有一个应答ACK。如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。

数据传送具有应答是必须的。与应答对应的时钟脉冲由主控制器产生,发送器在应答期间必须下拉SDA线。当寻址的被控器件不能应答时,数据保持为高并使主控器产生停止条件而终止传输。在传输的过程中,在用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器,从而使被控发送器释放数据线,以允许主控器产生停止条件。合法的数据传输格式如下:I2C总线在开始条件后的首字节决定哪个被控器将被主控器选择,例外的是“通用访问”地址,它可以在所有期间寻址。当主控器输出一地址时,系统中的每一器件都将开始条件后的前7位地址和自己的地址进行比较。如果相同,该器件即认为自己被主控器寻址,而作为被控接收器或被控发送器则取决于R/W位。

回复

使用道具 举报

ID:513258 发表于 2019-10-7 11:12 | 显示全部楼层
模块规格
1.名称:IIC LCD2004字符液晶显示器
2.货号:RB-05L012
3.工作电压:DC 5V
4.对比度调节:电位器调节
5.背光调节:程序或手动控制开关
6.接口定义:+、-、SDA、SCL
7.模块尺寸:98×60×21mm
8.模块重量:78g 9.安装孔直径:3.5mm
10.水平安装孔圆心距:93mm
11.竖直安装孔圆心距:55mm
12.屏幕尺寸:98×40×9.8mm
13.工作温度:-30~+60℃
14.引脚定义:
            SDA:双向数据信号
            SCL:时钟信号
            +:电源(VCC)
            -:地(GND)

13.jpg


回复

使用道具 举报

ID:513258 发表于 2019-10-7 11:46 | 显示全部楼层
模块电原理图

13- (1).jpg

回复

使用道具 举报

ID:513258 发表于 2019-10-7 11:49 | 显示全部楼层
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百三十四:2004A字符显示液晶模块LCD/LCM 蓝屏5V(带背光 IIC/I2C)
  4. 项目一:寻找查询设备IIC地址,在串口上即可看到2004A的地址
  5. 这里查询结果是“0x27”(这个地址不对的话,实测无法烧录程序)
  6. Arduino------LCD2004A
  7. 5V-------------VCC
  8. GND-----------GND
  9. A4-----------SDA IIC 数据线
  10. A5-----------SCL  IIC 时钟线
  11. */

  12. #include <Wire.h>

  13. void setup(){
  14.   Wire.begin();
  15.   Serial.begin(9600);
  16.   Serial.println("\nI2C Scanner");
  17. }
  18. void loop(){
  19.   byte error, address;
  20.   int nDevices;
  21.   Serial.println("Eagler8 Scanning...");
  22.   nDevices = 0;
  23.   for (address = 1; address < 127; address++ ){
  24.    
  25.     Wire.beginTransmission(address);
  26.     error = Wire.endTransmission();
  27.     if (error == 0){
  28.       Serial.print("I2C device found at address 0x");
  29.       if (address < 16)
  30.         Serial.print("0");
  31.       Serial.print(address, HEX);
  32.       Serial.println(" !");
  33.       nDevices++;
  34.     }else if (error == 4){
  35.       Serial.print("Unknow error at address 0x");
  36.       if (address < 16)
  37.         Serial.print("0");
  38.       Serial.println(address, HEX);
  39.     }
  40.   }
  41.   if (nDevices == 0)
  42.     Serial.println("No I2C devices found\n");
  43.   else
  44.     Serial.println("done\n");
  45.   delay(5000);
  46. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2019-10-7 11:51 | 显示全部楼层
14.jpg
回复

使用道具 举报

ID:513258 发表于 2019-10-7 11:58 | 显示全部楼层
15.jpg
回复

使用道具 举报

ID:513258 发表于 2019-10-7 12:22 | 显示全部楼层
  1. /*
  2.   【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百三十四:2004A字符显示液晶模块LCD/LCM 蓝屏5V(带背光 IIC/I2C)
  4.   安装库:工具——管理库——搜索“LiquidCrystal_I2C"——下载安装
  5.   项目二:显示字符“Welcome to Eagler8”
  6.   Arduino------LCD2004A
  7.   5V-------------VCC
  8.   GND-----------GND
  9.   A4-----------SDA IIC 数据线
  10.   A5-----------SCL  IIC 时钟线
  11. */

  12. #include <Wire.h>
  13. #include <LiquidCrystal_I2C.h>
  14. LiquidCrystal_I2C lcd(0x27, 20, 4);

  15. void MyPrintLCD(String MyString)
  16. {
  17.   for (int i = 0; i < MyString.length(); i++)
  18.     lcd.write(MyString.charAt(i));
  19. }

  20. void setup()
  21. {
  22.   lcd.init();
  23.   lcd.backlight();
  24.   MyPrintLCD(" Welcome to ");
  25.   lcd.setCursor(0, 2);
  26.   MyPrintLCD("           Eagler8");
  27. }

  28. void loop()
  29. {
  30. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2019-10-7 12:23 | 显示全部楼层
16.jpg
回复

使用道具 举报

ID:513258 发表于 2019-10-7 15:22 | 显示全部楼层
  1. /*
  2.   【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百三十四:2004A字符显示液晶模块LCD/LCM 蓝屏5V(带背光 IIC/I2C)
  4.   安装库:工具——管理库——搜索“LiquidCrystal_I2C"——下载安装
  5.   项目三:多重显示字符,系列演示
  6.   Arduino------LCD2004A
  7.   5V-------------VCC
  8.   GND-----------GND
  9.   A4-----------SDA IIC 数据线
  10.   A5-----------SCL IIC 时钟线
  11. */

  12. #include <Wire.h>
  13. #include <LiquidCrystal_I2C.h>

  14. #if defined(ARDUINO) && ARDUINO >= 100
  15. #define printByte(args)  write(args);
  16. #else
  17. #define printByte(args)  print(args,BYTE);
  18. #endif

  19. uint8_t bell[8]  = {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4};
  20. uint8_t note[8]  = {0x2, 0x3, 0x2, 0xe, 0x1e, 0xc, 0x0};
  21. uint8_t clock[8] = {0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0};
  22. uint8_t heart[8] = {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0};
  23. uint8_t duck[8]  = {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 0x0};
  24. uint8_t check[8] = {0x0, 0x1, 0x3, 0x16, 0x1c, 0x8, 0x0};
  25. uint8_t cross[8] = {0x0, 0x1b, 0xe, 0x4, 0xe, 0x1b, 0x0};
  26. uint8_t retarrow[8] = {        0x1, 0x1, 0x5, 0x9, 0x1f, 0x8, 0x4};

  27. LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display

  28. void setup()
  29. {
  30.   lcd.init();                      // initialize the lcd
  31.   lcd.backlight();

  32.   lcd.createChar(0, bell);
  33.   lcd.createChar(1, note);
  34.   lcd.createChar(2, clock);
  35.   lcd.createChar(3, heart);
  36.   lcd.createChar(4, duck);
  37.   lcd.createChar(5, check);
  38.   lcd.createChar(6, cross);
  39.   lcd.createChar(7, retarrow);
  40.   lcd.home();

  41.   lcd.print("Hello world...");
  42.   lcd.setCursor(0, 1);
  43.   lcd.print(" i ");
  44.   lcd.printByte(3);
  45.   lcd.print(" arduinos!");
  46.   delay(5000);
  47.   displayKeyCodes();

  48. }

  49. // display all keycodes
  50. void displayKeyCodes(void) {
  51.   uint8_t i = 0;
  52.   while (1) {
  53.     lcd.clear();
  54.     lcd.print("Codes 0x"); lcd.print(i, HEX);
  55.     lcd.print("-0x"); lcd.print(i + 16, HEX);
  56.     lcd.setCursor(0, 1);
  57.     for (int j = 0; j < 16; j++) {
  58.       lcd.printByte(i + j);
  59.     }
  60.     i += 16;

  61.     delay(4000);
  62.   }
  63. }

  64. void loop()
  65. {

  66. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2019-10-7 15:24 | 显示全部楼层
17.gif

18.gif

回复

使用道具 举报

ID:513258 发表于 2019-10-7 15:44 | 显示全部楼层
19.jpg
回复

使用道具 举报

ID:513258 发表于 2019-10-7 15:45 | 显示全部楼层
20.jpg
回复

使用道具 举报

ID:513258 发表于 2019-10-7 16:01 | 显示全部楼层
21.jpg
回复

使用道具 举报

ID:513258 发表于 2019-10-7 16:04 | 显示全部楼层
22.jpg
回复

使用道具 举报

ID:629777 发表于 2019-11-22 23:40 | 显示全部楼层
请问怎么条件显示屏对比度
回复

使用道具 举报

ID:513258 发表于 2019-11-25 10:17 | 显示全部楼层
绝情谷里人 发表于 2019-11-22 23:40
请问怎么条件显示屏对比度

有个调节电位器,手工调整的
回复

使用道具 举报

ID:513258 发表于 2020-12-25 21:16 | 显示全部楼层
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
  3.   实验一百五十二:GY-25 串口直接输出角度数据 倾斜度角度传感器模块 MPU-6050
  4.   使用步骤:
  5.   1.先下载GY25_uart程序至arduino
  6.   2.再接上GY25模块
  7.   3.按复位按键
  8.   4.打开串口,波特率115200
  9.   5、接线
  10.   GY25                arduino uno
  11.   VCC----------------------VCC
  12.   RX-----------------------TX
  13.   TX-----------------------RX
  14.   GND----------------------GND
  15.   ---------------------------------------
  16.   IICLCD2004           arduino uno
  17.   VCC----------------------VCC
  18.   SCL----------------------A5
  19.   SDA----------------------A4
  20.   GND----------------------GND
  21.   实验之二:IICLCD2004显示动态角度数值
  22. */

  23. #include <Wire.h>
  24. #include <LiquidCrystal_I2C.h>
  25. int YPR[3];
  26. unsigned char Re_buf[8], counter = 0;
  27. unsigned char sign = 0;
  28. int led = 13;
  29. LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x20 for a 20 chars and 4 line display

  30. //-----------------------------------------------------------
  31. void setup()
  32. {
  33.   lcd.init();                      // initialize the lcd
  34.   // Print a message to the LCD.
  35.   Serial.begin(115200);
  36.   delay(2000);
  37.   Serial.write(0XA5);
  38.   Serial.write(0X52);    //初始化GY25,连续输出模式
  39.   lcd.backlight();
  40.   lcd.setCursor(0, 0);    //I2C接口LCD2004显示初始值
  41.   lcd.print("Yaw:");
  42.   lcd.setCursor(0, 1);
  43.   lcd.print("Pitch:");
  44.   lcd.setCursor(0, 2);
  45.   lcd.print("Roll:");
  46. }
  47. //-------------------------------------------------------------
  48. void loop() {
  49.   if (sign)
  50.   {
  51.     sign = 0;
  52.     if (Re_buf[0] == 0xAA && Re_buf[7] == 0x55)   //检查帧头,帧尾
  53.     {
  54.       YPR[0] = (Re_buf[1] << 8 | Re_buf[2]) / 100; //合成数据,去掉小数点后2位
  55.       YPR[1] = (Re_buf[3] << 8 | Re_buf[4]) / 100;
  56.       YPR[2] = (Re_buf[5] << 8 | Re_buf[6]) / 100;

  57.       lcd.setCursor(4, 0);
  58.       lcd.print("    ");
  59.       lcd.setCursor(4, 0);
  60.       lcd.print(YPR[0]);      //显示航向

  61.       lcd.setCursor(6, 1);
  62.       lcd.print("    ");
  63.       lcd.setCursor(6, 1);   //显示俯仰角
  64.       lcd.print(YPR[1]);

  65.       lcd.setCursor(5, 2);
  66.       lcd.print("    ");
  67.       lcd.setCursor(5, 2);    //显示横滚角
  68.       lcd.print(YPR[2]);
  69.       delay(100);
  70.     }
  71.   }
  72. }
  73. //----------------------------------------------------------
  74. void serialEvent() {
  75.   while (Serial.available()) {
  76.     Re_buf[counter] = (unsigned char)Serial.read();
  77.     if (counter == 0 && Re_buf[0] != 0xAA) return; // 检查帧头
  78.     counter++;
  79.     if (counter == 8)             //接收到数据
  80.     {
  81.       counter = 0;               //重新赋值,准备下一帧数据的接收
  82.       sign = 1;
  83.     }
  84.   }
  85. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2020-12-25 21:22 | 显示全部楼层
GY-25串口倾斜度模块实验场景图二,未输出角度数据,不知哪里出问题了



22.jpg

回复

使用道具 举报

ID:513258 发表于 2020-12-25 21:24 | 显示全部楼层
经过调试,LCD2004A可以显示动态角度数据了



23.jpg



24.jpg


回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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