一、设计目的
在 12864 液晶显示屏中央显示“★仿真实例★”字样。
二、原理介绍
12864LCD :带中文字库的 128X64 是一种具有 4 位 /8 位并行、 2 线或 3 线串行多种接
口方式, 内部含有国标一级、 二级简体中文字库的点阵图形液晶显示模块; 其显示分辨率为
128×64, 内置 8192 个 16*16 点汉字,和 128 个 16*8 点 ASCII 字符集 .利用该模块灵活的接
口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示 8×4 行 16×16
点阵的汉字 . 也可完成图形显示 .低电压低功耗是其又一显著特点。
1、引脚功能: GND 电源地 VCC 电源正 +5
V0 液晶显示驱动电源 0~5V RS H:数据输入 L :指令码输入
R/W H:数据读入 L:数据写入 E 使能信号。 由 H 到 L 完成使能。
DB0~DB7 数据线 CS1 CS1=1 芯片选择左边 64*64 点
CS2 CS2=1 芯片选择右边 64*64 点
RST 复位 -Vout LCD 驱动负电源
A 背光电源( +) K 背光电源( -)
2、取码方法:
DDRAM 是 12864 内部的存储器, 屏幕显示内容与存储单元建立一一对应关系, 模块内
部自带扫描与驱动, 用户只需要将要显示内容写入到 12864 对应的存储器中, 就能实现内容
的显示。 12864 液晶屏横向有 128 个点,纵向有 64 个点。显示屏分为左半屏和右半屏。取
码时, 按照从上到下,从左到右的原则进行取码, 每个字都有 32 个字节与之对应。 编程时,
也按照从上到下,从左到右的原则取数送到相应的 DDRAM 中。
RESPACK8 :排阻。接在 51 单片机的 P0 口,因为 P0 口内部没有上拉电阻,不能输出
高电平, 所以要接上拉电阻。 排阻就是好多电阻连载一起, 他们有一个公共端 1 端为公共端
接 VCC 或地。
三、液晶显示控制方法
1、读状态
判忙子程序
BUSY: CLR RS ; RS 清 0
SETB RW ; RW 置 1
PRR01: MOV DATAES,#0FFH ;将端口置 1,准备读数据总线
SETB E ; E 置 1,液晶模块将当前状态送到数据总线
MOV A,DATAES ;读数据总线
CLR E ;将 E 清零,为下次读做准备
JB ACC.7,PRR01 ; ACC.7 为 1,表示液晶模块处于忙状态,为 0 返回主
程序
RET
如果读到的 BUSY=1 ,表示系统忙,不能操作;只有 BUSY=1 才允许操作。
2、写指令
写指令子程序( | PRM ) | PRM: | LCALL BUSY | ;写指令之前判忙 | CLR RS | ; RS 为 0 设置写指令操作 | CLR RW | ; RW 清 0 | MOV DATAES,COM | ; COM 中存放指令, | DATAES 为某一端口 | SETB E
CLR E | ; E 下降沿液晶模块从数据总线上写入指令 | RET | 3、写数据
写数据子程序( | PRD) | PRD: | LCALL BUSY | ;写指令之前判忙 | SETB RS | ; RS 置 1 设置为写数据操作 | CLR RW | ; RW 清 0 | SETB E
MOV DATAES,DA T | ; DAT 中存放写入的数据 | CLR E | ; E 下降沿液晶模块从数据总线上读入指令 | RET
操作每完成一个列地址计数器自动加 | 1。 |
四、程序
1、程序流程图:
2、程序如下:
ORG 0000H
LJMP MAIN
CSA EQU P2.4
CSB EQU P2.3
RS EQU P2.2
RW EQU P2.1
E EQU P2.0
DATAES EQU P0
COM EQU 21H
DAT EQU 22H
YM EQU 23H
LM EQU 24H
CODES EQU 25H
ORG 0030H
MAIN: LCALL INT
LCALL LEFT
MOV YM,#3
MOV LM,#16
MOV CODES,#4
LCALL CHINE
MOV YM,#3
MOV LM,#32
MOV CODES,#0
LCALL CHINE
MOV YM,#3
MOV LM,#48
MOV CODES,#1
LCALL CHINE
LCALL RIGHT
MOV YM,#3
MOV LM,#0
MOV CODES,#2
LCALL CHINE
MOV YM,#3
MOV LM,#16
MOV CODES,#3
LCALL CHINE
MOV YM,#3
MOV LM,#32
MOV CODES,#4
LCALL CHINE
DDD: LJMP DDD
INT: LCALL LEFT
MOV COM,#3FH
LCALL PRM
LCALL RIGHT
MOV COM,#3FH
LCALL PRM
CLEARL: LCALL LEFT
MOV R4,#00H
CLEAR0: MOV COM,R4
LCALL PAGEFIRST
MOV COM,#00H
LCALL LIEFIRST
MOV R3,#64
CLEAR1: MOV DA T,#00H
LCALL PRD
DJNZ R3,CLEAR1
INC R4
CJNE R4,#08H,CLEAR0
CLEARR: LCALL RIGHT
MOV R4,#00H
CLEAR2: MOV COM,R4
LCALL PAGEFIRST
MOV COM,#00H
LCALL LIEFIRST
MOV R3,#64
CLEAR3: MOV DA T,#00H
LCALL PRD
DJNZ R3,CLEAR3
INC R4
CJNE R4,#08H,CLEAR2
RET
BUSY: CLR RS
SETB RW
PRR01: MOV DATAES,#0FFH
SETB E
MOV A,DATAES
CLR E
JB ACC.7,PRR01
RET
LEFT: CLR CSA
SETB CSB
RET
RIGHT: SETB CSA
CLR CSB
RET
PRM: LCALL BUSY
CLR RS
CLR RW
MOV DATAES,COM
SETB E
CLR E
RET
PRD: LCALL BUSY
SETB RS
CLR RW
SETB E
MOV DATAES,DA T
CLR E
RET
PAGEFIRST:MOV A,COM
ORL A,#0B8H
MOV COM,A
LCALL PRM
RET
LIEFIRST:MOV A,COM
ORL A,#40H
MOV COM,A
LCALL PRM
RET
CHINE: MOV DPTR,#TAB
MOV A,CODES
MOV B,#32
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV COM,YM
LCALL PAGEFIRST
MOV COM,LM
LCALL LIEFIRST
MOV R0,#00H
RETURN0:MOV A,R0
MOVC A,@A+DPTR
MOV DAT,A
LCALL PRD
INC R0
CJNE R0,#16,RETURN0
MOV A,YM
INC A
MOV COM,A
LCALL PAGEFIRST
MOV COM,LM
LCALL LIEFIRST
RETURN1:MOV A,R0
MOVC A,@A+DPTR
MOV DAT,A
LCALL PRD
INC R0
CJNE R0,#32,RETURN1
RET
TAB:DB 80h, 40h, 20h, 0F8h, 07h, 10h, 10h, 10h
DB 0F1h,96h, 90h, 90h, 0D0h, 98h, 10h, 00h
DB 00h, 00h, 00h, 0FFh, 00h, 80h, 40h, 30h
DB 0Fh, 40h, 80h, 40h, 3Fh, 00h, 00h, 00h; " 仿"
DB 00h, 04h, 04h, 0F4h, 54h, 54h, 54h, 5Fh
DB 54h, 54h, 54h, 0FCh, 16h, 04h, 00h, 00h
DB 10h, 10h, 90h, 5Fh, 35h, 15h, 15h, 15h
DB 15h, 15h, 35h, 5Fh, 0D0h, 18h, 10h, 00h; “真”
DB 10h, 0Ch, 04h, 44h, 8Ch, 94h, 35h, 06h
DB 0F4h,04h, 04h, 04h, 04h, 14h, 0Ch, 00h
DB 02h, 82h, 82h, 42h, 42h, 23h, 12h, 0Eh
DB 03h, 0Ah, 12h, 22h, 42h, 0C3h, 02h, 00h; " 实 "
DB 40h, 20h,0F8h, 07h, 84h, 64h, 3Ch, 24h
DB 24h,0E6h, 04h,0F0h, 00h, 0FFh, 00h, 00h
DB 00h, 00h,0FFh, 01h, 20h, 11h, 0Ah, 04h
DB 03h, 00h, 00h, 47h, 80h, 7Fh, 00h, 00h; " 例"
DB 00h, 20h, 60h,0E0h, 0E0h,0E0h,0F0h,0FCh
DB 0FFh,0FCh,0F0h,0E0h,0E0h,0E0h, 60h, 20h
DB 00h, 00h, 40h, 30h, 3Dh, 1Fh, 1Fh, 0Fh
DB 07h, 0Fh, 1Fh, 1Fh, 3Dh, 30h, 40h, 00h; "*"
END
|