1 LCD. 2 LCD 液晶顯示器 文字型 繪圖型 Hitachi (HD44780A) 80 個位元組.
-
date post
20-Dec-2015 -
Category
Documents
-
view
262 -
download
0
Transcript of 1 LCD. 2 LCD 液晶顯示器 文字型 繪圖型 Hitachi (HD44780A) 80 個位元組.
1
LCD
2
LCD 液晶顯示器• 文字型• 繪圖型• Hitachi (HD44780A)
• 80 個位元組
3
LCD 接腳說明• 14 pin
pin symbol
1 Vss ground
2 VDD +5v
3 Vo 量度調整4 RS 暫存器選擇5 R/W 讀寫控制6 E 致能信號7-14 DB0-DB7 資料匯流排
4
LCD 顯示資料• HD44780 內部顯示資料80 bytes
• DD RAM (Display Data RAM)
16 x 1 LCD
0 1 2 …. 14 15
00h 01h 02h 0Eh 0Fh
5
0 0 2 ….. 18 19
00h 01h 02h … 12h 13h
40h 41h 42h … 52h 53h
20x2 LCD
6
HD44780 主要特性• 80 bytes 的 DD RAM•內建 192 個 5x7 的 CG ROM• 64 bytes 的 CG RAM•內部暫存器 :指令 (IR) 及資料 (DR)
7
IR 暫存器 :•僅可寫入 ,規劃 LCD•清除顯示 功能設定 DDR RAM/CG RAM 位址設定
DR 暫存器 :•為外部寫資料到 LCD DD RAM 或 CG RAM 的資料緩衝區
•為外部讀取 LCD DD RAM 資料或 CG RAM 時的資料緩衝區
8
LCD 內部旗號與暫存器•忙碌旗標 (BF):BF=1 外部控制 LCD 晶片無法對 LCD 寫入動作
•資料顯示記憶體 (DD RAM):80 Bytes•字元產生記憶體 (CG ROM):192 個 5x7 點矩陣字型
•自建字元產生器記憶體 (CG RAM):8 個字型•位址計數器 (AC): 指示寫資料到 DD RAM 或CG RAM 的位址
9
LCD 模組指令說明 :將指令寫入 IR暫存器即可控制 LCD
• 清除顯示器 :將 DD RAM 的所有位址填入空白碼 (20h), DD RAM 位址計數器 (AC=00h)
RS
0
R/W
0
Db7
0
Db6
0
Db5
0
Db4
0
Db3
0
Db2
0
Db1
0
Db0
1
10
• 游標規位 :將 DD RAM 的位址計數器設為 00h,不改變 DD RAM 內部值
RS
0
R/W
0
Db7
0
Db6
0
Db5
0
Db4
0
Db3
0
Db2
0
Db1
1
Db0
x
11
• 進入模式 : I/D=0 當外部寫資料到 DD RAM 或從 DD RAM 讀取資料後 ,位址
計數器減 1, 游標向左移動 I/D=1 當外部寫資料到 DD RAM 或從 DD RAM 讀取資料後 ,位址
計數器加 1, 游標向右移動 S=1 當外部寫資料到 DD RAM 後 ,整個顯示器會向左移 (I/D=0),
向右移 (I/D=1), 從 DD RAM 讀取資料顯示器不會移動 S=0 顯示器不會移動
RS
0
R/W
0
Db7
0
Db6
0
Db5
0
Db4
0
Db3
0
Db2
1
Db1
I/D
Db0
S
12
• 顯示器 ON/OFF 控制 : D=0: 所有資料不顯示 D=1: 所有資料顯示 C=0: 不顯示游標 C=1: 顯示游標 B=0: 游標不閃爍 B=1: 游標閃爍
RS
0
R/W
0
Db7
0
Db6
0
Db5
0
Db4
0
Db3
1
Db2
D
Db1
C
Db0
B
13
• 游標或顯示器移動 : 指令在不改變顯示資料之下移動游標位置或是控制顯示器向左或向右移動
RS
0
R/W
0
Db7
0
Db6
0
Db5
0
Db4
1
Db3
S/C
Db2
R/L
Db1
x
Db0
x
14
S/C R/L 動作
0 0 游標位置向左移 (AC 值減 1)
0 1 游標位置向右移 (AC 值加 1)
1 0 顯示的資料連同游標一起向左移
1 1 顯示的資料連同游標一起向右移
15
•功能設定 : 規劃LCD時功能設定指令必需最先執行 設定資料位元長度: DL=0 使用四位元 (DB7-DB4) 控制程式 ,先高 四位元再低四位元 DL=1 使用八位元 (DB7-DB0) 控制程式
RS
0
R/W
0
Db7
0
Db6
0
Db5
1
Db4
DL
Db3
N
Db2
F
Db1
x
Db0
x
16
設定顯示器的行數 N=0 單行顯示 N=1 雙行顯示設定字型 F=0 5x7 點矩陣字型 F=1 5x10 點矩陣字型
17
• CG RAM 位址設定 : 此指令將 CG RAM 的位址 (DB5-DB0) 寫入位址計數器 (AC)
RS
0
R/W
0
Db7
0
Db6
1
Db5
A
Db4
A
Db3
A
Db2
A
Db1
A
Db0
A
18
• DD RAM 位址設定 : 此指令將 DD RAM 的位址 (DB6-DB0) 寫入位址計數器 (AC)
RS
0
R/W
0
Db7
1
Db6
A
Db5
A
Db4
A
Db3
A
Db2
A
Db1
A
Db0
A
19
• 讀取忙碌旗標 (BF) 和位址 (AC): 此指令將 DD RAM 的位址 (DB6-DB0) 寫入位址計數器 (AC)
當 BF=1 表示目前 LCD 忙碌內部工作 ,因此無法接受外部資料
當 BF=0 才可接受命令或資料
RS
0
R/W
1
Db7
BF
Db6
A
Db5
A
Db4
A
Db3
A
Db2
A
Db1
A
Db0
A
20
•寫資料到 CG RAM 或 DD RAM: 此指令將前一次位址指令所設定之 RAM的位址 (CG RAM 或 DD RAM) 將資料 (DB7-DB0) 寫入到 CG RAM 或 DD RAM
RS
1
R/W
0
Db7
D
Db6
D
Db5
D
Db4
D
Db3
D
Db2
D
Db1
D
Db0
D
21
•自 CG RAM 或 DD RAM 讀取資料 : 此指令將讀取 CG RAM 或 DD RAM 之資料
RS
1
R/W
1
Db7
D
Db6
D
Db5
D
Db4
D
Db3
D
Db2
D
Db1
D
Db0
D
22
;PROGRAM : 5-5.ASM (5-5.PRJ) ;FUNCTION: 16X2 LCD DEMO PROGRAM #INCLUDE HT46R23.INC
.CHIP HT46R23;--------------------------------------------------------------------MY_DATA .SECTION 'DATA' ;== DATA SECTION ==DEL1 DB ? ;DELAY LOOP COUNT 1DEL2 DB ? ;DELAY LOOP COUNT 2DEL3 DB ? ;DELAY LOOP COUNT 3DC_FLAG DBIT ;LCD DATA/COMMAND FLAGLINE_COUNT DB ? ;DISPLAY LINE COUNT;--------------------------------------------------------------------LCD_CONTR EQU PA ;DEFINE LCD CONTROL PORTLCD_CONTRC EQU PAC ;DEFINE LCD CONTROL PORT CON. REG.LCD_DATA EQU PB ;DEFINE LCD DATA PORTLCD_DATAC EQU PBC ;DEFINE LCD DATA PORT CON. REG.LCD_EN EQU LCD_CONTR.0 ;DEFINE EN CONTROL PINLCD_RW EQU LCD_CONTR.1 ;DEFINE RW CONTROL PINLCD_RS EQU LCD_CONTR.2 ;DEFINE RS CONTROL PINLCD_READY EQU PB.7 ;DEFINE READY BIT OF LCD
23
MY_CODE .SECTION AT 0 'CODE' ;== PROGRAM SECTION == ORG 00H ;HT-46RXX RESET VECTOR
CLR LCD_CONTRC ;CONFIG LCD_CONTR PORT AS OUTPUT MODE
MOV A,38H ;FUNCTION SET: 8-BIT,2-LINE,5X10 DOTSCALL WLCMC ;雙行顯示 N=1,5x7點矩陣 ,F=0, DL=1控制模式 D
B7-DB0MOV A,0FH ;ON/OFF CONTR: DISPLAY ON,CURSOR
; ON,BLINKING ONCALL WLCMC ;顯示所有資料 D=1,顯示游標 C=1,閃爍 B=1MOV A,06H ;ENTRY MODE : INCREMENT,DISPLAY NOT SH
IFT CALL WLCMC ;旗標 AC設為遞加 I/D=1,顯示器劃面不移動 S=0
MAIN:MOV A,01H ;CLEAR DISPLAYCALL WLCMCMOV A,80H ;SET LINE ONE, POSITION 0CALL WLCMCMOV A,10HMOV LINE_COUNT,A ;SET LINE COUNTER 16個位置
24
MAIN_1:MOV A,31H ;WRITE '1‘, ASCII=31CALL WLCMD ; 寫入資料CALL DELAY ;DELAY 100mSSDZ LINE_COUNT ;LINE_COUNT-1 = 0?JMP MAIN_1 ;NO, NEXT POSITIONMOV A,0C0H ;SET LINE TWO, POSITION 0CALL WLCMC ;寫入命令MOV A,16MOV LINE_COUNT,A ;SET LINE COUNTER
MAIN_2:MOV A,32H ;WRITE '2‘, ASCII=32CALL WLCMD ; 寫入資料CALL DELAY ;DELAU 100mSSDZ LINE_COUNT ;LINE_COUNT-1 = 0?JMP MAIN_2 ;NO, NEXT POSITIONJMP MAIN ;RE-START
25
;********************************************************************; LCD DATA/COMMAND WRITE PROCEDURE ;********************************************************************WLCMD PROC
SET DC_FLAG ;SET DC_FLAG=1 FOR DATA WRITEJMP WLCM
WLCMC:CLR DC_FLAG ;SET DC_FLAG=0 FOR COMMAND WRITE
WLCM:SET LCD_DATAC ;CONFIG LCD_DATA AS INPUT MOD
ECLR LCD_CONTR ;CLEAR ALL LCD CONTROL SIGNAL
;E=0,RS=0,RW=0SET LCD_RW ;SET RW SIGNAL (READ)NOP ;FOR TASSET LCD_EN ;SET EN HIGHNOP ;FOR TDDR
26
WF:SZ LCD_READY ;IS LCD BUSY?JMP WF ;YES, JUMP TO WAITCLR LCD_DATAC ;NO, CONFIG LCD_DATA AS
; OUTPUT MODEMOV LCD_DATA,A ;LATCH DATA/COMMAND ON PB(LCD
; DATA BUS)CLR LCD_CONTR ;CLEAR ALL LCD CONTROL SIG
NALSZ DC_FLAG ;IS COMMAND WRITE?SET LCD_RS ;NO, SET RS HIGHSET LCD_EN ;SET EN HIGHNOP ;讓 LCD有足夠時間完成工作
CLR LCD_EN ;SET EN LOWRET
WLCMD ENDP
27
;********************************************************************; Delay about DEL1*10mS ;********************************************************************DELAY PROC
MOV A,10MOV DEL1,A ;SET DEL1 COUNTER
DEL_1: MOV A,30 MOV DEL2,A ;SET DEL2 COUNTER DEL_2: MOV A,110
MOV DEL3,A ;SET DEL3 COUNTERDEL_3: SDZ DEL3 ;DEL3 DOWN COUNT JMP DEL_3 SDZ DEL2 ;DEL2 DOWN COUNT JMP DEL_2
SDZ DEL1 ;DEL1 DOWN COUNTJMP DEL_1
RETDELAY ENDP
END