贵州大学实验报告纸
系别电科班级09 姓名郭举龙学号0907010078 课程名称单片机应用实验成绩
评定教师签名:
实验时间
2012年 5月 14 日
实验十五 LCD显示实验
一、实验目的
掌握点阵式(128×64点)带汉字字库液晶显示屏的程序设计方法。
二、实验内容
根据系统提供的电路,掌握128×64点阵LCD的工作原理,编程实现显示字符、汉字和图片。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图
系统使用OCMJ4X8C_3型液晶显示屏(奥可拉中文集成模块)。
此模块可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。提供三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口(OCMJ4X16A/B 无串行接口)。所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里面,只要一个最小的微处理系统,就可以方便操作模块。内置2M-位中文字型ROM (CGROM) 总共提供8192个中文字型(16x16点阵),16K位半宽字型ROM(HCGROM) 总共提供126 个符号字型(16x8点阵),64x16位字型产生RAM(CGRAM),另外绘图显示画面提供一个64x256点的绘图区域(GDRAM),可以和文字画面混和显示。提供多功能指令:画面清除(Display clear)、光标归位(Return home)、显示打开/关闭(Display on/off)、光标显示/隐藏(Cursor on/off)、显示字符闪烁(Display character blink)、光标移位(Cursor shift)、显示移位(Displayshift)、垂直画面卷动(Vertical line scroll)、反白显示(By_line reverse display)、待命模式(Standbymode)。
OCMJ4X8C_3的引脚说明如表15-1:
表15-1:
引脚名称方向说明
1 VSS - GND(0V)
2 VDD - Supply Voltage For Logic (+5V)
3 NC - Supply Voltage For LCD (悬空)
4 RS(CS) I H: Data L: Instruction Code
5 R/W(STD) I H: Read L: Write
6 E(SCLK) I Enable Signal,高电平有效
7 DB0 I/O 数据0
8 DB1 I/O 数据1
9 DB2 I/O 数据2
10 DB3 I/O 数据3
11 DB4 I/O 数据4
12 DB5 I/O 数据5
13 DB6 I/O 数据6
14 DB7 I/O 数据7
15 PSB I H: Parallel Mode L: Serial Mode
16 NC - 空脚
17 /RST I Reset Signal,低电平有效
18 NC - 空脚
19 LEDA - 背光源正极(+5V)
20 LEDK - 背光源负极(OV)
本实验需要用到CPU模块(F3区)、LCD液晶显示模块(B3区)。液晶显示电路原理图参见图15-1。
图15-1 液晶显示电路
18 NC - 空脚
19 LEDA - 背光源正极(+5V)
20 LEDK - 背光源负极(OV)
五、实验步骤
1)系统各跳线器处在初始设置状态,JT2B跳线器的两只短路帽置位上端。
用导线对应连接液晶显示模块的RS、R/W、E、PSB、RST到CPU模块的P10~P14。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。
3)LCD将显示字符和汉字及图形。
六、实验程序
;//******************************************************************
;文件名: LCD_S for MCU51 (LCD12864串行接口程序)
;功能: LCD显示实验
;接线: JT2B跳线器的两只短路帽置位上端。
; 对应连接液晶显示模块的RS、R/W、E、PSB、RST到CPU模块的P10~P14。;//******************************************************************
;RS=CS=D/I
;R/W=STD=STD
;E=SCLK=SCLK
CS BIT P1.0 ;D/I
STD BIT P1.1 ;串行数据线W/R
SCLK BIT P1.2 ;串行时钟线E
PSB BIT P1.3 ;CS1
RES BIT P1.4 ;RES
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 ; 可以直接接电源VDD
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 COM,#1EH ;显示字符
CALL LCDWRITE
MOV COM,#1FH ;显示字符
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
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,W A_PB
DJNZ R2,W A_PA
POP 02H
POP 01H
POP 00H
RET
NOP
RET
DL40MS: ;延时子程序40MS
SETB PSW.3
MOV R2,#03H
DL_PA: MOV R0,#0FFH
DL_PB: MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,DL_PB
DJNZ R2,DL_PA
CLR PSW.3
RET
TAB:
DB '学校:贵州大学'
DB '电子信息科学技术'
DB '姓名:郭举龙'
DB '电话:152********'
DB 00H
END
七、实验总结
经过本次实验,对液晶LCD的显示有了一定的了解,下面做以下几点总结:
点阵字符型液晶显示器LCD是指显示单元是由一定数量的的点阵组成,专用于显示数字字母、常用图形符号、少量自定义符号或汉字。这类显示器把LCD控制器、点阵驱动器、字符发生器、字符存储器全集成在一块印刷版上,构成便于应用的液晶显示模LCM。显示器行数一般为1、2、4三种。每行可显示8、16、20、24、32、40个字符等。具有专门的指令,编写显示程序,开始必须进行初始化,否则模块无法正常工作,下面是两种初始化方法:(1)利用模块内部的复位电路进行初始化,包括以下几点:
①清除显示
②功能显示
③开/关显示
④进入方式设置
(2)软件复位
八、程序流程图
开始
初始化
4行显示,每行8个字符设置显示
方式,光标
显示第一
行字符
光标置第二行
显示第二行字符
依次显示3、4行
结束