【Arduino】168种传感器模块系列实验(88)--- LCD1602液晶屏
IIC LCD1602A液晶屏显示模块的实物照片程序十五:综合测试LCD显示屏(1)Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十五:综合测试LCD显示屏
下载安装库:https://github.com/mathertel/LiquidCrystal_PCF8574
实验接线
Arduino------LCD1602
5V------------VCC
GND-----------GND
A4-----------SDA IIC 数据线
A5-----------SCLIIC 时钟线
*/
#include <LiquidCrystal_PCF8574.h>//导入驱动库
#include <Wire.h>
// 将 LCD 地址设置为 0x27 以实现 16 个字符和 2 行显示
LiquidCrystal_PCF8574 lcd(0x27);
int show = -1;
void setup(){
int error;
Serial.begin(115200);
Serial.println("LCD...");
// 等待串口工作
while (!Serial)
;
Serial.println("捡测:未发现LCD");
// See http://playground.arduino.cc/Main/I2cScanner how to test for a I2C device.
Wire.begin();
Wire.beginTransmission(0x27);
error = Wire.endTransmission();
Serial.print("错误数= ");
Serial.println(error);
if (error == 0) {
Serial.println("ok! 找到 LCD! ");//LCD 找到
show = 0;
lcd.begin(16, 2); //初始化液晶屏
} else {
Serial.println(": LCD 未找到.");//LCD 未找到
} // if
Serial.println(" ");
}
void loop(){
if (show == 0) {
lcd.setBacklight(255);
lcd.home();
lcd.clear();
lcd.print("Hello LCD");//你好液晶屏
delay(1000);
lcd.setBacklight(0);
delay(400);
lcd.setBacklight(255);
} else if (show == 1) {
lcd.clear();
lcd.print("Cursor On");//光标打开
lcd.cursor();
} else if (show == 2) {
lcd.clear();
lcd.print("Cursor Blink");//光标闪烁
lcd.blink();
} else if (show == 3) {
lcd.clear();
lcd.print("Cursor OFF");//光标关闭
lcd.noBlink();
lcd.noCursor();
} else if (show == 4) {
lcd.clear();
lcd.print("Display Off");//显示关闭
lcd.noDisplay();
} else if (show == 5) {
lcd.clear();
lcd.print("Display On");//显示开启
lcd.display();
} else if (show == 7) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("*** first line.");//第一行
lcd.setCursor(0, 1);
lcd.print("*** second line.");//第二行
} else if (show == 8) {
lcd.scrollDisplayLeft();
} else if (show == 9) {
lcd.scrollDisplayLeft();
} else if (show == 10) {
lcd.scrollDisplayLeft();
} else if (show == 11) {
lcd.scrollDisplayRight();
} else if (show == 12) {
lcd.clear();
lcd.print("write-");//写入
} else if (show > 12) {
lcd.print(show - 13);
} // if
delay(1400);
show = (show + 1) % 16;
}
5、程序五:显示所有键码(1)Arduino参考开源代码 /*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序五:显示所有键码
实验接线
Arduino------LCD1602
5V-------------VCC
GND-----------GND
A4-----------SDA IIC 数据线
A5-----------SCLIIC 时钟线
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>//导入1602驱动
#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args)write(args);
#else
#define printByte(args)print(args,BYTE);
#endif
uint8_t bell= {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4};
uint8_t note= {0x2, 0x3, 0x2, 0xe, 0x1e, 0xc, 0x0};
uint8_t clock = {0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0};
uint8_t heart = {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0};
uint8_t duck= {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 0x0};
uint8_t check = {0x0, 0x1, 0x3, 0x16, 0x1c, 0x8, 0x0};
uint8_t cross = {0x0, 0x1b, 0xe, 0x4, 0xe, 0x1b, 0x0};
uint8_t retarrow = {0x1, 0x1, 0x5, 0x9, 0x1f, 0x8, 0x4};
// 将 LCD 地址设置为 0x27 以实现 16 个字符和 2 行显示
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init(); //初始化液晶屏
lcd.backlight(); //打开背光
lcd.createChar(0, bell);
lcd.createChar(1, note);
lcd.createChar(2, clock);
lcd.createChar(3, heart);
lcd.createChar(4, duck);
lcd.createChar(5, check);
lcd.createChar(6, cross);
lcd.createChar(7, retarrow);
lcd.home();
lcd.print("Hello world...");
lcd.setCursor(0, 1);
lcd.print(" i ");
lcd.printByte(3);
lcd.print(" arduinos!");
delay(5000);
displayKeyCodes();
}
// 显示所有键码
void displayKeyCodes(void) {
uint8_t i = 0;
while (1) {
lcd.clear();
lcd.print("Codes 0x"); lcd.print(i, HEX);
lcd.print("-0x"); lcd.print(i+16, HEX);
lcd.setCursor(0, 1);
for (int j=0; j<16; j++) {
lcd.printByte(i+j);
}
i+=16;
delay(4000);
}
}
void loop(){
}
IIC LCD1602A液晶屏显示模块的几个实验1、程序一:I2C 扫描仪(1)Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序一:I2C 扫描仪
这里查询结果是“0x27”(这个地址不对的话,实测无法烧录程序)
Arduino------LCD1602
5V-------------VCC
GND-----------GND
A4-----------SDA IIC 数据线
A5-----------SCLIIC 时钟线
*/
#include <Wire.h>
void setup() {
Wire.begin();//等待串口监视器
Serial.begin(9600);
Serial.println("\n I2C 扫描仪");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("eagler8 正在扫描......");
nDevices = 0;
for (address = 1; address < 127; address++ ) {
// i2c_scanner 使用的返回值
// Write.endTransmission 看是否
// 设备确实确认了地址。
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C 设备在地址 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
} else if (error == 4) {
Serial.print("地址 0x 出现未知错误");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println("没有找到 I2C 设备\n");
else
Serial.println("完成\n");
delay(5000);
}
科普知识点:液晶、LCD液晶屏和IIC 1602A显示屏模块
一、液晶(liquid crystal,LC)1、液晶,即液态晶体,是相态的一种,因为具有特殊的理化与光电特性,20世纪中叶开始被广泛应用在轻薄型的显示技术上。也可表述为,某些物质在熔融状态或被溶剂溶解之后,尽管失去固态物质的刚性,却获得了液体的易流动性,并保留着部分晶态物质分子的各向异性有序排列,形成一种兼有晶体和液体的部分性质的中间态,这种由固态向液态转化过程中存在的取向有序流体称为液晶。定义放宽,囊括了在某一温度范围可以是显液晶相,在较低温度为正常结晶的物质。例如,液晶可以像液体一样流动(流动性),但它的分子却是像道路一样取向有序的(各向异性)。有许多不同类型的液晶相,这可以通过其不同的光学性质(如双折射现象)来区分。当使用偏振光光源,在显微镜下观察时,不同的液晶相将出现具有不同的纹理。在纹理对比区域不同的纹理对应于不同的液晶分子。然而,所述分子是具有较好的取向有序的。而液晶材料可能不总是在液晶相(正如水可变成冰或水蒸汽)。 2、奥地利植物生理学家斐德烈•莱尼泽(Friedrich Reinitzer)在1883年藉由在植物内的安息香酸胆固醇酯(Cholesteryl Benzoate)加热来研究胆固醇,观察到胆固醇苯甲酸酯在热熔时的异常表现。该物质在145.5 ℃时熔化,产生了带有光彩的混浊物,温度升到178.5 ℃后,光彩消失,液体透明。此澄清液体稍微冷却后,混浊又复出现,瞬间呈现蓝色。莱尼泽确定他的发现后,向德国物理学家雷曼请教。当时雷曼建造了一座具有加热功能的显微镜去探讨液晶降温结晶之过程,后来更加上了偏光镜,成为深入研究此化合物的重要仪器。从那时开始,雷曼的精力完全集中在该类物质。他开始以为这种物质是软晶体,然后改称晶态流体,最后深信偏振光性质为该物质所特有,流动晶体(Fliessende kristalle)的名字才被他定下。此名称与液晶(Flussige kristalle)已经十分相近。莱尼泽和雷曼因此被誉为液晶之父。
3、液晶可分为热致液晶、溶致液晶。热致液晶是指由单一化合物或由少数化合物的均匀混合物形成的液晶。通常在一定温度范围内才显现液晶相的物质。典型的长棒形热致液晶的分子量一般在200~500g/mol左右。溶致液晶是一种包含溶剂化合物在内的两种或多种化合物形成的液晶。是在溶液中溶质分子浓度处于一定范围内时出现液晶相。它的溶剂主要是水或其它极性分子液剂。这种液晶中引起分子排列长程有序的主要原因是溶质与溶剂分子之间的相互作用,而溶质分子之间的相互作用是次要的。溶致液晶是一种包含溶剂化合物在内的两种或多种化合物形成的液晶。 4、液晶的用途。液晶分子的排列,后果之一是呈现有选择性的光散射。因排列可以受外力影响,液晶材料制造器件潜力很大。范围于两片玻璃基板(已发展出塑胶基板)之间的手性向列型液晶,经过一定手续处理,就可形成不同的纹理。胆固醇型液晶,因螺旋结构而对光有选择性反射,利用白光中的圆偏光,最简单的是根据变色原理制成的温度计(鱼缸中常看到的温度计)。在医疗上,皮肤癌和乳癌之侦测也可在可疑部位涂上胆固醇液晶,然后与正常皮肤显色比对(因为癌细胞代谢速度比一般细胞快,所以温度会比一般细胞高些)。
电场与磁场对液晶有巨大的影响力,向列型液晶相的介电性行为是各类光电应用的基础。用液晶材料制造以外加电场操作之显示器,在1970年代以后发展很快。因为它们有小容积、微量耗电、低操作电压、易设计多色面版等多项优点。不过因为它们不是发光型显示器,在暗处的清晰度、视角和环境温度限制,都不理想。无论如何,电视和电脑的屏幕以液晶材质制造,十分有利。大型屏幕在以往受制于高电压的需求,变压器的体积与重量不可言喻。其实,彩色投影电视系统,亦可利用手性向列型液晶去制造如偏光面版、滤片、光电调整器。
5、液晶显示材料具有明显的优点:驱动电压低、功耗微小、可靠性高、显示信息量大、彩色显示、无闪烁、对人体无危害、生产过程自动化、成本低廉、可以制成各种规格和类型的液晶显示器,便于携带等。由于这些优点,用液晶材料制成的计算机终端和电视可以大幅度减小体积等。液晶显示技术对显示显像产品结构产生了深刻影响,促进了微电子技术和光电信息技术的发展。液晶显示材料最常见的用途是电子表和计算器的显示板,为什么会显示数字呢?原来这种液态光电显示材料,利用液晶的电光效应把电信号转换成字符、图像等可见信号。液晶在正常情况下,其分子排列很有秩序,显得清澈透明,一旦加上直流电场后,分子的排列被打乱,一部分液晶会改变光的传播方向,液晶屏前后的偏光片会阻挡特定方向的光线,从而产生颜色深浅的差异,因而能显示数字和图象。
二、液晶显示器(liquid-crystal display,LCD)1、液晶显示器为平面薄型的显示设备,由一定数量的彩色或黑白像素组成,放置于光源或者反射环境光源。其功耗低,因此备受工程师青睐,适用于使用电池的电子设备。它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分普及。
2、液晶显示器的每个像素由以下几个部分构成:悬浮于两个透明电极(氧化铟锡)间的一列液晶分子层,两边外侧有两个偏振方向互相垂直的偏振过滤片。如果没有电极间的液晶,光通过其中一个偏振过滤片其偏振方向将和第二个偏振片完全垂直,因此被完全阻挡了。但是如果通过一个偏振过滤片的光线偏振方向被液晶旋转,那么它就可以通过另一个偏振过滤液晶分子极易受外加电场的影响而产生感应电荷。将少量的电荷加到每个像素或者子像素的透明电极产生静电场,则液晶的分子将被此静电场诱发感应电荷并产生静电扭力,而使液晶分子原本的旋转排列产生变化,因此也改变通过光线的旋转幅度。改变一定的角度,从而能够通过偏振过滤片。
2、液晶显示器的每个像素由以下几个部分构成:悬浮于两个透明电极(氧化铟锡)间的一列液晶分子层,两边外侧有两个偏振方向互相垂直的偏振过滤片。如果没有电极间的液晶,光通过其中一个偏振过滤片其偏振方向将和第二个偏振片完全垂直,因此被完全阻挡了。但是如果通过一个偏振过滤片的光线偏振方向被液晶旋转,那么它就可以通过另一个偏振过滤液晶分子极易受外加电场的影响而产生感应电荷。将少量的电荷加到每个像素或者子像素的透明电极产生静电场,则液晶的分子将被此静电场诱发感应电荷并产生静电扭力,而使液晶分子原本的旋转排列产生变化,因此也改变通过光线的旋转幅度。改变一定的角度,从而能够通过偏振过滤片。
在将电荷加到透明电极之前,液晶分子的排列被电极表面的排列决定,电极的化学物质表面可作为晶体的晶种。在最常见的TN液晶中,液晶上下两个电极垂直排列。液晶分子螺旋排列,通过一个偏振过滤片的光线在通过液芯片后偏振方向发生旋转,从而能够通过另一个偏振片。在此过程中一小部分光线被偏振片阻挡,从外面看上去是灰色。将电荷加到透明电极上后,液晶分子将几乎完全顺着电场方向平行排列,因此透过一个偏振过滤片的光线偏振方向没有旋转,因此光线被完全阻挡了。此时像素看上去是黑色。通过控制电压,可以控制液晶分子排列的扭曲程度,从而达到不同的灰度。 3、有些液晶显示器在交流电作用下变黑,交流电破坏了液晶的螺旋效应,而关闭电流后,液晶显示器会变亮或者透明,这类液晶显示器常见于笔记本电脑与平价液晶显示器上。另一类常应用于高清液晶显示器或大型液晶电视上的液晶显示器则是在关闭电源时,液晶显示器为不透光的状态。为了省电,液晶显示器采用复用的方法,在复用模式下,一端的电极分组连接在一起,每一组电极连接到一个电源,另一端的电极也分组连接,每一组连接到电源另一端,分组设计保证每个像素由一个独立的电源控制,电子设备或者驱动电子设备的软件通过控制电源的开/关序列,从而控制像素的显示。检验液晶显示器的指标包括以下几个重要方面:显示大小、反应时间(同步速率)、阵列类型(主动和被动)、视角、所支持的颜色、亮度和对比度、分辨率和屏幕高宽比、以及输入接口(例如视觉接口和视频显示阵列)。
4、LCD 构成
(1)背光源(或背光模组)——由于液晶分子自身是无法发光的,因此若想出现画面,液晶显示器需要专门的发光源来提供光线,然后经过液晶分子的偏转来产生不同的颜色。而背光源起到的就是提供光能的作用。之前液晶显示器采用的都是名叫CCFL的冷阴极射线管,其发光原理与日光灯几乎完全相同,而现在新品液晶显示器都采用了更加节能、长寿面的LED背光源。灯管(或LED)发光后藉由导光板将光线分布到各处,通过背面的反射板将所有的光线的方向集中朝向液晶分子。最后光线通过prism sheet以及扩散板将光线均匀的散发出去,避免出现中央亮度过高、四周亮度过低的情况。
(2)上下层两个偏光片——偏光片的作用是让光线从单方向通过。
(3)上层和下层两块玻璃基板——玻璃基板不仅仅是两块玻璃那么简单,其内侧具有沟槽结构,并附着配向膜,可以让液晶分子沿着沟槽整齐的排列。在上、下两层玻璃两侧会贴有TFT薄膜晶体管和彩色滤光片。
(4)ITO透明导电层——其作用是提供导电通路,分为像素电极(P级)和公共电极(M级)。在下一页中我们为大家讲解液晶面板结构更多的内容。
(5)薄膜晶体管(就是我们经常所说的TFT)——我们经常说TFT-LCD,其实际上指的就是这个薄膜晶体管,它的作用类似于开关,TFT能够控制IC控制电路上的信号电压,并将其输送到液晶分子中,决定液晶分子偏转的角度大小,因此其是非常重要的一个部件。
(6)液晶分子层 ——液晶分子层是改变光线偏光状态最重要的元素,通过电力和弹性力共同决定其排列和偏光状态。
(7)彩色滤光片——通过液晶分子偏转的光线只能显示不同的灰阶,但是不能提供红、绿、蓝(RGB)三原色,而彩色滤光片则由RGB三种过滤片组成,通过三者混和调节各个颜色与亮度。液晶面板中每一个像素由红、绿、蓝3个点构成,每种颜色的点各自拥有不同的灰阶变化。
5、LCD与OLED的不同点虽然在一定环境下观看LCD显示屏会出现色彩失真的现象,但这并不代表LCD一点优点都没有,存在即合理,LCD也还是具有很多优点的:驱动电压低、功耗微小、可靠性高、显示信息量大、彩色显示、无闪烁、对人体无危害、生产过程自动化、成本低廉、可以制成各种规格和类型的液晶显示器,便于携带等。另如消费者最关心的功率消耗的问题,LCD的功率消耗量是比较小的,而且一般LCD显示屏都会采用数字式接口,用起来也是非常方便的。 OLED的工作原理是利用ITO玻璃透明电极和金属电极分别作为期间的阳极和也阴极,在一定电压驱动下,电子和空穴分别从阴极和阳极注入到电子传输层和空穴传输层,然后分别迁移到发光层激发后发出可见光。OLED的显示核心是自发光体,与LCD相比,虽然OLED的成本相对较高,但它快速响应时间可缩短为微妙级别,因为其不需要背光,所以具有宽视角的特性,上下左右的视角宽度可高达170度。此外,由于OLED理论上可以显示无穷种色彩,所以即便是显示黑色,也是可以达到全黑画面的,这在对比度上就拥有了很大的优势。 OLED屏可以做到弯曲、折叠的状态,然而OLED最大的优势还不止对比度一点,OLED拥有超薄面板、重量轻的特点,值得一提的是,OLED屏可以做到弯曲、折叠,甚至可以像一张纸一样挂在墙上、放在口袋里、镶在衣服上。所以OLED更是受到大众的喜爱。总的来说,OLED在图像质量与超薄的特点方面略胜一筹,在未来显示行业中,OLED也将处于领先的趋势。不过目前OLED受限于生产成本,在突破大尺寸显示屏方面遭遇了瓶颈,在考虑成本方面,近些年OLED有望转战小屏市场,但无论如何,OLED仍将是未来几年显示行中的一匹黑马。
三、IIC LCD1602A液晶屏显示模块1、1602字符型液晶也叫1602液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。字符型液晶,能够同时显示16x02即32个字符。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
2、模块管脚功能1602采用标准的16脚接口,其中:
第1引脚:GND为电源地
第2引脚:VCC接5V电源正极
第3引脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4引脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5引脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写作。
第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。
第7~14引脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。
第15引脚背光正极,
第16引脚背光负极。
3、IIC/I2C接口LCD1602转接板控制板IO口只有20个,加些传感器、SD卡啥的,继电器等模块多了,IO口就不够用了,原来的1602屏至少需要7个IO口才能驱动起来,这个模块可以帮你省5个IO口。主要参数:(1)供电电压:+5V(2)支持I2C协议(3)具有背光灯,和对比度调节电位器(4)4线输出更简单(5)设备地址:0x27
4、PCF8574芯片
用于 I2C 总线的远程 8 位 I/O 扩展器,该8位输入/输出(I/O)扩展器用于双线双向总线(I2c),设计用于2.5-V至6-V VCC操作。PCF8574设备通过I2C接口[串行时钟(SCL)、串行数据(SDA)]为大多数微控制器系列提供通用远程I/O扩展。该设备具有一个8位准双向I/O端口(p0-p7),包括用于直接驱动LED的高电流驱动能力的锁存输出。每个准双向I/O可以用作输入或输出,而无需使用数据方向控制信号。通电时,I/O很高。在此模式下,只有VCC的电流源处于激活状态。
5、PCF8574主要特性(1)最大10微安的低待机电流消耗(2)I2c到并行端口扩展器(3)开漏中断输出(4)与大多数微控制器兼容(5)高电流驱动的锁存输出(6)直接驱动LED的能力(7)锁存性能超过100 mA(8)根据JASD 78,二级
6、IIC LCD1602A液晶屏显示模块电原理图
7、IIC LCD1602A液晶屏显示模块接脚图
IIC LCD1602A液晶屏显示模块的实验环境一、IIC LCD1602A液晶屏显示模块实验所需硬件清单DS1302时钟模块X1Arduino Uno开发板 X1杜邦线 若干(备了9条)HC-RS04超声波测距模块X1DHT11数字温湿度传感器模块X1IIC LCD1602A液晶屏显示模块X1Proto Shield 原型扩展板(带mini面包板)X1
二、传感器模块实验所需软件平台代码编程 Arduino IDE (版本1.8.19)仿真编程 Linkboy (版本V4.6.3)图形编程 Mind+(版本 V1.7.0 RC2.0)以及编玩边学(线上平台https://ide.codepku.com/?type=Arduino) 三、搜索和安装“LiquidCrystal_I2C”库1、打开Arduino IDE——工具——管理库,搜索LiquidCrystal_I2C