Upload
wilfred-small
View
232
Download
0
Embed Size (px)
Citation preview
中華科技大學電子工程學系 智光商工電子資訊群 2013/12/27
智光優質精進計劃課程講義LCD 功能測試及應用
HD44780 Feature
Display Data RAM : 80*8 Bytes (DDRAM)
Character Generator ROM (CGROM) 內建 160 個 5*7 字型
Character Generator RAM (CGRAM) : 64 自行規劃 8 個 5*7 字型
Display Principle
假如希望在 LCD 某個位置顯示某個字型 , 請將該字型的 ASCII 碼寫入相對應的 DD RAM 位址中
1 2 3 4 5 6 7 8 9 10
A
F
(ASCII Code) DD RAM
Type of LCD
LC
D
指令
集
LCM Access Control Instruction Register IR: WLCD_COMMAND
存取 LCM 指令碼 (only write) Data Register DR: WLCD_DATA
存取 LCM 顯示資料 ( read & write)
RS R/W
0 0
0 1
1 0
1 1
Operation Mode
Command IR
U’C BF & AC
Display Data DR
U’C Display Data
PIN 6 4 5
E
LCM Access Timing
RS
R/W
E
Data
WLCD_COMMAND
WLCD_DATA
/ E R W RS
7 ~ 0DB DB
;-----------------------------------------------
;WLCD_COMMAND
;(1) FUNCTION: Write LCD command to IR
; * E=1, R/W=0, RS=0
; * Command -> LCD_BUS
; * E=0, R/W=1, RS=1
;(2) INPUT : R2
;(3) OUTPUT : None
;(4) USE REG.: R2,R3,R4
;------------------------------------------------
EXTRN CODE(DELAY_01MS)
PUBLIC WLCD_COMMAND
ROM SEGMENT CODE
LCD_BUS EQU P0LCD_E EQU P3.0LCD_RW EQU P3.1LCD_RS EQU P3.2RSEG ROMWLCD_COMMAND:
CLR LCD_RWCLR LCD_RS ; IRSETB LCD_EMOV LCD_BUS,R2CLR LCD_ESETB LCD_RSSETB LCD_RWMOV R4,#20CALL DELAY_01MSRETEND
;-------------------------------------------------------
;WLCD_DATA
;(1) FUNCTION: Write LCD DATA to DR
; * E=1, R/W=0, RS=1
; * Data -> LCD_BUS
; * E=0, R/W=1, RS=1
;(2) INPUT : R2
;(3) OUTPUT : None
;(4) USE REG. : R2,R3,R4
;-------------------------------------------------------
EXTRN CODE(DELAY_01MS)
PUBLIC WLCD_DATA
ROM SEGMENT CODE
LCD_BUS EQU P0LCD_E EQU P3.0LCD_RW EQU P3.1LCD_RS EQU P3.2RSEG ROMWLCD_DATA:
CLR LCD_RWSETB LCD_RSSETB LCD_EMOV LCD_BUS,R2CLR LCD_ESETB LCD_RSSETB LCD_RWMOV R4,#20CALL DELAY_01MSRETEND
;-----------------------------------------------;SET_LCD ;(1) FUNCTION: Initialize LCD module; * FUNCTION SET: DL=0, N=1; * DISPLAY ON/OFF: D=1, C=0, B=0; * ENTRY MODE SET: I/D=1, S=0 ;(2) INPUT : None;(3) OUTPUT : None;(4) USE REG. : R2,R3,R4;------------------------------------------------ EXTRN CODE(WLCD_COMMAND)EXTRN CODE(DELAY_01MS)PUBLIC SET_LCDROM SEGMENT CODERSEG ROMLCD_BUS EQU P0LCD_E EQU P3.0LCD_RW EQU P3.1LCD_RS EQU P3.2SET_LCD:
MOV R2,#00111000BCALL WLCD_COMMANDMOV R2,#00001100BCALL WLCD_COMMAND
MOV R2,#00000110BCALL WLCD_COMMANDRETEND
;------------------------------------------------------------------------;CLEAR_LCD ;(1) FUNCTION: DISPLAY CLEAR / CURSOR HOME;(2) INPUT : None;(3) OUTPUT : None;(4) USE REG. : R2,R3,R4;------------------------------------------------------------------------- EXTRN CODE(WLCD_COMMAND)PUBLIC CLEAR_LCDROM SEGMENT CODERSEG ROMCLEAR_LCD:
MOV R2,#00000001BCALL WLCD_COMMANDMOV R2,#00000010BCALL WLCD_COMMANDRETEND
;------------------------------------------------------------------------------;DISP_LCD_STRING;(1)FUNCTION: DISPLAY LCD STRING;(2)INPUT : DPTR (STRING TABLE NAME);(3)OUTPUT : NONE;(4)USE REG. : DPTR,R1,R2,R3,R4;------------------------------------------------------------------------------EXTRN CODE(WLCD_DATA)PUBLIC DISP_LCD_STRINGROM SEGMENT CODERSEG ROMDISP_LCD_STRING:
MOV R1,#00DISP_1:
MOV A,R1MOVC A,@A+DPTRMOV R2,AXRL A,#80HJZ DISP_2CALL WLCD_DATAINC R1JMP DISP_1
DISP_2: RET
END
;--------------------------------------------------------------------------------;DISP_LCD_HEX ;(1) FUNCTION: DISPLAY HEX CODE (00H ~ FFH);(2) INPUT : R1;(3) OUTPUT : None;(4) USE REG.: R2,R3,R4;-------------------------------------------------------------------------------- EXTRN CODE(WLCD_DATA)PUBLIC DISP_LCD_HEXROM SEGMENT CODERSEG ROM
DISP_LCD_HEX:MOV A,R1ANL A,#0F0HSWAP AMOV R2,ACALL DISP_BINARYMOV A,R1ANL A,#0FHMOV R2,ACALL DISP_BINARYRET
DISP_BINARY:CLR CMOV A,R2SUBB A,#10JC LESS_10JMP LARGE_9
LESS_10:MOV A,R2ADD A,#30HMOV R2,ACALL WLCD_DATARET
LARGE_9:MOV A,R2ADD A,#37HMOV R2,ACALL WLCD_DATARETEND
;------------------------------------------------------------------------------------------;ELCD_CHAR_PATTERN;(1)FUNCTION: CREATE CHARACTER PATTERN FROM;(2)INPUT : R5 => THE NUMBER OF CHARACTER (1-8); : DPTR => LCD CHARACTER TEBLE NAME;(3)OUTPUT : NONE;(4)USE REG. : R2,R3,R4,R5,R6,DPTR ;------------------------------------------------------------------------------------------EXTRN CODE(WLCD_DATA)EXTRN CODE(WLCD_COMMAND)PUBLIC ELCD_CHAR_PATTERN
ROM SEGMENT CODERSEG ROM
ELCD_CHAR_PATTERN:; (1) SET INDEX R6=00H
MOV R6,#00H; (2) R5<-R5*8 CALCULATE LCD CHAR PATTERN BYTE NUMBER MOV A,R5 RL A RL A
RL AMOV R5,A
; (3) WRITE CHARACTER PATTERN TO CG RAM MOV R2,#40H CALL WLCD_COMMANDELCD1: MOV A,R6 MOVC A,@A+DPTR MOV R2,A CALL WLCD_DATA INC R6 DJNZ R5,ELCD1 RET
END
實作練習 ( 一 )
在 LCD 螢幕上顯示單一字元(1) 在第一列第 5 個位址顯示一個阿拉伯數字(2) 在第一列第 13 個位址顯示一個英文字母(3) 在第二列第 7 個位址顯示一個運算符號(4) 在第二列第 15 個位址顯示一個 <,=,> 符號
;===========================================; TLCD_1 : TESTING LCD MODULE FUNCTION; SHOW CHAR ; 2012/9/4 , TPS;===========================================EXTRN CODE(WLCD_COMMAND)EXTRN CODE(WLCD_DATA)EXTRN CODE(SET_LCD)EXTRN CODE(CLEAR_LCD)EXTRN CODE(DELAY_01MS)
ORG 00HJMP START
START:CALLCALL
MOVCALL WLCD_COMMANDMOVCALL WLCD_DATA
MOVCALL WLCD_COMMANDMOVCALL WLCD_DATA
MOVCALL WLCD_COMMANDMOVCALL WLCD_DATA
MOVCALL WLCD_COMMANDMOVCALL WLCD_DATA
JMP $END
實作練習 ( 二 )
在 LCD 螢幕上顯示兩行字串(1)第一列 :STR1_TABLE:DB “VOLTAGE VALUE= ",80H
(2) 第二列 :STR2_TABLE:DB "CURRENT VALUE= ",80H
(3) 第一列加入 : 7D 十六進制資料
(4) 第二列加入 : E9 十六進制資料
;===========================================; TLCD_2 : TESTING LCD MODULE FUNCTION; SHOW STRING ; 2011/5/7 , TPS;===========================================EXTRN CODE(WLCD_COMMAND)EXTRN CODE(SET_LCD)EXTRN CODE(CLEAR_LCD)EXTRN CODE(DISP_LCD_STRING)
ORG 00HJMP START
START:CALLCALL
MOVCALL WLCD_COMMANDMOV ,#CALL DISP_LCD_STRING
MOVCALL WLCD_COMMANDMOVCALL DISP_LCD_STRING
JMP $
STR1_TABLE:DB "VOLTAGE VALUE= ",80H
STR2_TABLE:DB "CURRENT VALUE= ",80H
END
Home Work (10/14):
1. 在 LCD 螢幕上顯示 : 2013/10/14 ( 一 ) PM 3:12:562. 在 LCD 螢幕上顯示 : A
該字元每隔 1 秒向右邊移一個字元3. 在 LCD 螢幕上顯示 : XieHe HighSchool
該字串每隔 1 秒向右邊移一個字元
實作練習 ( 三 )
MOUSE_TABLE: DB 00H,08H,04H,03H,04H,08H,0AH,0DH ;PATTERN 1DB 00H,02H,04H,18H,04H,02H,0AH,16H ;PATTERN 2DB 1FH,0CH,0AH,09H,08H,0EH,0EH,1FH ;PATTERN 3DB 1FH,06H,0AH,12H,02H,0EH,0EH,1FH ;PATTERN 4
在 LCD 螢幕上顯示一只老鼠
實作練習 ( 三 )
MOUSE_TABLE: DB 00H,08H,04H,03H,04H,08H,0AH,0DH ;PATTERN 1DB 00H,02H,04H,18H,04H,02H,0AH,16H ;PATTERN 2DB 1FH,0CH,0AH,09H,08H,0EH,0EH,1FH ;PATTERN 3DB 1FH,06H,0AH,12H,02H,0EH,0EH,1FH ;PATTERN 4
在 LCD 螢幕上顯示一只老鼠
;===========================================; TLCD_5 : MOUSE AMIMATION ; SHOW MOUSE AND SHIFT ; 2011/5/21, TPS;===========================================EXTRN CODE(WLCD_COMMAND)EXTRN CODE(WLCD_DATA)EXTRN CODE(SET_LCD)EXTRN CODE(CLEAR_LCD)EXTRN CODE(DELAY_10MS)EXTRN CODE(ELCD_CHAR_PATTERN)
ORG 00HJMP START
START:CALLCALLMOV R5,#MOV DPTR,#CALL
MOVCALL WLCD_COMMANDMOVCALL WLCD_DATAMOVCALL WLCD_DATAMOVCALL WLCD_COMMANDMOVCALL WLCD_DATAMOVCALL WLCD_DATAJMP $
MOUSE_TABLE: DB 00H,08H,04H,03H,04H,08H,0AH,0DH ;PATTERN 1DB 00H,02H,04H,18H,04H,02H,0AH,16H ;PATTERN 2DB 1FH,0CH,0AH,09H,08H,0EH,0EH,1FH ;PATTERN 3DB 1FH,06H,0AH,12H,02H,0EH,0EH,1FH ;PATTERN 4
END