历史上的今天
返回首页

历史上的今天

今天是:2025年06月29日(星期日)

2019年06月29日 | 通用型1602,12232,12864液晶操作方法

2019-06-29 来源:eefocus

一、液晶概述:

       液晶(LiquidCrystal) 是一种高分子材料,因为其特殊的物理、化学、光学特性,20世纪中叶开始广泛应用在轻薄型显示器上。

       液晶显示器(LiquidCrystalDisplay,LCD)的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。为叙述简便,通常把各种液晶显示器都直接叫做液晶。

       各种型号的液晶通常是按照显示字符的行数或液晶点阵的行、列数来命名的。比如:1602的意思是每行显示16个字符,一共可以显示两行;类似的命名还有0801, 0802,1601等,这类液晶通常都是字符型液晶,即只 能显示ASCII码字符,如数字、大小写字母、各种符号等。12232液晶属于图形型液晶,她的意思是液晶由122列、32行组成,即共有122X32个点来显示各种图形,我们可以通过程序控制这122X32个点中的任一个点显示或不显示。类

似的命名还有12864,19264,192128,320240等,根据客户需要,厂家可以设计出任意数组合的点阵液晶。

       液晶体积小、功耗低、显示操作简单,但是它有一个致命的弱点,其使用的温度范围很窄,通用型液晶正常工作温度范围为0°C+55°C,存储温度范围为-20°C+60°C,即使是宽温级液晶,其正常工作温度范围也仅为-20°C+70°C,存储温度范围为-30°C+80°C,因此在设计相应产品时,务必要考虑周全,选取合适的液晶。

       本章主要介绍三种具有代表性的常用液晶,同时详细讲解并行操作方式和串行操作方式。市场上使用的1602液晶以并行操作方式居多,但也有并、串口同时具有的,用户可以选择用并口或串口操作。12232液晶同样也有这两种操作方式。只有并行接口的1602液晶接口如图7.1.1所示,其显示状态如图7.1.2所示。并、串口兼有的12232液晶接口如图7.1.3所示,其显示状态如图7.1.4所示

在这里插入图片描述
在这里插入图片描述

       12864液晶串行接口与并行接口共用,用户可选择其中一种方式操作,其接口图如图7.1.5所示,其显示状态如图7.1.6所示。

在这里插入图片描述

二、常用1602液品操作实例:

       1602液晶的讲解以并行操作为主,设计两个程序,一个是在液晶的任意位置显示字符,另一个是滚动显示一串字符。

       本教材实验使用的1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,不能显示汉字,内置含128个字符的ASCII字符集字库,只 有并行接口,无串行接口。

1、接口信号说明

       1602型液晶接口信号说明如表7.2.1所示。

在这里插入图片描述

2、主要技术参数(见表 7.2.2 )

在这里插入图片描述

3、基本操作时序

读状态 输入:RS=L, R/W=H, E=H 输出:D0~D7=状态字。

读数据 输入:RS=H, R/W=H, E=H 输出:无。

写指令 输入:RS=L, R/W=L, D0~D7=指令码,E=高脉冲 输出:DO, D7=数据。

写数据 输入:RS=H, R/W=L, D0~D7=数据, E=高脉冲 输出:无。

4、RAM地址映射图

控制器内部带有80B的RAM缓冲区,对应关系如图7.2.1所示。

在这里插入图片描述

       当我们向图7.2.1中的000F、404F地址中的任一处写入显示数据时,液晶都可立即显示出来,当写入到1027或5067地址处时,必须通过移屏指令将它们移入可显示区域方可正常显示。

5、状态字说明(见表7.2.3)

在这里插入图片描述

       注意:原则上每次对控制器进行读/写操作之前,都必须进行读/写检测,确保STA7为0。实际上,由于单片机的操作速度慢于液晶控制器的反应速度,因此可以不进行读/写检测,或只进行简短延时即可。


6、数据指针设置

控制器内部设有一个数据地址指针,用户可以通过它们访问内部的全部80B的RAM,如表7.2.4所示。

在这里插入图片描述

7、其他设置(见表 7.2.5 )

在这里插入图片描述

8、初始化设置

       (1) 显示模式设置(见表 7.2.6)

在这里插入图片描述

       (2) 显示开/关及光标设置(见表 7.2.7)

在这里插入图片描述

9、写操作时序(见图 7.2.2)

       分析时序图可知操作 1602液晶的流程如下:

(1) 通过RS 确定是写数据还是写命令。写命令包括使液晶的光标显示/不显 示、光标闪烁/不闪烁、需/不需要移屏、在液晶的什么位置显示,等等。写数据是指要显示什么内容。

在这里插入图片描述

(2) 读/写控制端设置为写模式,即低电平。

(3) 将数据或命令送达数据线上。

(4) 给E一个高脉冲将数据送入液晶控制器,完成写操作。

关于时序图中的各个延时,不同厂家生产的液晶其延时不同,我们无法提供准确数据,大多数基本都为纳秒级,单片机操作最小单位为微秒级,因此我们在写程序时可不做延时,不过为了使液晶运行稳定,最好做简短延时,这需要大家自行测试以选定最佳延时。

TX-1C实验板上1602液晶与单片机接口如图7.2.3所示。

在这里插入图片描述

接口说明如下:

(1) 液晶1,2端为电源;15,16为背光电源;为防止直接加5V电压烧坏背光灯,在15脚串接一个10Ω电阻用于限流。

(2) 液晶3端为液晶对比度调节端,通过一个10kΩ电位器接地来调节液晶显示对比度。首次使用时,在液晶上电状态下,调节至液晶上面一行显示出黑色小格为止。

(3) 液晶4端为向液晶控制器写数据/写命令选择端,接单片机的P3.5口。

(4) 液晶5端为读/写选择端,因为我们不从液晶读取任何数据,只向其写入命令和显示数据,因此此端始终选择为写状态,即低电平接地。

(5) 液晶6端为使能信号,是操作时必需的信号,接单片机的P3.4口。

【例7.2.1】用C语言编程,实现在1602液晶的第一行显示"123456789Sumjess",在第二行显示" 1 00:00:00 "。新建文件Sumjess2.5_1.c,程序代码如下:


#include //编译器自带的库用 < > 编译器包含C52的定义

#include //编译器自带的库用 < > 循环移位函数等

#include //编译器自带的库用 < >   标准输入输出函数

#include //编译器自带的库用 < >   C语言标准库函数


#include "delay_Sum.h" //后加的库用 “ ” 延时函数、显示器延时函数

#include "74hc595_Sum.h" //后加的库用 “ ” 74hc595芯片操作

#include "boardinit_Sum.h" //后加的库用 “ ” 数码管硬件芯片定义

#include "1602_Sum.h" //后加的库用 “ ” 1602函数



void main()

{  

    char e[16]={"123456789Sumjess"};   

    uchar m=0;

boardinit(); //数码管硬件初始化

lcdinit_1602(); //1602初始化

 

while(1)

{

m=rand();

Disp_1602(1,1,e,16);

Disp_1602(1,2,"    00:00:00    ",16);

write_twoline_1602(2,(int)m);

delay(1000);

}

   }


库函数如下:


/*

* 文 件 名:1602led.c.c

* 芯    片:1602液晶

* 晶    振:11.0592MHz

* 创 建 者:XK

* 创建日期:2011.8.6

* 修 改 者:

* 修改日期:

* 功能描述:1602,写数据函数 

*/


#include

#include "1602_Sum.h"

#include "delay_Sum.h"

#include "74hc595_Sum.h"


sbit rs_1602=P2^5; //1602rs信号

sbit rw_1602=P2^6; //1602rw信号

sbit e=P2^4;  


/*

void write_zl(uchar zl)

{

rs=0;

    P0=zl;

    delay(5);

    e=1;

    delay(5);

    e=0;

}


void write_sj(uchar sj)

{

rs=1;

    P0=sj;

    delay(5); 

    e=1;

    delay(5);

    e=0;

}   */

void write_order_1602(uchar order_data)

{


   e=0;

   rs_1602=0;

   P0=order_data;

   e=1;

       delay(1);

       e=0;

}


void write_data_1602(uchar data_1602)

{

e=0;

rs_1602=1;

P0=data_1602;

e=1;

    delay(1);

    e=0;

}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////

//功能:按指定位置显示一串字符

///////////////////////////////////////////////////////////////

//输入:    ////////

//列显示地址x_1602(取值范围1-16)    ////////

//行显示地址y_1602(取值范围1-2),    ////////

//指定字符串指针*p_1602,    ////////

//要显示的字符个数count_1602 (取值范围1-16)    ////////

///////////////////////////////////////////////////////////////

// 子函数使用例子: Disp_1602(1,1," TEMP:    .     ",16); //在1602第一行第一列写16个字符,既字符串数据

/////////////////////////////////////////////////////////////////////////////////////////////////////////////


void Disp_1602(unsigned char x_1602,unsigned char y_1602,unsigned char *p_1602,unsigned char count_1602)

{

unsigned char i;    

    for(i=0;i    {

        if (1 == y_1602) 

x_1602 |= 0x80; //当要显示第一行时地址码+0x80;

        else x_1602 |= 0xC0;        //在第二行显示是地址码+0xC0;

        write_order_1602(x_1602-1);

        write_data_1602(*p_1602);

        x_1602++;  

        p_1602++;

    }        

}      



void write_oneline_1602(uchar add_1602,uint date_1602)

{

  uchar ge,shi;

     

shi=date_1602/10;

    ge=date_1602%10;

write_order_1602(0x80+add_1602-1);

    write_data_1602(0x30+shi);

    write_order_1602(0x80+add_1602);

    write_data_1602(0x30+ge);

 


    //在1602上写时间函数  即在1602第二行指定位置上写显示


}

  

void write_twoline_1602(uchar add_1602,uint date_1602)

{

uchar shi,ge;

    shi=date_1602/10;

    ge=date_1602%10;

    write_order_1602(0x80+0x40+add_1602-1);

    write_data_1602(0x30+shi);

    write_order_1602(0x80+0x40+add_1602);

    write_data_1602(0x30+ge);      //在1602上写时间函数  即在1602第二行指定位

     


}


void lcdinit_1602()

{

    rw_1602=0;

e=0;

write_byte_74hc595(0X02);//关流水灯使能 关蜂鸣器 光继电器 打开1602背光打开 

write_order_1602(0x38); //液晶设置不判忙模式

write_order_1602(0x0c); //开显示 不显示光标

write_order_1602(0x06); //当写一个字符是,地址指针加 1

write_order_1602(0x01); //显示清屏

}



分析如下:

① 写命令操作和写数据操作分别用两个独立的函数来完成,函数内部唯一的区别就是液晶数据命令选择端的电平,写命令函数解释如下:

void write_com(uchar com)

lcdrs=0; //选择写命令模式

P0=com;//将要写的命令字送到数据总线上

delay(5);//稍做延时以待数据稳定

lcden=1;//使能端给一高脉冲,因为初始化函数中已经将lcden置为0

delay(5);//稍做延时

lcden=0;//将使能端置0以完成高脉冲

② 初始化函数中几个命令的解释请对照前面的指令码及功能说明。

write_com(0x38); //设置16X2显示,5X7点阵,8位数据接口

write_com(0x0c); //设置开显示,不显示光标

write_com(0x06); //写一个字符后地址指针自动加1write_com(0x01); //显示清0, 数据指针清0

③ 进入主函数,执行完初始化函数后,用"write_com(0x80);"命令先将数据指针定位到第一行第一个字处,然后写完第一行要显示的字,在每两个字之间做简短延时,这个时间可自行测试,时间太长会影响写入及显示速度,时间太短会影响控制器接收数据的稳定性,以测试稳定为最佳。

④ 当写第二行时需要重新定位数据指针:write_com(0x80+0x40)。

例7.2.1实际现象效果图如图7.2.4所示。

在这里插入图片描述


分析如下:

① 在写第一行数据前先定位数据指针"write_com(0x80+0x10);",将数据写在液晶第一行非显示区域地址处,写第二行时同样用’'write_com(0x80+0x10);"定位数据指针,这样写的目的是在接下来要使用移屏命令将液晶整屏向左移动。

② "write_com(0x18);"为整屏左移指令,每间隔200ms移动l个地址,共移动16个地址,刚好将要显示的数据全部移入液晶可显示区域。

③ 0x07指令也可完成移屏功能,大家可自行做实验验证。

例7.2.2实际现象效果图如图7.2.5所示。


在这里插入图片描述

三、常用12232 液晶操作实例:

       12232液晶的讲解以串行操作为主,设计两个程序,一个是在液晶的任意位置显示数字、符号和汉字,另一个是滚动显示一串字符。

       本教材实验使用的12232液晶为5V电压驱动,带背光,内置含8192个汉字的16X16点汉字库和含128个字符的16X8点ASCII字符集。该液晶主要由行驱动器、列驱动器及128X32全点阵液晶显示器组成可完成图形显示,也可以显示7.5X2个(16X16点阵)汉字,与外部CPU接口采用并行或串行两种控制方式。

1、接口信号说明

12232液晶并行接口信号说明如表7.3.1所示。

在这里插入图片描述

12232液晶串行接口信号说明如表7.3.2所示。

在这里插入图片描述

2、主要技术参数(见表7.3.3)

在这里插入图片描述

3、井行基本操作时序

读状态 输入:RS=L, R/W=H,E=H 输出:D0~D7=状态字。

读数据 输入:RS=H,R/W=H,E=H 输出:无。

写指令 输入:RS=L, R/W=L, D0-D7=指令码,E=高脉冲 输出:D0~D7=数据。

写数据 输入:RS=H,R/W=L, D0-D7=数据, E=高脉冲 输出:无。


4、忙标志(BF)

BF标志提供内部工作情况。BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。

利用STATUSRD指令,可以将BF读到DB7总线来检验模块的工作状态。


5、字型产生ROM(CGROM)

字型产生ROM(CGROM)提供8192个触发器,用千模块内部屏幕显示开/关控制。DFF=1为开显示(DISPLAYON),此时将DDRAM 的内容显示在屏幕上。DFF=O为关显示(DISPLAY

OFF)。DFF状态是由指令DISPLAYON/OFF和RST信号控制的。


6、显示数据RAM(DDRAM)

模块内部显示数据RAM提供64X2个位元组空间,最多可控制4行16字(64个字)的中文字型显示(本模块只用到其中的7.5X2 个)。当写入显示数据RAM时,可分别显示CGROM与CGRAM字型。此模块可显示三种字型,分别是瘦长的英数字型(16X8)、CGRAM字型及CGROM中文字型。三种字型的选择,由DDRAM中写入的编码选择,在000F的编码中将选择CGRAM的定义,107F的编码中将选择瘦长英数字的字型,至于A0以上的编码自动地结合下一个位元组,组成两个位元组的编码,形成中文字型编码(A140~D75F)。

7、字型产生RAM(CGRAM)

字型产生RAM提供图像定义(造字)功能,可以提供4组16X16点的自定义图像空间,使用者可以将内部字型没有提供的图像字型自行定义到CGRAM中,便可和CGROM中定义过的字型一样,通过DDRAM显示在屏幕上。

8、地址计数器AC

地址计数器用来存储DDRAM/CGRAM的地址,它可由设定指令暂存器来改变,之后只要读取或写入DDRAM/CGRAM的值,地址计数器就会自动加1,当RS=O且Rfvi=l时,地址计数器的值会被读取到DB6DBO中。 .

9、游标/闪烁控制电路

此模块提供硬件游标及闪烁控制电路,由地址计数器的值来指定DDRAM中的游标或闪烁位置。

10、状态字说明(见表7.3.4)

在这里插入图片描述

       注意:原则上每次对控制器进行读/写操作之前,都必须进行读/写检测,确保STA7为0。实际上,由千单片机的操作速度低于液晶控制器的反应速度,因此可以不进行读/写检测,或只进行简短延时即可。

11、指令说明(见表7.3.5)

在这里插入图片描述
在这里插入图片描述


       另外,当RE=1时,还有一些扩充指令可设定液晶的一些功能,如待机模式、卷动地址开关开/启、反白显示、睡眠、控制功能设定、绘图模式、设定绘图RAM地址等,关于这部分扩展功能请大家查阅相关资料,这里不再赘述。

12、井行写操作时序(见图7.3.1)

在这里插入图片描述

13、串行读/写操作时序(见图7.3.2)

在这里插入图片描述

       由于122332液晶的并行操作方式基本与1602液晶相同,所以不再讲述,本节主要讲解12232液晶的串行操作方式,这里重点讲解串行时序。

(1) CS—液晶的片选信号线,每次在进行数据操作时都必须将CS端拉高。

(2) SCLK—串行同步时钟线,每操作一位数据都要有一个SCLK跳变沿,而且在这里是上升沿有效。也就是说,每次SCLK由低电平变为高电平的瞬间,液晶控制器将SID上的数据读入或输出。

(3) SID—串行数据,每一次操作都由三个字节数据组成,第一字节向控制器发送命令控制字,告诉控制器接下来是什么操作,若为写指令则发送11111000,若为写数据则发送11111010。第二字节的高4位发送指令或数据的高4位,第二字节的低4位补0。第三字节的高4位发送指令或数据的低4位,第三字节的低4位同样补0。

12232液晶的串行接口非常简单,只需要三条线与单片机的任意三个I/O口相连即可操作,图7.3.3为12232的最简单接线图,这里我们没有加入背光,3端的对比度调节端接一10kΩ电位器的滑动端,电位器另两端分别接Vcc和GND,注意这里和1602液晶有所不同,现在市面上也有部分12232液晶不需要调节对比度,出厂时已经设定好。SCLK,SID,CS三条线与单片机的任意I/O口相连,TX-1C实验板上连接方式见源程序。

推荐阅读

史海拾趣

Epistar Corp公司的发展小趣事

近年来,随着OLED(有机发光二极管)技术的兴起,LED行业面临着巨大的挑战。Epistar敏锐地意识到了这一点,开始积极调整战略方向,加大在OLED技术领域的研发力度。同时,公司还通过优化产品结构、提高生产效率等措施降低成本、提升竞争力。这些努力使Epistar在OLED技术浪潮中保持了稳健的发展态势。

Computer Conversions Corp公司的发展小趣事

面对日益严峻的环境问题,Computer Conversions Corp积极响应环保号召,开始研发更加环保的计算机转换技术。公司不仅优化了生产工艺,减少了生产过程中的能源消耗和废弃物排放,还推出了一系列节能型转换设备,帮助客户在提升计算效率的同时,也降低了能源消耗。这一举措不仅赢得了客户的赞赏,也提升了公司的社会形象。

First Silicon Co., Ltd公司的发展小趣事

随着全球电子市场的不断扩张,First Silicon公司意识到单一市场已无法满足其长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,实现了从研发、生产到销售的全球化布局。这一战略不仅有效降低了公司的运营成本,还极大地提升了其品牌影响力和市场份额。在全球化进程中,First Silicon还积极与当地企业开展合作,共同推动电子技术的进步和应用。

Dowosemi公司的发展小趣事

作为一家高新技术企业,Dowosemi公司深知研发投入对企业发展的重要性。他们每年都将大量的资金投入到研发领域,不断推出新的产品和解决方案。这些新产品不仅提升了公司的技术实力,也为公司带来了更多的市场机会。正是这种对研发的重视和投入,让Dowosemi公司在竞争激烈的电子行业中保持了持续的发展动力。

BELDEN公司的发展小趣事

随着市场的不断发展和竞争的加剧,BELDEN公司开始通过并购来扩大规模和提升竞争力。2004年7月,BELDEN公司与CDT公司合并,这次合并使得BELDEN成为了全球最大的通讯线缆和网络产品生产厂家之一。合并后的BELDEN不仅拥有了更丰富的产品线和更强大的技术实力,还进一步提升了在全球市场中的竞争地位。此后,BELDEN继续通过并购等方式不断扩大规模,逐步成为了电子行业的领军企业。

爱特姆(ATOM)公司的发展小趣事

爱特姆深知人才是企业发展的核心动力。因此,公司一直注重人才的引进和培养。通过招聘行业内的优秀人才,建立了一支高素质、专业化的研发团队。同时,公司还定期举办各类培训活动,提升员工的技能水平和综合素质。

问答坊 | AI 解惑

2008-10-18,TI C64x网络开发应用技术讲座邀请函

——AKA阿卡技术沙龙之DSP篇 2008年10月18日,AKA阿卡技术沙龙之DSP技术讲座在北京交通大学九教中102室举行,大会特邀了闻亭数字技术总监——尚高,就德州仪器(TI)公司最新推出的TI C64x网络开发应用技术做主题演讲。 德州仪器(TI)公司作为模拟 ...…

查看全部问答>

MSP430最小系统资料

本最小系板购于淘宝,位开发热量表而购置的。 焊接前: 焊接后: MSP430F149最小系统原理图及其使用手册:…

查看全部问答>

试问从51单片机到ARM的路有多远

RT      望有经验之大师,谈谈彼此之间想法, 以借我们菜鸟分享学习~~~~…

查看全部问答>

evc显示汉字问题

我在查询程序中,在“类型”一项里需要有中文的显示。但在开发板里显示的是□□□,请问高手怎样才能让它显示汉字?我的查询显示语句是strTemp.Format(_T(\"%s-车号%s-类型%s-毛重%s-皮重%s-净重%s\"),q.fieldValue(1),q.fieldValue(2),q.fieldValu ...…

查看全部问答>

EVC编译问题:CVTRES : fatal error CVT1102

本人原先系统是在PPC2003 SDK下,工具VS2005;现更换成酷派WINCE5 SDK下,工具EVC4。更换系统后,有无新系统SDK支持功能少,有些都用不上去了,需要重新定义。但是,现在编译时,提示:CVTRES : fatal error CVT1102: out of memory; 41 bytes requ ...…

查看全部问答>

nb0和nb1的问题

小弟最近用wince5.0编译内核,发现在某些情况下会生成。nb1文件,比如说eboot.nb1这种情况看了一些说法是eboot.nb0空间不够存放内核,所以放到eboot.nb1中,但是查看eboot.bin文件发现空间还多的是。在有些时候会出现上面的情况。我用的AT91SAM9261 ...…

查看全部问答>

430F149的信息段FLASH中定义变量问题

把几个需要掉电保存的变量定义在信息段flash中。 参见斑竹以及几位大侠的介绍,我修改了xcl(连接文件) -Z(CODE)INFOA=1000-1079 //yg change -Z(CODE)INFOB=1080-10FF //yg change 把A 和B两个各128字节的 信息段flash标志出来。 问题 ...…

查看全部问答>

解答FPGA工程师面试第一题+第二题(每日一题)...............................

1.同步电路与异步电路的区别是什么? 异步电路主要是组合逻辑电路,用于产生地址译码器、FIFO或RAM的读写控制信号脉冲,但它同时也用在时序电路中,此时它没有统一的时钟,状态变化的时刻是不稳定的,通常输入信号只在电路处于稳定状态时才 ...…

查看全部问答>

带有CAN,USB,232,485智能步进电机系统PD

◆     PANdrive系列:控制器+驱动器+电机(步进,直流无刷)+编码器  PANdrive系列产品是一种智能产品集成了控制器,驱动器,电机,磁编码器与一体此外支持如USB,RS232,RS485,CAN等多种通讯方式。外部只需要提供 ...…

查看全部问答>

IIC问题

我用24c02读写数据,但是数据就是读不出来  用开发板是好的 仿真也没问题,检测24c02也没问题,但就是在读写走不出来,外围接了个10K的上拉电阻。。求高手指教啊.......我知道是我硬件问题,但找不到啊!…

查看全部问答>