zoukankan      html  css  js  c++  java
  • 51单片机学习笔记(清翔版)(25)——LCD1602和指针

    常说的有LCD液晶和LED液晶

    通常是背光源不同,LCD液晶的液晶面板是LCD的,背光源是荧光灯做的,LED液晶的面板也是LCD做的,背光源是LED灯做的。

    看到的这个暗黄色的就是液晶面板,如果没有背光,显示效果就是这样

    有背光是下面这种

    背光面板就是一个发光源,它的发光把液晶面板上所显示的内容照亮。

    LCD的发光体就是这个荧光管。通过背光板扩散均匀,照亮整个液晶面板。

    而LED液晶的背光源就是LED灯组成的,由多个LED灯组成的背光源去照亮整个面板。LED显示器基本上已成为主流的了,如液晶电视,手机电脑等。

    LCD的动态对比度等各种参数没有LED的做的好。

    1602:横着可以显示16个字符(方格),竖着可以显示两行。

    显示原理,每个方格里面有很多小格子(横着5个,竖着7个),通过编程让某些显示,某些不显示,来显示我们需要的内容。

    1604液晶:横16个字符,竖4行

    2004液晶:横20个字符,竖4行

    这都不能显示汉字,因为点数不够。当然可以显示很简单的。

    12232液晶:122*32个点组成的液晶,横着可以显示122个,竖着32个点

    12864液晶:横128,竖64个点

    学会了1602,这些基本都是没有什么差别的

    这个也是12864,很少见了,实际只有1个硬币那么大。

    这种是许多初学者都愿意学的彩屏的液晶。作为51单片机不建议使用,尤其是stc89c52,晶振11.0592MHz,如果要显示这么一张图片可能要接近一分钟的时间,因为图片信息量很大,分辨率也高,每一个像素格子又要由我们确定显示三原色的哪几种。

    像增强型51单片机,如stc15,晶振主频是1t的,比我们传统的快12倍,显示这种图片仍然要几秒钟。

    像这种液晶一般在嵌入式的32位用。


     开始学习,这次不看ppt,直接看中文使用手册。

    液晶内部有一个芯片,出来单片机发给它的数据,让液晶面板显示,芯片有一个工作电压要求4.5~5.5V。

    一共16个脚

    VL:液晶显示偏压信号,对比度调节端。

    8个脚传输数据,叫做并行传输。

    背光板里面有发光管,也是需要电源的。

    外形尺寸就是在我们要设计产品时我们要确定1602的外形尺寸。显示液晶通常是漏在外壳外面的。

    还有一个作用是在我们画PCB板是要用到。接上去后不能和旁边的区间冲突

    例如第一个读状态,我们根据时序输入完后,然后1602就把1个字节数据发给数据接口,发回的是状态字,返回液晶现在的一个状态,单片机根据状态判断接下来要怎么操作。

    我们看状态字,sta0-6返回当前地址指针的数值。

    每个方格都有一个对应的地址。

     sta7为读写操作使能,读这个液晶忙不忙,如果返回0,就不忙,如果是1,表示液晶正在处理数据,无法接受单片机发给他的数据。

    RAM缓冲区意思是我们一共可以送80个字节的数据放在RAM显示区里,但实际能显示的只有00~0F,40~4F,这32个字节,其它的显示不了, 但也是存在RAM里。

    但液晶提供了这么一种指令,例如左移显示或者右移显示,例如就把10的内容移到显示区域里显示。

    设置了显示模式后,必须开显示,也就是D=1,才能显示。

    这里不检测忙不忙,只是延时,然后不管忙不忙都开始写东西,等下我们可以不用这些延时,直接检测忙不忙,不忙才写程序忙就不写。

    总线型就是串行,我们不看,我们用的并行的。

    这里我们背光源的负极直接接地,没接10欧姆电阻。可以不接。

    实际背光调节端我们可以接1.5K电阻接地,就已经很清晰了。设置电位器目的可能是不同厂家的1602,它的电路组成参数可能不一样。

    液晶背面有画好的焊盘,没有焊接,厂家预留,为了以后升级或扩展功能用的。

    其实这里根据我们使用的这个硬件,根本不用考虑这个时序参数,因为我们硬件处理一次,即一个机器周期的时间1.085us,如果要是使用32位的那些快的单片机就需要考虑了。

    我们可以完全按照这个时序,但等下我们稍微精简了下。


    每次读写前都先对液晶检测忙不忙,如果不忙才可以操作。

     1 #include <reg52.h>
     2 
     3 #define uchar unsigned char
     4 #define uint  unsigned int
     5 
     6 sbit RS=P3^5;
     7 sbit RW=P3^6;
     8 sbit EN=P3^4;
     9 
    10 //判断液晶忙不忙,如果忙则等待
    11 void Read_Busy()
    12 {
    13     uchar busy;
    14     P0=0xff;//1602都是从P0给我们输出数据的,所以为了接收数据的正确性,先把P0全部拉高。
    15     RS=0;
    16     RW=1;
    17     do
    18     {
    19         EN=1;
    20         busy=P0;
    21         EN=0;//不使用的时候把使能端释放,为了接下来读写数据,因为都需要高脉冲。
    22     }while(busy&0x80);//只判断最高位,如果为1,则忙,就继续判断,直到不忙
    23 }
    24 //写LCD1602命令,写一个字节
    25 void Write_Cmd(uchar cmd)
    26 {
    27     Read_Busy();//判断忙不忙
    28     RS=0;
    29     RW=0;
    30     P0=cmd;
    31     EN=1;
    32     EN=0;
    33 }
    34 //写一个字节数据
    35 void Write_Dat(uchar dat)
    36 {
    37     Read_Busy();
    38     RS=1;
    39     RW=0;
    40     P0=dat;
    41     EN=1;
    42     EN=0;
    43 }
    44 void main()
    45 {
    46     Write_Cmd(0x38);//显示模式16*2
    47     Write_Cmd(0x0c);//开显示D=1
    48     Write_Cmd(0x06);//地址指针自动加一
    49     Write_Cmd(0x01);//清屏
    50     Write_Cmd(0x80);//设置数据地址指针
    51     Write_Dat(0x48);//0x48:H,显示是以16进制asc码显示,1+'0':1
    52     while(1);
    53 }

    这里1+'0',不能把'0'写成字符串,如:"0",这样会显示g,是一个错误的

     

    如果N=0(地址指针自动减1),这里试了没用,因为清屏后指针效果消除了,所以要放在清屏后面

     


    学习指针

  • 相关阅读:
    canvas之碎碎念
    canvas之动态时钟
    属性小问题
    readonly and disabled
    table
    地图热区
    子块元素在父块元素中居中
    Ajax与JS
    前端测试
    html5/css3
  • 原文地址:https://www.cnblogs.com/IceHowe/p/10854080.html
Copyright © 2011-2022 走看看