LCD显示模块并行接口驱动程序设计

发布者:SparklingMelody最新更新时间:2009-12-14 来源: 国外电子测量技术关键字:LCD显示模块  并行接口  驱动 手机看文章 扫描二维码
随时随地手机看文章

0 引 言

    人们在日常生活中,LCD占有很大的地位。人们使用的电脑、手机、车载系统、各种测量设备、显示设备等等,都把LCD作为重要的人机接口,它把使用者需要的信息及时反应出来。目前市场上存在着各种LCD和相对应的驱动模块,驱动模块所带的驱动程序都是针对本身模块开发的,各种驱动程序之间通用性差,而且在不同的平台上很难移植。每换一种LCD产品,都要根据它的驱动模块重写驱动程序。这样产品开发资源浪费,开发周期长,成本增加。本文将介绍一种LCD图形液晶驱动器的使用方法以及程序裁剪、移植和扩展,实现在任意坐标上显示图形和汉字。这款驱动器不带字库,对需要显示的汉字和字母通过字模产生器产生数据,通过程序设计把字体在LCD通过描点描述出来(本文所用的字模采用阳码)。

1 典型图形LCD驱动器NHC_313简介

1.1 驱动器简介

    NHC_313驱动器驱动最大点阵数为640(列)×480(行),显示颜色为65536色(16位色)。本文所用的LCD为SHARP公司产品,产品型号为LQ104V1DG52。NHC_313有8位复用并行接口一数据总线和控制总线。MCU可以通过总线对LCD进行操作,随时写显示存储器,而不影响显示效果,即显示不会出现“雪花”。NHC_313内部有两页显示缓存,使用人员可以让一页缓存的数据在LCD上显示出来,同时可以对第二页的缓存进行操作。此驱动器与微处理器接口连接简单,接口的读、写操作兼容8031总线时序。这款驱动器只是单纯的图形图像显示,没有内置字库、图形库。如果设计人员要显示汉字,必须要把需要的汉字用字模生成器产生字模的16进制文件,然后通过程序控制把需要的字体逐一描到LCD上。驱动器的控制引脚如下:

    WR:数据写入,低电平有效
    CS:片选端,低电平有效
    A0:地址信号线0
    A1:地址信号线1
    DB0~DB7:数据总线

    对NHC_313读写的时候采用8031时序,如图1为NHC_313接口电路8031时序图,在表1中列出了接口的时序特征参数。

    当驱动器与8051等I/O口读写速度不是很快的MCU连接时,I/O的特性其本上可以满足表1的时序特征参数,图2给出的是MCU和驱动器无缝连接的接口电路,这种方法是采用IO模拟时序的时候用到的引脚(不止局限于图中列出的引脚),本文建议采用I/O口模拟时序的方法控制驱动器。要注意的是如果I/O的读写速度过快则不能满足接口时序特性参数。例如采用Silab公司的C8051F340作为NHC_313的MCU,由于C8051F340的内部晶振为48MHz,I/O读写速度不能很好满足时序特性(写周期不能满足),所以在程序设汁中会看到有延时程序。而Atmel 8051系列单片机I/O可以满足表1的时序参数特性,不需要加入延时程序。

    表2为驱动器命令,由于显示的像素点数为640(列)×480(行),对于8位的I/O不能一次的把行和列的信息完全表示出来,由此设置了行列的高低地址(8位地址线只能表示0~255的地址信息)。

 

    对驱动器进行写操作要遵循以下规律:

    a)设定显示页和操作页地址(A1=A0=1,CS=0,WR=0)

    D1-D0设定列地址高字节;D2设定行地址高字节。开机时先执行此操作再执行其他操作。

    b)写行地址低字节。(A1=0,A0=1)

    c)写列地址低字节字节。(A1=1,A0=0)

    d)连续写两次8位字节对应一个像素点颜色(A1=0,A0=0)。第一个字节:

    R4、R3、R2、R1、R0表示红色灰度;G5、G4、G3、G2、G1、G0表示绿色灰度;B4、B3、B2、B1、B0表示蓝色灰度。如在同一行内连续写数据不用每次重写行坐标和列坐标,每一次“写数据”操作后列地址自动加1,即每写两个字节显示数据列地址自动加1。

1.2 关于液晶屏的简单说明

    本文中的液晶显示器显示的颜色数量为65536种一16位色,对一个像素点所要显示的颜色需要用两个字节的数据来表示。需要注意的是,LCD的坐标系同数学上的坐标系有所不同,LCD的坐标系如图3所示。

    坐标系上的点和LCD的像素点是一一对应的,每一个像素点用坐标系的横纵坐标唯一标识。由于八位的数据线只能表示0~255的范围,所以把LCD分割成了图3中的几个区域,这些区域保证了横纵坐标范围在0~255之内,通过设置行列高低地址选择所要显示的区域。每个区域独立为一个小的坐标系,如图3中的F区域所示,区域中的点用这个小坐标系的坐标唯一表示。例如在选择LCD上点(630,420),通过整体坐标轴把这个点定位到F区,通过简单的计算得知此点在F区域坐标下的新坐标值为(118,108)。选择区域的过程就是设置行列高低地址的过程,也可以理解为地址的写入为先写如高地址,后写入低地址,且地址的长度为11位,最高位为行列地址选择位。为了方便理解和使用,本文把地址用区域来表示。例如选择F区域,执行操作:A1=A0=1,CS=0,WR=0,然后向控制器写入D2D1D0=110。

2 程序设计、移植和剪裁方法

2.1 LCD驱动器I/O操作基本程序

    对驱动器控制是完成液晶产品开发的第一步也是关键部分,下面的程序是采用I/O模拟8031时序方法完成对控制器进行控制,通过这个方法有助于理解对控制器控制的操作步骤。图1为C8051F340同驱动器的连接方法,本文所有例程编写都遵循这种连接方式。操作基本程序清单如下:

    上述的dlcd,clcd1,clcd2,clcd3函数中,如果把控制器的片选信号接到低电平,cs这个管脚在程序可以略去;假如P4端口和其他端口相连接,cs管脚要通过I/O口控制驱动器是否选通。注意函数中的延迟函数:数据出现在端口上要经过T6的时间在wr的上升沿把数据写入控制器。

2.2 LCD高级程序设计

    函数draw_point功能:把有颜色的点在LCD指定位置显示出来。函数参数意义(参考图3):

    word_which_display:设置显示页;
    word_which_write:设置操作页;
    word_x,:新坐标O'在原坐标O下横坐标;
    word_y:新坐标O'在原坐标O下纵坐标;
    line_x:点G在坐标系O'下横坐标
    line_y:点G在坐标系O'下纵坐标
    yanse1,yanse2:连续写入的8位像素字节

    说明:显示页的设置是为了显示两页缓存中的一页数据到LCD上,操作页的设置是为了把数据写入到两页缓存当中的一页。如果显示页为第1页,操作页为第0页,此时LCD显示的是第一页的缓存的数据,此时把数据写入到第0页缓存中,写入的数据在LCD上不被显示;如果显示页为第0页,操作页为第0页,此时LCD显示的是第0页的缓存的数据,此时把数据写入到第0页缓存中,写入的数据可以在LCD上实时的显示出来。程序依据图3中对坐标轴设计方法和LCD区域划分手段判断点G在新坐标系O'中坐标值。在程序中一定要注意每写两个字节显示数据列地址(列坐标)自动加1。为此设计如下函数:

    这个函数功能比较多样化,是用新坐标系O'来确认点G的坐标。执行函数draw_point(0,0,511,255,8,9,0xf8,0x07)结果为,当前显示第0页,点为红色且被置到第0页。新坐标O'在原坐标O的(511,255)处,点G在坐标系O'的位置为(8,9),也就是被置到图3中的F区;如果执行函数draw_point(0,0,0,0,、520,364,0xf8,0x07),那么此点和上一个点将重合,此时坐标系O’和原坐标O重合。

    函数display_word功能:把字体写入到控制器缓冲区指定位置中,并控制字体是否显示。函数参数意义:

    word:显示字体字库的首地址;
    word_line,word_row:字库行数和列数(列数等于字模的列数/8);
    word1,word2:字体显示的颜色的16进制表示;
    backdrop1,backdrop2:字体和背景的颜色其他参数含义同clear_region。函数原型和参数如下:

2.3 其他主要函数编写说明

    清屏程序:可以通过draw_point函数编写得到,建议清屏函数具有清理任何缓存页中的数据并控制数据显示的功能。如函数及参数列表如下:

void clear_region(char word_which_display,char
    word_which_write,int word_x,int word_y,
    unsigned int word_row,unsigned int
    word_line,unsigned char with_color)

    在这个函数中,参数word_row:清理的矩形区域距离word_x的长度;参数word_line:清理的矩形区域距离word_y的长度;参数with color:清理区域的颜色。此函数所清理的是矩形区域。函数改写可以采用连续置点的方法,通过draw_piont函数连续的向清屏区域内置入一定颜色的点。由于篇幅所限,本文不给出程序清单。

    画线程序:把LCD上任意两点连接成直线。设LCD上两点坐标M(x1,y1)和N(x2,y2),得斜率由于x方向地增量△x=1,则△y=k。通过循环置点就可以得到直线。

    本文所用的函数如下:

void draw_line(char word_which_display,char word_which_write,unsigned int x1,unsigned int y1,int x2,int y2,char colour)
参数功能:x1,y1:LCD上任意一点M的坐标
    x2,y2:LCD上任意一点N的坐标
    colour:连线的颜色

    同种LCD驱动器可应用在不同的MCU上,如果采用I/O模拟时序的方法,需改动管脚设置并注意读写的时间要求。如本文的程序在8051单片机上运行时候基本程序中的不需要加延时,在C8051F单片机(晶振48MHz)上需要加延时。另外MCU和LCD驱动器必须共地处理,否则可能会产生不必要的干扰。

    对驱动器的控制还可以采用直接访问外部存储器的方法,这个时候相当于向固定的寄存器写数据和控制字,接口程序如下:

   

    如果向外部存储器写数据,采用dlcd=0x04的形式,它的含义是把数0x04存储到外部地址为0x0000中。使用此方法要注意MCU的EMIF的接口读写时序。有一些控制器的功能更丰富一些,如clcd1=0x81,驱动器会执行0x81所代表的功能。本文使用的是C8051F340单片机,这款单片机有自带的EMIF接口,在使用之前需要对其进行配置:

    P1SKIP=0x80;//跳过WR和RD引脚
    XBR1=0x41;//Enable crossbar and enable
//EMIF工作在地址/数据复用方式
//只用外部存储器
//ALE高和ALE低脉冲宽度=4个SYSCLK周期EMI0CF=0x0c;
//地址建立时间=0个SYSCLK周期。
///WR和/RD脉冲宽度=2个SYSCLK周期。
//地址保持时间=1个SYSCLK周期
    EMI0TC=0X05;

3 使用举例及显示效果

    如图4是使用本文程序设计的飞机操纵性能检测评估仪操作使用界面,界面中左边的箭头可以通过按键控制下上下移动,并进入到相应的操作界面。

    首先要了解,LCD显示图像的实质是在屏幕上置入一定颜色的点,曲线y=f(x)也基于这个原理产生,当x轴连续时且函数值y幅度很小的时候在LCD上显示的图形是连续的,当幅度很大时会产生幅度离散的图形,如果可以把两个离散的点用一条线连上,那么离散图形可以变得连续,图4中有正弦函数显示的事例。程序实例如下:

for(i=0;i<640;i++)
    {y1=200*sin(0.05*i);y2=200*sin(0.05*(i+1));
    draw_line(0,0,0,240,y1,y1-y2,i,’g’);}

4 结束语

    上述控制程序是当今通用的使用方法。控制驱动器的函数如显示字体、清屏幕和置点等都要人为编写,但这更有助于对LCD显示的过程的理解。现如今市场上LCD驱动器的品种多,且有很大一部分控制起来要优于本文所使用的驱动器,本文的目的旨在给予大家一种通用有效的方法,希望在以后遇到LCD驱动器的时候能快速入门,缩短开发周期,节约成本。本文中所有列举出来的函数都经过C8051F340单片机的测试和伟福的硬件仿真。

关键字:LCD显示模块  并行接口  驱动 引用地址:LCD显示模块并行接口驱动程序设计

上一篇:利用51单片机来控制LED点阵的设计方案
下一篇:基于TUSB3410的MSP430 USB接口方案

推荐阅读最新更新时间:2024-03-16 12:27

51单片机驱动16X16点阵(上移左移闪烁显示)
仿真文件里面有 电路图 下载地址: http://www.51hei.com/bbs/dpj-20402-1.html ,大家可以用protues直接看到效果 下面是源代码: /*本次16X16点阵显示各种方式的显示程序全部由本人编写,由于本人学习C语言并不是太深,正好借此机会让各位老师学习学习。*/ /*本次显示程序的设计分三个阶断 第一阶段:左移显示方式的设计 第二阶段:上移显示方式的设计 第三阶段:闪烁显示方式的设计 */ #include reg52.h #define uchar unsigned char #define uint unsigned int uchar table1 ={ 0xE0,0x
[单片机]
51单片机<font color='red'>驱动</font>16X16点阵(上移左移闪烁显示)
基于1602液晶电压驱动器应用于proteus仿真
本例使用1602为5V电压驱动,带背光,可显示两行,每行16 个字符,不能显示汉字,内置含128 个字符的ASCII 字符集字库,只 有并行接口,无串行接口。 分析时序图可知操作1602 液晶的流程如下: (1),通过RS 确定是写数据还是写命令。写命令包括使 液晶 的光标显示/不显示,光标闪烁/不闪烁,需/不需要移屏,在 液晶 什么位置显示,等等。写数据是指要显示什么内容。 (2)读/写控制端设置为写模式。即低电平。 (3)将数据或命令送达数据线上。 (4)给E一个高脉冲将数据送入 液晶 控制器,完成写操作。 关于时序图中的各个延时,大多数液晶基本都为纳秒级,单片机操作 最小单位为微妙级,因此在写程序时可不做延时,为了液晶运
[电源管理]
基于1602液晶电压<font color='red'>驱动</font>器应用于proteus仿真
Diodes Incorporated推出汽车线性LED驱动控制器
(图源:Diodes官网) 据外媒报道,Diodes Incorporated公司推出汽车线性LED驱动控制器AL5814Q,具有低压差和LED开路检测,适用于汽车线性驱动LED灯。 AL5814Q适用于需要特定变更控制的汽车应用,符合AEC-Q100标准,具有一级温度等级,能够满足生产零件审批控制程序(PPAP),经由IATF16949:2016认证设施制造。该器件的工作电压为4.5—60V,能够产生高达15mA的电流,并采用外部驱动晶体管,如MOSFET或BJT,以最大限度降低功耗。因为能驱动更高电流的LED或多个LED串,所以适合于高亮度应用程序,包括车牌照明、尾灯、内部灯具和仪表板。 AL5814Q的VS
[汽车电子]
Diodes Incorporated推出汽车线性LED<font color='red'>驱动</font>控制器
51 软件模拟SPI驱动OLED
1.OLED简介 OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。 OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能。 2.OLED模块简介 本文采用中景园的 0.96 寸的OLED显示
[单片机]
51 软件模拟SPI<font color='red'>驱动</font>OLED
基于32位DSP及电机驱动芯片的悬挂运动控制系统设计
  随着32位DSP的普及,32位处理器已经成为控制领域的主流产品,与传统的微处理器相比速度更快、性能更强、资源丰富,更符合发展的脚步。TMS320F28027是一款32位的DSP,具有运算速度快、稳定性高的优点。本文利用TMS320F28027控制两个步进电机,从而使物体在平面内运动,实现物体在平面内可以任意地画指定的曲线和圆等。   1 系统总体方案的设计   图2为悬挂系统控制框图,以TMS320F28027为控制芯片,利用L298N 驱动两个步进电机。步进电机采用42HS4813A4,其额定电流为1.3A,步距角为1.8°,利用LCD-12864液晶显示被控制物的实时坐标。控制2个步进电机正向、反向转动来达到物体在平面内任
[嵌入式]
基于32位DSP及电机<font color='red'>驱动</font>芯片的悬挂运动控制系统设计
STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)
单片机型号:STM32L053R8T6 本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍芯片唤醒驱动程序。 一、RxDutyCycle模式 在讲述本篇内容之前,我们先来看一下SX1268的一种模式RxDutyCycle,译为中文为接收占空比模式。其可使用SetRxDutyCycle命令进入RxDutyCycle模式,我们来看一下该命令的详细解释。 该命令具有2个参数,从字面的意思可以看出,1个是指接收周期时间,另1个是指睡眠周期时间。我们可分析出,该命令是在RX模式和SLEEP模式之间自动转换的一种模式,其目的是为了节省芯片功耗。如果在使能外部中断后,则单片机可以进入睡眠态,SX1268大部分时间也是
[单片机]
STM32开发笔记85: SX1268<font color='red'>驱动</font>程序设计(芯片唤醒)
手机将启拉货潮:刘海屏玻璃、被动器件、驱动IC最短缺
中国五大手机品牌将结束长达3个季度的库存调整黑暗期,年后零组件厂传出新机种即将启动拉货潮,预计3月将涌现第一波零件拉货高峰。业界点名,被动组件、驱动IC以及Notch(雷射弧形槽)异形切割玻璃,为3大供需吃紧的零组件,被动组件甚至缺到年底。 大陆手机去年销售疲弱,自去年第3季启动库存调整,至今已连续调整3个季度;然而在五大品牌即将推出新机型下,业界传出,从1月开始上游零组件已经涌现拉货潮。 由于中国农历新年假期至21日截止,业界估计,3月将涌现第一波零件拉货潮。 手机零件厂表示,从目前拉货状况来看,以驱动IC、被动组件、Notch玻璃(就是被市场戏称的苹果浏海屏)为三大最缺的零组件,其中驱动IC因后段测试时间拉长,加上苹果吃掉不少
[手机便携]
Diodes 公司推出符合汽车规格、可提供亮度和色彩独立控制的三通道线性 LED 驱动
【2024 年 03 月 11 日美国德州普拉诺讯】 Diodes 公司 (Diodes) (Nasdaq:DIOD)推出一款符合汽车规格* 的新型线性 LED 驱动器,让用户能独立控制三个通道的亮度和色彩。 以人为本的汽车设计加大多通道 LED 驱动器的需求,这些驱动器能使车内乘客轻松改变车内照明色彩来适应不同的心情。 这些驱动器能针对不同路况,同时启用动态转向灯和车头格栅灯,能有效提高安全等级。AL1783Q 驱动器可通过外部 REF 引脚进行 LED 电流设定,每个通道可独立调光控制,以及具备可执行 LED 调光的脉宽调制 (PWM)。本产品是电动汽车 (EV) 和内燃机 (ICE) 汽车的多种内外部照明应用的理
[汽车电子]
Diodes 公司推出符合汽车规格、可提供亮度和色彩独立控制的三通道线性 LED <font color='red'>驱动</font>器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved