文章详情
所在位置: 首页> 技术文章> 其它>

带汉字库液晶显示模块在单片机系统的应用

日期:2025-05-01 03:55
浏览次数:6357
摘要:

带汉字库液晶显示模块在单片机系统的应用:
液晶显示器(LCD)作为当代高新技术的结晶产品,不但具有超薄平台、显示信息丰富的特点,而且还具有体积小、耗电省、寿命长、无辐射、抗震、防爆等其它类型显示器无可比拟的优点,因而是单片机应用系统中理想的显示器件,近年来已被广泛应用于单片机控制的工控仪表、机电设备、**仪器仪表、信息家电、工控产品、数据采集等系统中。带字库液晶显示器因它的编程快捷、方便、接口方式比较灵活等特点在单片机领域将会应用更广泛,本文将以介绍了一种内含GB2312**、二级简体汉字字库的图形点阵液晶显示模块,文中选用长沙太阳人电子有限公司的SMG16032ZK带汉字库液晶显示器(LCD),该模块具有8位并行、4位并行和2/3线串行三种硬件接口方式,利用其串行接口方式,可节省大量单片机硬件资源。本文重点介绍其在接口方式上灵活性的解析。


关键词  液晶显示器(LCD)  中文字库  串行接口  并行接口

                               

 

 

 

 

 

 

 

 

 


Abstract

The liquid crystal display (LCD ) as the crystallizationproducts of the contemporary new and high technology, not only haveultrathin platforms , show the characteristic with abundantinformation, and still have small , power consumptive provinces ,longe-lived , there are no such incomparable advantages of othertype displays as radiation , antidetonation , explosion-proof,etc., it is the ideal display device in the application system ofthe one-chip computer, widely used in worker that one-chip computercontrol accuse of instrument , electromechanical equipment ,top-grade instrument and apparatus , infromation householdappliances , worker accuse of products , data person who gathersystem already in recent years. Bring word storehouse liquidcrystal display swift programming because of it have , help ,interface way getting flexible characteristic use extensive in thefield of one-chip computer, in order to recommend one implicitGB2312 one , second simplified Chinese character figure latticeliquid crystal , word of storehouses show the module this text,select for use Changsha the sun SMG16032ZK , people of ElectronicsCo., Ltd. bring Chinese character base liquid crystal display inthe article (LCD), this module has 8 running side by side , 4running side by side and three kinds of serial hardware interfaceways of Line 2/3, utilize its serial interface way, can save alarge number of one-chip computer hardware resources . This textintroduces its analysis of the flexibility in interface wayespecially.

Keyword  Liquid-crystal display (LCD)  Chinesefonts  serial connection  parallel connection

 

 

 

 

 

 


目录

一,    引言 ………………………………………………………………………………  4

二,    带汉字库液晶显示器与不带字库液晶显示器优越性…………………  4

三,    SMG16032ZK液晶显示器(LCD)的结构与工作原理…………………… 5

四,    SMG16032ZK液晶显示器(LCD)与单片机的接口……………………  7

五,    SMG16032ZK液晶显示器(LCD)在串口方式上的应用………………  7

六,    SMG16032ZK液晶显示器(LCD)在并行接口上的应用……………… 16

七,    结束语……………………………………………………………………………  24

参考文献

 

 

 

 

 

 

 

 

一、引言

液晶显示器(LCD)作为当代高新技术的结晶产品,不但具有超薄平台、显示信息丰富的特点,而且还具有体积小、耗电省、寿命长、无辐射、抗震、防爆等其它类型显示器无可比拟的优点,因而是单片机应用系统中理想的显示器件,近年来已被广泛应用于单片机控制的工控仪表、机电设备、**仪器仪表、信息家电、工控产品、数据采集等系统中。带字库液晶显示器因它的编程快捷、方便、接口方式比较灵活等特点在单片机领域将会应用更广泛,本文介绍一种新型的可与单片机串行接口也可并行接口且内部含有中文字库的中文图形点阵液晶显示模块。本文以长沙太阳人电子有限公司的SMG16032ZK带汉字库液晶显示器为例,比较带字库与不带字库点阵液晶显示器件的优越性,阐述SMG16032ZK汉字液晶显示器的结构与工作原理、SMG16032ZK汉字液晶显示器与单片机的接口技术,阐述、分析串行接口和并行接口两种接口方式在SMG16032ZK汉字液晶显示器的应用。通过阐述和分析为应用带字库液晶显示器(LCD)系统提供比较完善的参考。

二、带汉字库液晶显示器与不带字库液晶显示器优越性

目前国内在单片机系统中使用的普通的液晶显示器(LCD)大多数都是不自带汉字字库,以太阳人电子公司的SMG12864及其兼容产品使用比较多。此类普通的液晶显示器(LCD)占有ROM的容量大,因以图形方式显示汉字,每个汉字将占用32个字节的ROM,每个西文字符记录占用32字节,其中前16个字节为点阵数据,后16个字节无效,这对内部的FLASH闪存数量不是很大的单片机来说,使用起来就很受限制,而且在实际的应用过程中,如果要调用大量的显示内容,这时还要根据显示内容,运用汉字库生成程序生成字库文件,在应用时再加以调用,所以在实际应用当中编程比较烦琐。再加上这样所生成字库文件占用的内存空间比较大,对于内部的FLASH闪存数量较小的单片机,影响尤为重要。而带字库的液晶显示器(LCD),在实际应用当中可以直接调用它内部汉字地址即可,所以在编程时比普通的液晶显示器(LCD)更方便。此类普通的液晶显示器(LCD)与单片机的硬件接口电路复杂,而且只有一种接口方式。该类型液晶显示器(LCD)除使用8根数据线外,尚需使用片选、寄存器选择、读/写选择、使能控制等控制线来加以控制,使得对单片机的硬件资源占用较为严重,对于端口比较少的单片机,应用就非常受限制,同时该类液晶显示器(LCD)对近年来广为流行的小体积非总线型单片机硬件的不支持。软件编程繁复,通常的汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码,而在使用时刚需要先根据新的汉字编码组成语句,再由MCU根据新编码提取相应的点阵进行汉字显示。在这种显示方式中,如果使用的流字数量较大或语句较多时,利用汉字的新编码组成语句将是一件十分繁琐而枯燥的工作。从而限制了液晶显示技术在许多领域的应用。
SMG16032ZK带字库的液晶显示器(LCD)其接口方式有8位并行、4位并行和2/3线串行模式三种方式来供选择,接口选择可以由硬件直接控制也可以由程序来控制,使用非常方便。此款液晶模块因自带汉字库对单片机的内存没有太多的要求而且在软件编程时只需调用汉字地址码即可。非常适用于现在市面上应用广泛的非总线型单片机的应用。因而带字库的液晶显示器(LCD)比普通的液晶显示器(LCD)在接口和软件编程上有更大的优越性,在应用时对单片机的选择空间更大。

三、SMG16032ZK液晶显示器(LCD)的结构与工作原理

SMG16032ZK的点阵数160X32(见图1:),可以显示两行,每行显示10个汉字。该模块的内部的字形ROM内含GB2312**、二级16X16点阵简体中文字库(8129个汉字)及128个16X8点阵半宽的ASCⅡ码英文字库。另外绘图显示画面提供一个64X256点的绘图区域。可用于绘制任意复杂的图形,同时内部还含有CGRAM可提供4组软件可编程规划的16X16点阵的造字功能,用于内部字库所没有的字形自建,该模块与单片机的硬件接口具有三种模式分别是8位并行、4位并行和2/3线串行模式。同时该模块还具有电源电压范围宽(2.7V~5.5V)、低功耗的特点。低电压、低功耗特性使得该模块非常适用于便携式系统的应用。SMG16032ZK模块可实现汉字,ASCⅡ码、点阵图形、曲线的同屏显示,并具有上、下、左、右移动当前显示屏幕及**屏幕的命令,具有光标显示、闪烁控制命令及液晶睡眠、唤醒、关闭显示命令。该模块内部还提供显示驱动负电压,而无须外接负电压故简化系统电源设计,同时模块内部还具有LED背光源。由上述特性可知该模块适用于各种单片机为核心构成的仪器仪表及家用电器作为器件显示。
表1 引脚说明
引脚    名称    方向   说明    引脚    名称   方向    说明
1    VSS    -   GND(0V)    11   DB4    I/O    数据4
2    VDD    -   Supply Voltage For Logic (+5v)   12    DB5    I/O   数据5
3    NCO    -   (悬空)    13    DB6   I/O    数据6
4    RS(CS)    H/L   H: Data    L: Instruction Code   14    DB7    I/O   数据7
5    R/W(STD)   H/L    H: Read    L:Write    15    PSB   H/L    H: Parallel Mode L: Serial Mode
6    E(SCLK)   H,H/L    EnableSignal               
               16    NC    -   NC
7    DB0    I/O   数据0    17    /REST   H/L    Reset Signal 低电平有效
8    DB1    I/O   数据1    18    NC   -    NC
9    DB2    I/O   数据2    19    A   -    LED+
10    DB3    I/O   数据3    20    K   -    LED-

图1  模块外型图
SMG16032ZK液晶显示器(LCD)的工作原理:
 此款带字库的液晶显示器(LCD)采用台湾矽创电子的一款ST7920为主控芯片。此芯片为点阵LCD控制/驱动IC,可以显示字母、数字字符、中文字型及自定图象显示,它可以提供三种控制界面,分别是8位元微处理器界面,4位元微处理器界面及串行界面,所以的功能包含显示RAM,字型产生器,以及液晶驱动电路和控制器,都包含在一个单晶片里面,只要一个*小的微处理系统,就可以操作本LCD控制/驱动IC。ST7920的字型ROM包括8129个16X16点的中文字形以及126个16X8点半宽的字符字型,另外绘图显示画面提供一个64X256点的绘图区域(GDRAM)。可以和文字画面混合显示,而且ST7920内含CGRAM提供四组软体可程式规划的16X16造字功能。ST7920LCD驱动器由32个Common及64个Segment所组成,Segment驱动器的扩充可以视需要有ST7921Segment驱动器来提供扩充显示范围的任务。SMG16032ZK液晶显示器(LCD)由一颗ST7920和一颗ST7921两颗芯片来控制,其控制见原理图(图2)。

 

 

 

 

 


                       图2  控制原理图
四、SMG16032ZK液晶显示器(LCD)与单片机的接口

SMG16032ZK液晶显示器(LCD)有三种接口方式,分别为8位元微处理器界面,4位元微处理器界面(8/4并行接口)及串行界面
8/4并行接口,可以按照以下方式设定。

 

 

当  DL=“1”时,为8BIT MPU控制界面即8BIT并行接口
当  DL=“0”时,为4BIT MPU控制界面即4BIT并行接口
当  RE=“1”为扩充指令集(有特殊用途时需要设定)
当  RE=“0”为基本指令集
注意:同一指令之动作,不可同时改变DL及RE,要改变时需先改变DL以后再改变RE,这样才能确保标识正确设定。
串行接口与并行接口有PSB的高低电平来控制,既可以由硬件来控制也可以通过软件来控制。当PSB为高电平时,系统接收为并行接口方式;当PSB为低电平时,系统接收为串行接口方式。

五、SMG16032ZK液晶显示器(LCD)在串口方式上的应用

SMG16032ZK的2/3线串行接口方式非常适合于与硬件资源紧张的非总线型单片机接口,下面以AT89C2051单片机为例给出该模块与单片机的2/3线串行接口方式及时序。AT89C2051单片机与SMG16032ZK的硬件接口电路如(图3:)所示,可知SMG16032ZK与AT89C2051单片机接口时仅需占用任意两根I/O口线,除此之外还需要将模块的PSB端接低电平或由软件控制置低,模块即进入到串行接口方式。在串行模式下模块的SID引脚做数据线。SLCK引脚做时钟线,单片机通过SID数据并配合同步时钟线SCLK达到数据传输的目的。模块的RS(CS)引脚在这里接固定的高电平即片选始终有效状态,当系统中连接多个显示模块时,可以通过RS端选择不同的显示模块,构成3线串行接口方式。单片机与液晶显示模块的串行接口时序(如图4)。

 

图3  串行硬件接口

 

 

 

 

 

 

图4  串行接口时序

由图4可以看到单片机与液晶模块之间传送一个字节的数据共需24个时钟脉冲。首先单片机要给出数据传输起始位,这里以5个连续的“1”则内部传输被重置并且串行传输将被同步,紧接RW位用于选择数据的传输方向(读或写),RS位用于选择内部数据寄存器或指令寄存器,*后第8位固定为“0”,在接收到起始位及RW/RS的第1个字节后,一个字节的数据或指令将被分为两个字节来串行传送或接收,数据或指令的高4位,被放在第2个字节串行数据的高4位,其低4位则为“0”,数据或指令的低4位被放在第3个字节的高4位,其低4位也为0,如此完成一个字节指令或数据的传送。需要注意的是当有多个数据或指令要传送时,必须要等到一个指令完全执行完毕或数据的丢失,这是因为液晶模块内部没有发送/接收缓冲区。
具体参考程序如下:
;*cs----P3.1* *std---P3.3* *sclk-----------P3.0*
;*PSB----------P3.4 *(可由硬件直接控制)
;*RESET----------P3.5  (可由硬件直接控制)
;注:AT89C2051的晶振频率为12MHz
PSB    BIT  P3.4
RES    BIT  P3.5
CS      BIT  P3.1
STD    BIT  P3.3     ;串行数据线
SCLK    BIT  P3.0     ;串行时钟线
START  EQU  30H      ;起始字节
COM    EQU  31H     ;命令/数据
HDATA  EQU  32H     ;命令/数据字节高位
LDATA  EQU  33H     ;命令/数据字节低位
ASC    EQU  34H     ;ASCII数据单元
XPOS    EQU  35H
YPOS    EQU  36H
        ORG   0000H
MAIN:
        MOV   SP,#60H
        CLR   RES
        SETB  RES
        SETB CS             ;  可以直接接电源VDD
        CLR   PSB           ;  可以直接接地VSS
        CALL LCDRESET        ; 模块系统初始化
        CALL  HZKDIS
        MOV   START,#0F8H    ; 写入命令(11111000)
        MOV   COM,#80H        ;设定显示位置
        CALL  LCDWRITE
        MOV   START,#0FAH    ;写数据    (11111010)
        MOV   COM,#10H        ;显示字符
        CALL  LCDWRITE
        MOV   COM,#11H        ;显示字符
        CALL  LCDWRITE
        MOV   START,#0F8H    ; 写入命令(11111000)
        MOV   COM,#34H        ;扩充功能设定
        CALL  LCDWRITE
        MOV   COM,#05H        ;反白选择
        CALL  LCDWRITE
        CALL DL40MS         ;延时
        CALL  DL40MS
        CALL  DL40MS
        MOV   A,#055H        ;绘图方式下写55数据
        CALL  LCDFILL
        CALL CLEAR          ;清屏
        JMP   MAIN
CLEAR:                       ;清屏子程序
        MOV   A,#00H
        CALL   LCDFILL
       RET       
LCDRESET:
        LCALL DL1MS         ;延时等待内部复位
        MOV   START,#0F8H    ; 写入命令(11111000)
    MOV   COM,#30H        ;使用基本指令集
    LCALL  LCDWRITE
    MOV    COM,#0CH
    LCALL LCDWRITE        ;整体显示ON
    MOV   COM,#01H        ;清屏
    LCALL  LCDWRITE
    LCALL  DL1MS
    MOV   COM,#06H        ;显示右移
    LCALL  LCDWRITE
    LCALL  DL1MS
    RET
LCDWRITE:                     ;模块写入子程序
        MOV   A,COM         ;送待发数据命令A
        ANL   A,#0F0H        ;屏蔽低4位
        MOV   HDATA,A        ;将高4位送HDATA单元
        MOV   A,COM         ;取低4位
        SWAP A             ;高低4位互换
        ANL   A,#0F0H
        MOV   LDATA,A        ;将低4位送LDATA单元
        MOV   A,START        ;取起始字节
        LCALL SENDBIT        ;发送
        LCALL DL1MS         ;延时1ms
        MOV   A,HDATA
        LCALL  SENDBIT
        LCALL  DL1MS
        MOV   A,LDATA
        LCALL  SENDBIT
        LCALL  DL1MS
        RET
HZKDIS:                       ;显示汉字子程序
        MOV   R5,#2
        MOV   START,#0F8H    ; 写入命令(11111000)
MOV   COM,#80H        ;设定显示位置
  LCALL  LCDWRITE
        MOV   DPTR,#TAB      ;指向文字型代码表
        MOV   A,#00H         ;取汉字代码低位
DIS_1:  MOV   R6,#8         ;每行十个汉字
DIS_2:  MOV    START,#0FAH   ;写数据    (11111010)
        CLR   A
        MOVC  A,@A+DPTR
        MOV   COM,A
        CALL LCDWRITE        ;写入显示模块
        INC   DPTR           ;取汉字代码高位
        CLR   A
        MOVC  A,@A+DPTR
        MOV   COM,A
        CALL LCDWRITE        ;写入显示模块
        INC   DPTR
        CALL  DL40MS
        DJNZ R6,DIS_2        ;未显示完则继续
        MOV   START,#0F8H    ; 写入命令(11111000)
        MOV   COM,#90H        ;**行地址
        CALL  LCDWRITE
        DJNZ  R5,DIS_1
        MOV   R5,#2
        MOV   START,#0F8H    ; 写入命令(11111000)
        MOV   COM,#88H        ;第三地址
        CALL  LCDWRITE
DIS_4:  MOV    R6,#08H   
DIS_3: 
        MOV   START,#0FAH    ;写数据    (11111010)
        CLR   A
        MOVC  A,@A+DPTR
        MOV   COM,A
        CALL LCDWRITE        ;写入显示模块
        INC   DPTR           ;取汉字代码高位
        CLR   A
        MOVC  A,@A+DPTR
        MOV   COM,A
        CALL LCDWRITE        ;写入显示模块
        INC   DPTR
        CALL  DL40MS
        DJNZ R6,DIS_3        ;未显示完则继续
        MOV   START,#0F8H    ; 写入命令(11111000)
        MOV   COM,#98H        ;第四行地址
        CALL  LCDWRITE
        DJNZ R5,DIS_4        ;遇“0”结束显示
       RET                   ;写完两行则结束
LCDFILL:                     ;绘图
      MOV    R4,A
      MOV    XPOS,#0
      MOV    YPOS,#0
      MOV   START,#0F8H
      MOV   COM,#30H        ;重新选择基本指令
      CALL  LCDWRITE
      MOV   COM,#01H        ;清屏
      CALL  LCDWRITE
      MOV   COM,#36H        ;扩充功能设定
      CALL  LCDWRITE
LCD_A1:
      MOV    YPOS,#0
LCD_A2:
      MOV   START,#0F8H
      MOV   A,XPOS         ;设定绘图首地址
      ADD   A,#80H          ;X坐标
      MOV    COM,A
      CALL  LCDWRITE
      MOV   A,YPOS         ;Y坐标
      ADD    A,#80H
      MOV    B,A
      MOV    COM,A
      CALL  LCDWRITE
      MOV   START,#0FAH
      MOV    COM,R4
      CALL  LCDWRITE
      CALL  LCDWRITE
      LCALL  DL1MS
      INC    YPOS
      MOV    A,B
      CJNE A,#87H,LCD_A2    ;*后一列地址为87H
      INC    XPOS
      MOV    A,XPOS
      CJNE A,#20H,LCD_A1    ;*后行地址为80H+20H=0A0H
      MOV    XPOS,#0
LCD_A3:MOV    YPOS,#0
LCD_A4:
      MOV   START,#0F8H
      MOV   A,XPOS         ;设定绘图首地址
      ADD   A,#80H          ;X坐标
      MOV    COM,A
      CALL  LCDWRITE
      MOV   A,YPOS         ;Y坐标
      ADD    A,#80H
      MOV    B,A
      MOV    COM,A
      CALL  LCDWRITE
      MOV   START,#0FAH
      MOV    COM,R4
      CALL  LCDWRITE
      CALL LCDWRITE     
      INC    YPOS
      MOV    A,B
      CJNE A,#8FH,LCD_A4    ;*后一列地址为8FH
      INC    XPOS
      MOV    A,XPOS
      CJNE A,#20H,LCD_A3    ;*后行地址为80H+20H=0A0H
      RET
SENDBIT:                     ;串行字节数据发送子程序
MOV   R7,#08H        ;发送8位
SEND_1: RLC    A
        MOV   STD,C         ;数据送数据线
CLR   SCLK         ;产生同步时钟
SETB    SCLK
DJNZ    R7,SEND_1     ;未发送完8位继续
RET
DL1MS:               ;延时子程序
        PUSH   00H           ;0.1MS
        PUSH   01H
        PUSH   02H
        MOV   R2,#01H
WA_PA:  MOV    R0,#0FH
WA_PB:  MOV    R1,#0FH
        DJNZ   R1,$
        DJNZ   R0,WA_PB
        DJNZ   R2,WA_PA
        POP   02H
        POP   01H
        POP   00H
        RET
        NOP
        RET
DL40MS:                       ;延时子程序
        PUSH   00H           ;40MS
        PUSH   01H
        PUSH   02H
        MOV   R2,#01H
DL_PA:  MOV    R0,#0FFH
DL_PB:  MOV    R1,#0FFH
        DJNZ   R1,$
        DJNZ   R0,DL_PB
        DJNZ   R2,DL_PA
        POP   02H
        POP   01H
        POP   00H
        RET
        NOP
        NOP
        NOP
     
RET
TAB:
        DB   "  中南大学欢迎您  "
        DB   "为需要学习为未来学习"
    DB    00H
END

六、SMG16032ZK液晶显示器(LCD)在并行接口上的应用

 SMG16032ZK液晶显示器(LCD)在并行接口方式上有两种方式,8位元微处理器界面,4位元微处理器界面(8/4并行接口),当PSB脚接高电平时(也可有程序控制),模块进入并行模式,在并行模式下可有指令DLFAAG来选择8-位或是4-位接口,主控系统将配合(RS,RW,E,DB0……DB7)来达成传输动作,从一个完整的流程来看,当设定地址指令后(CGRAM,DDRAM)若要读取数据时需要先DUMMYREAD一次,才会读取到正确数据**次读取时则不需DUMMY READ 除非又下设定地址指令才需要再次DUMMYREAD.在4-位传输模式中,没有一个八位的指令或数据将被分为两个字节来操作:较高4位(DB7-DB4)的资料将会被放在**个字节的(DB7-DB4)部分,而较低4位(DB3-DB0)的资料则会被放在**个字节(DB7-DB4)部分,至于相关的另4-位传输模式中的DB3-DB0接口未使用,相关时序具体见下图(如图:5)。

 

 

 

 

 

图5(a) 8-bit并行时序


图5(b) 4-bit并行时序

 

 

 

 

 

图5(c) MPU写资料到ST7920

 

 

 

 


                     5(d)  MPU从ST7920读出资料

并行接口参考连接见(图6):

                         
  图6 并行硬件接口

具体参考程序如下:
;*RS--P3.1* *RW---P3.3* *E-----------P3.0*
;*PSB----------P3.4 *(可由硬件直接控制)
;*RESET----------P3.5  (可由硬件直接控制)
;注:AT89C2051的晶振频率为12MHz
RS    equ P3.1                     ;定义数据与指令线
RW    equ P3.3                     ;定义读写线
E      equ P3.0                     ;定义使能控制线
PSB    equ P3.4                     ;定义串并口选择线
RESET  equ P3.5                     ;定义复位线
XPOS  EQU 20H                         ;定义列地址
YPOS  EQU 21H                       ;定义行地址
FIRST_COL    EQU   30H        ;定义字符/汉字显示起始行
FIRST_ROW    EQU   31H        ;定义字符/汉字显示起始列
HZK_WID       EQU    32H       ;定义字符/汉字显示长度
HZK_LIN       EQU    33H       ;定义字符/汉字显示行数
FIRST_ADD    EQU   34H        ;定义字符/汉字显示起始位置
START_ADD    EQU   35H         ;起始位置缓存单元
FIRST_LIN    EQU   36H        ;起始行位置缓存单元
G_COLUMN    EQU   37H        ;定义图形显示起始行
G_ROW       EQU    38H       ;定义图形显示起始列
G_WID       EQU    39H       ;定义图形显示宽度
        ORG   0000H
LJMP  START
ORG  0100H
START:  MOV  SP,#60H
MOV  G_WID,#00H
MOV  G_ROW,#00H
SERB  RESET
SETB  PSB
CLR  RW
QIU1:LCALL INITIL           ;调用系统初始化程序
        MOV A,#0CH           ;开显示,关游标
        LCALL INPUT
        LCALL DELAY01
        MOV A,#01H           ;DDRAM清零,DDRAM地址计数器到00H
        LCALL INPUT
        LCALL DELAY01
      MOVFIRST_ADD,#00H         ;设定字符/汉字显示起始位置为**个显示单元
        MOVFIRST_LIN,#01H       ;设定字符/汉字显示起始位置为**行
        MOV DPTR,#TAB             ;需要显示汉字机内码数据表
        MOVword_WID,#08H       ;每行显示汉字个数
        MOVword_LIN,#03H        ;显示行数
MOV START_ADD,#00H       ;清头个显示地址缓存单元
LCALL   WORD_DISP        ;调用汉字显示子程序
LCALL DELAY
        LCALL DELAY
        LCALL DELAY
;-----------------
;汉字显示子程序
;---------------
WORD_DISP:
MOV R1,WORD_WID
WORD10: LCALL   DEADD               ;调用调整地址单元子程序
MOV A,START_ADD           ;设定DDRAM地址,显示位置地址
          LCALLINPUT
WORD11:CLRA               ;因为要连续输入机内码高位(区码)、低位(位码)
        MOVC A,@A+DPTR           ;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书
        LCALLDISPL           ;DATA    INPUT
        INCDPTR           ;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替
        CLR A
        MOVC A, @A+DPTR
        LCALLDISPL           ;DATA    INPUT
        LCALL DELAY01
        INC DPTR
        DJNZ   R1,WORD11
        MOV   R1,WORD_WID        ;调整显示长度
        INC   FIRST_LIN        ;跳到下一行
        DJNZ   WORD_LIN,WORD10
        RET
INITIL: LCALLDELAY           ;延时
;首先选择基本指令集
        MOV A,#30H           ;30---基本指令操作
        LCALL  INPUT
        LCALL  DELAY01
        MOV A,#01H       ;指令#01H为:**屏幕文字,把地址指针指向00H单元
        LCALL INPUT           ;
        LCALL  DELAY01
        MOV A,#06H           ;指定在资料写入或读取时,设定游标的移动方向及指定显示的移位
        LCALL  INPUT
        LCALL  DELAY01
        MOV  A,#0EH
        LCALL  INPUT
        LCALL  DELAY01
          RET
;-----------------
;SEARCH ADDRESS
;目的是为了转换地址单元为DDRAM地址单元,以方便
;定义显示位置
;汉字显示DDRAM位置为:**行:80H----87H
;           **行:90H----97H
;-----------------
DEADD:  PUSH   DPH           ;地址转换子程序
PUSH    DPL
PUSH    A
MOV   DPTR,#LINE_ADD       ;LINE-ADD为地址表指针
MOV    A,FIRST_LIN
MOVC    A,@A+DPTR
ADD    A,FIRST_ADD
MOV    START_ADD,A
POP    A
POP    DPL
POP    DPH
RET
LINE_ADD:
DB      00H,80H,90H,88H,98H.00H
READ:                 ;读数据子程序
MOV P3,#0FBH               ;P3--CONTRAL    I/O
       NOP               ;P3=11111011B  RS=1    R/W=1  READDATA
        SETBE               ;E=E(I/O)
        LCALL  DELAY01
        MOV A,P1           ;P1=DATA(I/O)
        NOP
        CLR E
        RET
;--------------------------------------
CHK_BUSY:  CLR   RS           ;读忙状态子程序
        SETB   RW
           SETB    E
HEHE1:  JB      P1.7,HEHE1
        CLR   E
        RET
;--------------------------------------
;写数据子程序
;----------------------------
DISPL:  LCALL   CHK_BUSY           ;P3--CONTRAL    I/O
       NOP               ;P3=11111001B  RS=1    WRITE DATA
        SETB   RS
        CLR   RW
        SETBE               ;E=E(I/O)
        MOV  P1,A           ;P1=DATA(I/O)
        LCALL  DELAY01
        NOP
        CLR E
        NOP
        MOV   P1,#0FFH
        RET
;--------------------------------------
;写指令子程序
;----------------------------
INPUT:  LCALL   CHK_BUSY       ;以确保上一指令/数据模块已经接收处理完
                   ;P3--CONTRAL    I/O
       NOP               ;P3=11111000B    RS=0   WRITE    INSTRUTION
        CLR   RS
        CLR   RW
        SETBE               ;E=E(I/O)
        MOV P1,A           ;P1=DATA(I/O)
        LCALL  DELAY01
        NOP
        CLR E
        NOP
        MOV   P1,#0FBH
        RET
;----------------------
;DELAY TIME
;---------------------
DELAY:  MOV  R5,#03H
C0:    MOV  R6, #0FFH
C1:    MOV  R7, #0FFH
C2:    DJNZ R7, C2
        DJNZ R6, C1
        NOP
        NOP
        DJNZ R5, C0
        RET
DELAY01: MOV  R6, #6
D5:    MOV  R7, #08h
D6:    DJNZ R7, D6
        DJNZ R6, D5
        RET
;------------------
DELAY02: MOV  R6, #6
D52:    MOV  R7, #18h
D62:    DJNZ R7, D62
        DJNZ R6, D52
        RET
TAB:
        DB   "  中南大学欢迎您  "
        DB   "为需要学习为未来学习"
    DB    00H
END

七、结束语

  
通过对SMG16032ZK带字库的液晶显示器(LCD)在串行接口和并行接口上的解析,此系列的液晶显示器(LCD)跟不带字库液晶显示器(LCD)在接口上有无法比拟的优越性。其中串行接口方式可大量节省单片机的I/O口线且由于内含中文字库使得该模块显示汉字变得非常容易。同时也使非总线型单片机可使用图形点阵液晶显示模块作显示器件,从而拓宽了液晶显示器(LCD)的应用范围。相信此系列带中文字库的液晶显示器(LCD)将会成为国内单片机系统的*佳显示方案,并将获得越来越广泛的应用。

参考文献

1,李维諟 郭强:《液晶显示应用技术》,电子工业出版社 ,2000年3月
2,陆爱明:《单片机和图形液晶显示器接口应用技术》,电子产品世界,2001年9月
3,李华  李红青:《MCS-51系列单片机实用接口》,北京航空航天大学出版社,1993年8月
4,台湾矽创电子 《ST7920C33系列的芯片资料》,2005年3月
5,《SMG16032ZK使用说明书》,长沙太阳人电子有限公司 ,2005年1月
6,作者:刘国华
 

湘公网安备 43019002000596号