一、設計目的
在 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
|