液晶显示模块应用系统.docx

上传人:b****6 文档编号:4668297 上传时间:2022-12-07 格式:DOCX 页数:33 大小:112.84KB
下载 相关 举报
液晶显示模块应用系统.docx_第1页
第1页 / 共33页
液晶显示模块应用系统.docx_第2页
第2页 / 共33页
液晶显示模块应用系统.docx_第3页
第3页 / 共33页
液晶显示模块应用系统.docx_第4页
第4页 / 共33页
液晶显示模块应用系统.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

液晶显示模块应用系统.docx

《液晶显示模块应用系统.docx》由会员分享,可在线阅读,更多相关《液晶显示模块应用系统.docx(33页珍藏版)》请在冰豆网上搜索。

液晶显示模块应用系统.docx

液晶显示模块应用系统

液晶显示模块应用系统

一、设计任务:

设计完成一个液晶显示系统。

二、设计要求:

能够在液晶显示块上显示文字、图形、符号等。

完成以左移、右移、上移、下移的方式循环显示任意长度的文字。

三、仪器、仪表:

单片机、仿真机、万用表等。

四、元件清单:

液晶显示块1块按钮3个

电阻10K2个电容22uF1个

5.1K3个

五、完成时间:

一周

六、评分标准:

项目

满分

基本要求

完成汉字字模的提取

10

完成在液晶显示模块上显示相应的内容

15

完成以上、下、左、右等方式移动

25

完成循环移动

10

报告

完成原理图的设计

10

完成程序的编写

20

总结

10

七、原理:

本系统以单片机为核心,辅以12864液晶显示模块电路,构成了基于汉字库应用技术的点阵型液晶显示器。

硬件结构简单,其功能主要由单片机来完成。

并根据人眼的滞留时间不超过20ms,利用定时记数器T0定时控制。

能够循环显示要显示的内容。

GXM—12864的电路结构特点

GXM—12864是使用HD61202作为列驱动器,同时使用HD61203作为行驱动器的液晶模块。

由于HD61203不与MPU发生联系,只要提供电源就能产生行驱动信号和各种同步信号,结构比较简单。

GXM—12864共有两片HD61202和一片HD61203。

其显示区分为两部分(左区和右区)。

因此,在写入程序时要先判断在哪个区,所写的数据是否超出当前所在区的地址范围。

GXM—12864一共有64行,128列。

GXM—12864的内部结构电路如下图:

HD61202的时序

HD61202具有能与微处理器直接接口的时序。

各种信号波形对照如上图所示:

读写数据指令每执行完一次读写操作,列地址就自动加一。

必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。

八、程序原理图设计:

HD61202共有20个引脚。

/CSA,/CSB分别为芯片片选端低电平有效。

E为读写使能端其在下降沿时,数据被锁存即写入HD61202;高电平期间,数据被读出。

R/W为读写选择信号端,当R/W=1时为读选通,当R/W=0时为写选通。

D/I为数据,指令选择信号端,当D/I=1时为数据操作,D/I=0时为写指令或读状态。

RST为复位端。

DB0~DB7为数据总线。

GXM—12864液晶显示的明暗度是可调节的,主要是通过调节连接在LEDK,VEE.V0上的电位器连入电路的电阻就可以了。

另外还有电源和接地端。

其和单片机的连接如下图所示:

九、系统流程图:

本系统采用模块化设计。

GXM—12864共64行,分为8页每页又包含8行,在编程过程当中汉字采用16*16的点阵符,英文采用8*8点阵。

因此,每个汉字占2页用寄存器R0设置其值。

本程序先给程序初始化再清显示RAM区,为了使程序结构简单化,在汉字库对输入的汉字生成的点阵ASM数据前添加三个数据,其分别为显示起始页显示起始列所写入的汉字的长度。

用查表指针取得相应的数据,并把它放在寄存器中保存起来。

为了便于区别还设置了一个当前的列寄存器,以实现字符的左移,右移。

设置了一个行寄存器,通过加减其值实现上下移动。

本程序通过查表取得相应字符的点阵ASM数据,并根据这个数据确定查表指针应该指向哪个表确定表的地址。

从显示起始列寄存器取得起始列的值,由这个值判断它在哪个区,如果它小于#40H则在左区,如果它大于#40H小于80H则在右区,大于80H则转为左区。

通过定时器定时,控制字符移动的速度。

由于GXM—12864共128列,64行,所以显示区一次一行只能写8个汉字。

在给每个区写数据和指令代码时,首先要判断状态字的标志位是否“忙”。

如果不忙则继续写指令代码或显示数据,反之,则继续读状态字。

为了避免出现从复,还设置了完成标志位,通过判断标志位是否为“0”来确定其是否已经写完了。

其具体流程图如下:

主程序流程图:

清显示RAM区

设置列地址间接寄存器

COLADD#0

设置完成标志位

查表取数据

指针指向字符表并设置字高

判完成标志位是否为0

写各区的代码

进入另一页

查表取数据

判是否在左区?

判是否在右区?

(2)

 

N

Y

 

N

YN

写代码直到字符长度和页数均为0

判是否为表的最后一个数?

据?

指针指向下一个表

取数据给各区写代码把字符长度放在计数器中

指向另1字符数据表

判是否为表的最后一个数?

据?

实现左移

设置定时长度定时

26H=?

END

取字符长度值指针入堆栈

指针指向西文字符表

确定字符表地址

取字符表数据和列地址值

判是否在左区?

是否在右区?

Y

(1)

 

(1)

N

Y

(2)

 

(4)

Y

(2)

N

Y

N

(3)

字符长度是否为0

返回到“实现左移”

返回到(4)

(3)

Y

十、程序如下:

ORG0000H

COMEQU20H

COLUMNEQU21H

MODLEEQU22H

DATEQU23H

COLADDEQU24H

START_LINEEQU25H

COUNTEQUR5

CWADD2EQU0800H

CRADD2EQU0A00H

DWADD2EQU0900H

DRADD2EQU0B00H

CWADD3EQU0400H

CRADD3EQU0600H

DWADD3EQU0500H

DRADD3EQU0700H

DRADD2EQU0B00H

;/////////////////////主程序

MAIN:

MOVSP,#40H

LCALLINT;///////////调初始化子程序

LCALLCLEAR;///////////调清显示RAM区子程序

MOVCOLADD,#0

OOO0:

MOVDPTR,#CHAR

LCALLZHONGWEN

MOVDPTR,#TABLE

LCALLDISPLAY

DECCOLADD

MOV27H,#20

LCALLAAL

SJMPOOO0

;///////////////////

MOVE_R:

INCCOLADD

MOVDPTR,#CHAR

LCALLZHONGWEN

MOVDPTR,#TABLE

LCALLDISPLAY

MOV27H,#100

LCALLAAL

DJNZR1,MOVE_R

RET

MOVE_L:

DECCOLADD

MOVDPTR,#CHAR

LCALLZHONGWEN

MOVDPTR,#TABLE

LCALLDISPLAY

MOV27H,#100

LCALLAAL

DJNZR1,MOVE_L

RET

MOVE_UP:

INCSTART_LINE

MOVA,START_LINE

MOVCOM,A

LCALLLI

LCALLRIT

MOV27H,#250

LCALLAAL

MOVA,START_LINE

CJNEA,#0FFH,HH

HH:

JCMOVE_UP

RET

MOVE_DOWN:

DECSTART_LINE

MOVA,START_LINE

MOVCOM,A

LCALLLI

LCALLRIT

MOV27H,#250

LCALLAAL

MOVA,START_LINE

CJNEA,#0C0H,HHF

HHF:

JNCMOVE_DOWN

RET

;/////////////////////

MOVE_WEN:

DECCOLADD

MOV27H,#50

LCALLINT

LCALLAAL

MOVDPTR,#CHAR

LCALLZHONGWEN

DJNZR1,MOVE_WEN

RET

;/////////////////////WEST_DISPLAY

DISPLAY1:

INCDPTR

DISPLAY:

CLRA;WRITE_PAGE

MOVCA,@A+DPTR

ORLA,#0B8H

MOVCOM,A

LCALLLI

LCALLRIT

;////////////////////////////写起始页

CLRA;FIND_COLUMN&

INCDPTR

MOVCA,@A+DPTR

ADDA,COLADD

MOVCOLUMN,A

;///////////////////////////写起始列

CLRA;FIND_MODLE

INCDPTR

MOVCA,@A+DPTR

MOVMODLE,A

;//////////////////////////写字符总长

QQ:

MOVCOUNT,MODLE

CLRA

INCDPTR

MOVCA,@A+DPTR

CJNEA,#0FFH,PART1

PART1:

JNCGIVE_UP

CJNEA,#0FEH,PART2

PART2:

JNCDISPLAY1;NEXTLINE

NEXT:

MOVB,MODLE

PUSHDPL

PUSHDPH

MOVDPTR,#TAB

MULAB

ADDA,DPL;//////////字符字模块首地址

MOVDPL,A

MOVA,B

ADDCA,DPH

MOVDPH,A

UU:

CLRA

MOVCA,@A+DPTR

MOVDAT,A

MOVA,COLUMN;/////////判断列地址是否超出区域范围

CJNEA,#40H,AA

AA:

JNCBB;/////////未超出则继续

ORLA,#40H

MOVCOM,A

LCALLLI

LCALLLD

SJMPKK

BB:

MOVA,COLUMN;////////超出则判在何区域

CJNEA,#80H,CC

CC:

JNCKK

CLRC

SUBBA,#40H

ORLA,#40H

MOVCOM,A

LCALLRIT

LCALLRD

KK:

INCCOLUMN

INCDPTR

DJNZCOUNT,UU

POPDPH

POPDPL

SJMPQQ

GIVE_UPL:

POPDPH

POPDPL

GIVE_UP:

RET

;//////////////////////////////CHARACTERDISPLAY

ZHONGWEN:

MOVR0,#2;/////////字的高度

CLRPSW.5

XXL:

PUSHDPL

PUSHDPH

PUSHDPL

PUSHDPH

XX:

POPDPH

POPDPL

CLRA

MOVCA,@A+DPTR

JNBPSW.5,ZZ;/////////判完成标志位是否为“1”

DECA

ZZ:

ORLA,#0B8H

MOVCOM,A

LCALLLI

LCALLRIT

INCDPTR

CLRA

MOVCA,@A+DPTR

ADDA,COLADD

MOVCOLUMN,A

INCDPTR

CLRA

MOVCA,@A+DPTR

MOVR7,A;/////////总字符长

JBPSW.5,AGAINE

SJMPAGAIN

AGAINE:

INCDPTR

AGAIN:

CLRA

INCDPTR

MOVCA,@A+DPTR

MOVDAT,A

MOVA,COLUMN;///////判列地址是否超出区域范围

CJNEA,#40H,D1

D1:

JNCD2

ORLA,#40H;//////未超出则继续

MOVCOM,A

LCALLLI

LCALLLD

SJMPOLE

D2:

CJNEA,#80H,D3;/////超出则判在何区域

D3:

JNCOLE

CLRC

SUBBA,#40H

ORLA,#40H

MOVCOM,A

LCALLRIT

LCALLRD

OLE:

INCCOLUMN

DJNZR7,AGAINE

SETBPSW.5;/////设置完成标志位

DJNZR0,XX

INCDPTR

CLRA

MOVCA,@A+DPTR

CJNEA,#0FFH,W1

W1:

JNCWANGLE

INCDPTR

MOVR0,#2

CLRPSW.5

SJMPXXL

WANGLE:

RET

;/////////////////////////;LEFT_INSTRUTION&DATA

LI:

PUSHDPL;/////////片选左区

PUSHDPH

MOVDPTR,#CRADD3;/////////设置读状态字地址

LII:

MOVXA,@DPTR;/////////读状态字

JBACC.7,LII;//////////判“忙”标志为“0”否,否再读

MOVDPTR,#CWADD3;//////////设置写指令代码地址

MOVA,COM;//////////取指令代码

MOVX@DPTR,A;///////////写指令代码

POPDPH

POPDPL

RET

LD:

PUSHDPL;/////////片选左区

PUSHDPH

MOVDPTR,#CRADD3;/////////设置读状态字地址

LDD:

MOVXA,@DPTR;/////////读状态字

JBACC.7,LDD;//////////判“忙”标志为“0”否,否再读

MOVDPTR,#DWADD3;//////////设置写显示数据地址

MOVA,DAT;////////取数据

MOVX@DPTR,A;//////////写数据

POPDPH

POPDPL

RET

;///////////////////////RIGHT_INSTRUTION&DATA

RIT:

PUSHDPL;/////////片选右区

PUSHDPH

MOVDPTR,#CRADD2;/////////设置读状态字地址

RII:

MOVXA,@DPTR;/////////读状态字

JBACC.7,RII;//////////判“忙”标志为“0”否,否再读

MOVDPTR,#CWADD2;//////////设置写指令代码地址

MOVA,COM;//////////取指令代码

MOVX@DPTR,A;///////////写指令代码

POPDPH

POPDPL

RET

RD:

PUSHDPL;/////////片选右区

PUSHDPH

MOVDPTR,#CRADD2;/////////设置读状态字地址

RDD:

MOVXA,@DPTR;/////////读状态字

JBACC.7,RDD;//////////判“忙”标志为“0”否,否再读

MOVDPTR,#DWADD2;//////////设置写显示数据地址

MOVA,DAT;////////取数据

MOVX@DPTR,A;//////////写数据

POPDPH

POPDPL

RET

;/////////////////////////ON_TIME

AAL:

MOVTH0,#0DCH

MOVTL0,#0

SETBTR0

CLRTF0

JNBTF0,$

DJNZ27H,AAL

CLRTR0

CLRTF0

RET

;///////////////////////初始化程序

INT:

MOVCOM,#0C0H;/////////////设置显示起始行

MOVSTART_LINE,COM

LCALLLI

LCALLRIT

MOVCOM,#3FH;////////////开显示设置

LCALLLI

LCALLRIT

RET

;//////////////////////清显示RAM区程序

CLEAR:

MOVR4,#00H;/////////////////页面地址暂存器设置

CLEAR1:

MOVA,R4

ORLA,#0B8H

MOVCOM,A;////////////////页面地址设置

LCALLLI

LCALLRIT

MOVCOM,#40H;///////////////列地址设置为“0”

LCALLLI

LCALLRIT

MOVR3,#40H;///////////////一页清64各字节

;/////////////////////

CLEAR2:

MOVDAT,#00H;////////////////显示数据为“0”

LCALLLD

LCALLRD

DJNZR3,CLEAR2;///////////////页内字节清零循环

INCR4

CJNER4,#08H,CLEAR1;/////////RAM区清零循环

RET

;//////////////////////////////////

TABLE:

DB7,0,8,37H,25H,2CH,23H,2FH,2DH,25H,00H;PAGE,COLUMN_START,MODLE,DATA

DB34H,2FH,00H,2FH,35H,32H,00H,33H,23H

DB28H,2FH,2FH,2CH,01H,0FFH

;/////////////////////////////////////////////////

TAB:

DB000H,000H,000H,000H,000H,000H,000H,000H;空格=00H

DB000H,000H,000H,04FH,000H,000H,000H,000H;!

=01H

DB000H,000H,007H,000H,007H,000H,000H,000H;"=02H

DB000H,014H,07FH,014H,07FH,014H,000H,000H;#=03H

DB000H,024H,02AH,07FH,02AH,012H,000H,000H;$=04H

DB000H,023H,013H,008H,064H,062H,000H,000H;%=05H

DB000H,036H,049H,055H,022H,050H,000H,000H;&=06H

DB000H,000H,005H,003H,000H,000H,000H,000H;'=07J

DB000H,000H,01CH,022H,041H,000H,000H,000H;(=08H

DB000H,000H,041H,022H,01CH,000H,000H,000H;)=09H

DB000H,014H,008H,03EH,008H,014H,000H,000H;*=0AH

DB000H,008H,008H,03EH,008H,008H,000H,000H;+=0BH

DB000H,000H,050H,030H,000H,000H,000H,000H;;=0CH

DB000H,008H,008H,008H,008H,008H,000H,000H;-=0DH

DB000H,000H,060H,060H,000H,000H,000H,000H;.=0EH

DB000H,020H,010H,008H,004H,002H,000H,000H;/=0FH

DB000H,03EH,051H,049H,045H,03EH,000H,000H;0=10H

DB000H,000H,042H,07FH,040H,000H,000H,000H;1=11H

DB000H,042H,061H,051H,049H,046H,000H,000H;2=12H

DB000H,021H,041H,045H,04BH,031H,000H,000H;3=13H

DB000H,018H,014H,012H,07FH,010H,000H,000H;4=14H

DB000H,027H,045H,045H,045H,039H,000H,000H;5=15H

DB000H,03CH,04AH,049H,049H,030H,000H,000H;6=16H

DB000H,001H,001H,079H,005H,003H,000H,000H;7=17H

DB000H,036H,049H,049H,049H,036H,000H,000H;8=18H

DB000H,006H,049H,049H,029H,01EH,000H,000H;9=19H

DB000H,000H,036H,036H,000H,000H,000H,000H;:

=1AH

DB000H,000H,056H,036H,000H,000H,000H,000H;;=1BH

DB000H,008H,014H,022H,041H,000H,000H,000H;<=1CH

DB000H,014H,014H,014H,014H,014H,000H,000H;==1DH

DB000H,000H,041H,022H,014H,008H,000H,000H;>=1EH

DB000H,002H,001H,051H,009H,006H,000H,000H;?

=1FH

DB000H,032H,049H,079H,041H,03EH,000H,000H;@=20H

DB000H,07EH,011H,011H,011H,07EH,000H,000H;A=21H

DB000H,041H,07FH,049H,049H,036H,000H,000H;B=22H

DB000H,03EH,041H,041H,041H,022H,000H,000H;C=23H

DB000H,041H,07FH,041H,041H,03EH,000H,000H;D=24H

DB000H,07FH,049H,049H,049H,049H,000H,000H;E=25H

DB000H,07FH,009H,009H,009H,001H,000H,000H;F=26H

DB000H,03EH,041H,041H,04

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1