zoukankan      html  css  js  c++  java
  • 【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

    【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
    实验八十五:LCD1602液晶显示屏1602A模块 蓝屏黄绿屏灰屏5V 3.3V焊排针 IIC/I2C

    1602液晶

    也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

    LCD

    是 Liquid Crystal Display 的简称,意为“液态晶体显示器”,也叫液晶显示器。LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分普及。

    液晶

    某些物质在熔融状态或被溶剂溶解之后,尽管失去固态物质的刚性,却获得了液体的易流动性,并保留着部分晶态物质分子的各向异性有序排列,形成一种兼有晶体和液体的部分性质的中间态, 这种由固态向液态转化过程中存在的取向有序流体称为液晶。液晶是在自然界中出现的一种十分新奇的中间态,并由此引发了一个全新的研究领域。自然界是由各种各样不同的物质组成。以前,人们熟知的是物质存在有3态:固态、液态和气态。而固态又可以分为晶态和非晶态。在晶态固体中分子具有取向有序性和位置有序性,即所谓的长程有序。当然这些分子在平衡位置会发生少许振动,但平均说来,它们一直保持这种高度有序的排列状态。

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

    液晶显示材料

    具有明显的优点:驱动电压低、功耗微小、可靠性高、显示信息量大、彩色显示、无闪烁、对人体无危害、生产过程自动化、成本低廉、可以制成各种规格和类型的液晶显示器,便于携带等。由于这些优点。用液晶材料制成的计算机终端和电视可以大幅度减小体积等。液晶显示技术对显示显像产品结构产生了深刻影响,促进了微电子技术和光电信息技术的发展。液晶显示材料最常见的用途是电子表和计算器的显示板,为什么会显示数字呢?原来这种液态光电显示材料,利用液晶的电光效应把电信号转换成字符、图像等可见信号。液晶在正常情况下,其分子排列很有秩序,显得清澈透明,一旦加上直流电场后,分子的排列被打乱,一部分液晶会改变光的传播方向,液晶屏前后的偏光片会阻挡特定方向的光线,从而产生颜色深浅的差异,因而能显示数字和图象。

    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个点构成,每种颜色的点各自拥有不同的灰阶变化。

    LCD与OLED的不同点

    虽然在一定环境下观看LCD显示屏会出现色彩失真的现象,但这并不代表LCD一点优点都没有,存在即合理,LCD也还是具有很多优点的。例如消费者最关心的功率消耗的问题,LCD的功率消耗量是比较小的,而且一般LCD显示屏都会采用数字式接口,用起来也是非常方便的。

    OLED的工作原理是利用ITO玻璃透明电极和金属电极分别作为期间的阳极和也阴极,在一定电压驱动下,电子和空穴分别从阴极和阳极注入到电子传输层和空穴传输层,然后分别迁移到发光层激发后发出可见光。OLED的显示核心是自发光体,与LCD相比,虽然OLED的成本相对较高,但它快速响应时间可缩短为微妙级别,因为其不需要背光,所以具有宽视角的特性,上下左右的视角宽度可高达170度。此外,由于OLED理论上可以显示无穷种色彩,所以即便是显示黑色,也是可以达到全黑画面的,这在对比度上就拥有了很大的优势。OLED屏可以做到弯曲、折叠的状态,然而OLED最大的优势还不止对比度一点,OLED拥有超薄面板、重量轻的特点,值得一提的是,OLED屏可以做到弯曲、折叠,甚至可以像一张纸一样挂在墙上、放在口袋里、镶在衣服上。所以OLED更是受到大众的喜爱。总的来说,OLED在图像质量与超薄的特点方面略胜一筹,在未来显示行业中,OLED也将处于领先的趋势。不过目前OLED受限于生产成本,在突破大尺寸显示屏方面遭遇了瓶颈,在考虑成本方面,近些年OLED有望转战小屏市场,但无论如何,OLED仍将是未来几年显示行中的一匹黑马。

    LCD1602液晶屏5V显示模块

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

    1602模块管脚功能
    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引脚背光负极。

    1602模块电原理图

    IIC/I2C接口LCD1602转接板
    控制板IO口只有20个,加些传感器、SD卡啥的,继电器等模块多了,IO口就不够用了,原来的1602屏至少需要7个IO口才能驱动起来,这个模块可以帮你省5个IO口。

    参数
    1.供电电压:+5V
    2.支持I2C协议
    3.具有背光灯,和对比度调节电位器
    4.4线输出更简单
    5.设备地址:0x27

    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的电流源处于激活状态。

    实验开源代码

    /*
    
    【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
    
      实验八十五: LCD1602A液晶屏5V显示模块(IIC/I2C接口)
    
    项目一:寻找查询设备IIC地址,在串口上即可看到1602的地址
    
    这里查询结果是“0x27”(这个地址不对的话,实测无法烧录程序)
    
    Arduino------LCD1602
    
    5V-------------VCC
    
    GND-----------GND
    
    A4-----------SDA IIC 数据线
    
    A5-----------SCL IIC 时钟线
    
    */
    
    
    
    #include <Wire.h>
    
    void setup(){
    
     Wire.begin();
    
     Serial.begin(9600);
    
     Serial.println("
    I2C Scanner");
    
    }
    
    
    
    void loop(){
    
     byte error, address;
    
     int nDevices;
    
     Serial.println("Eagler8 Scanning...");
    
     nDevices = 0;
    
     for (address = 1; address < 127; address++ ){
    
       
    
      Wire.beginTransmission(address);
    
      error = Wire.endTransmission();
    
      if (error == 0){
    
       Serial.print("I2C device found at address 0x");
    
       if (address < 16)
    
        Serial.print("0");
    
       Serial.print(address, HEX);
    
       Serial.println(" !");
    
       nDevices++;
    
      }else if (error == 4){
    
       Serial.print("Unknow error at address 0x");
    
       if (address < 16)
    
        Serial.print("0");
    
       Serial.println(address, HEX);
    
      }
    
     }
    
     if (nDevices == 0)
    
      Serial.println("No I2C devices found
    ");
    
     else
    
      Serial.println("done
    ");
    
     delay(5000); 
    
    }
    

    实验串口返回情况

    /*
    
    【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
    
      实验八十五: LCD1602A液晶屏5V显示模块(IIC/I2C接口)
    
    项目二:显示字符“Welcome to Eagler8”
    
    Arduino------LCD1602
    
    5V-------------VCC
    
    GND-----------GND
    
    A4-----------SDA IIC 数据线
    
    A5-----------SCL IIC 时钟线
    
    */
    
    #include <Wire.h> 
    
    #include <LiquidCrystal_I2C.h>
    
    LiquidCrystal_I2C lcd(0x27,16,2);  
    
    void MyPrintLCD(String MyString){
    
     for (int i=0;i<MyString.length();i++)
    
     lcd.write(MyString.charAt(i));
    
      }
    
       
    
    void setup(){
    
    lcd.init(); 
    
    lcd.backlight(); 
    
    MyPrintLCD("Welcome to "); 
    
    lcd.setCursor(0,1); 
    
    MyPrintLCD("     Eagler8");
    
    }
    
    
    
    void loop(){
    
    }
    

    实验开源图形编程(Mixly、Mind+、编玩边学)

    实验开源仿真编程(Linkboy V4.2)

  • 相关阅读:
    Erlang千万级用户游戏框架(Openpoker)源码文件分析清单
    HDFS高级开发培训课程之HDFS开发实例课件
    VS2010安装顽疾解决方法:error 25541 failed to open xml file
    程序猿正能量之祖母的坚持
    文件路径
    文件夹操作
    文件夹、文件操作
    C#中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别
    linq to xml
    C#集合类型
  • 原文地址:https://www.cnblogs.com/eagler8/p/14882009.html
Copyright © 2011-2022 走看看