270 likes | 519 Views
LCD. LCD 液晶顯示器 文字型 繪圖型 Hitachi (HD44780A) 80 個位元組. LCD 接腳說明 14 pin. LCD 顯示資料 HD44780 內部顯示資料 80 bytes DD RAM (Display Data RAM) 16 x 1 LCD. 20x2 LCD. HD44780 主要特性 80 bytes 的 DD RAM 內建 192 個 5x7 的 CG ROM 64 bytes 的 CG RAM 內部暫存器 : 指令 (IR) 及資料 (DR). IR 暫存器 : 僅可寫入 , 規劃 LCD
E N D
LCD液晶顯示器 • 文字型 • 繪圖型 • Hitachi (HD44780A) • 80個位元組
LCD接腳說明 • 14 pin
LCD顯示資料 • HD44780內部顯示資料80 bytes • DD RAM (Display Data RAM) 16 x 1 LCD
HD44780主要特性 • 80 bytes 的 DD RAM • 內建192個5x7的CG ROM • 64 bytes 的CG RAM • 內部暫存器:指令(IR)及資料(DR)
IR暫存器: • 僅可寫入,規劃LCD • 清除顯示 功能設定 DDR RAM/CG RAM位址設定 DR暫存器: • 為外部寫資料到LCD DD RAM 或CG RAM 的資料緩衝區 • 為外部讀取LCD DD RAM資料或CG RAM 時的資料緩衝區
LCD內部旗號與暫存器 • 忙碌旗標(BF):BF=1 外部控制LCD晶片無法對LCD寫入動作 • 資料顯示記憶體(DD RAM):80 Bytes • 字元產生記憶體(CG ROM):192個5x7點矩陣字型 • 自建字元產生器記憶體(CG RAM):8個字型 • 位址計數器(AC):指示寫資料到DD RAM或CG RAM的位址
LCD模組指令說明:將指令寫入IR暫存器即可控制LCDLCD模組指令說明:將指令寫入IR暫存器即可控制LCD • 清除顯示器:將DD RAM的所有位址填入空白碼(20h), DD RAM位址計數器(AC=00h)
游標規位:將DD RAM的位址計數器設為00h,不改變DD RAM內部值
進入模式: 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 顯示器不會移動
顯示器ON/OFF控制: D=0:所有資料不顯示 D=1:所有資料顯示 C=0:不顯示游標 C=1:顯示游標 B=0:游標不閃爍 B=1:游標閃爍
游標或顯示器移動: 指令在不改變顯示資料之下移動游標位置或是控制顯示器向左或向右移動
功能設定: 規劃LCD時功能設定指令必需最先執行 設定資料位元長度: DL=0 使用四位元(DB7-DB4)控制程式,先高 四位元再低四位元 DL=1 使用八位元(DB7-DB0)控制程式
設定顯示器的行數 N=0 單行顯示 N=1 雙行顯示 設定字型 F=0 5x7點矩陣字型 F=1 5x10點矩陣字型
CG RAM 位址設定: 此指令將CG RAM的位址(DB5-DB0)寫入位址計數器(AC)
DD RAM 位址設定: 此指令將DD RAM的位址(DB6-DB0)寫入位址計數器(AC)
讀取忙碌旗標(BF)和位址(AC): 此指令將DD RAM的位址(DB6-DB0)寫入位址計數器(AC) 當BF=1 表示目前LCD忙碌內部工作,因此無法接受外部資料 當BF=0 才可接受命令或資料
寫資料到CG RAM 或DD RAM: 此指令將前一次位址指令所設定之RAM的位址(CG RAM 或DD RAM) 將資料(DB7-DB0) 寫入到CG RAM 或DD RAM
自CG RAM 或DD RAM讀取資料: 此指令將讀取CG RAM 或DD RAM 之資料
;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 1 DEL2 DB ? ;DELAY LOOP COUNT 2 DEL3 DB ? ;DELAY LOOP COUNT 3 DC_FLAG DBIT ;LCD DATA/COMMAND FLAG LINE_COUNT DB ? ;DISPLAY LINE COUNT ;-------------------------------------------------------------------- LCD_CONTR EQU PA ;DEFINE LCD CONTROL PORT LCD_CONTRC EQU PAC ;DEFINE LCD CONTROL PORT CON. REG. LCD_DATA EQU PB ;DEFINE LCD DATA PORT LCD_DATAC EQU PBC ;DEFINE LCD DATA PORT CON. REG. LCD_EN EQU LCD_CONTR.0 ;DEFINE EN CONTROL PIN LCD_RW EQU LCD_CONTR.1 ;DEFINE RW CONTROL PIN LCD_RS EQU LCD_CONTR.2 ;DEFINE RS CONTROL PIN LCD_READY EQU PB.7 ;DEFINE READY BIT OF LCD
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 DOTS CALL WLCMC ;雙行顯示N=1,5x7點矩陣,F=0, DL=1控制模式DB7-DB0 MOV A,0FH ;ON/OFF CONTR: DISPLAY ON,CURSOR ; ON,BLINKING ON CALL WLCMC ;顯示所有資料D=1,顯示游標C=1,閃爍B=1 MOV A,06H ;ENTRY MODE : INCREMENT,DISPLAY NOT SHIFT CALL WLCMC ;旗標AC設為遞加I/D=1,顯示器劃面不移動S=0 MAIN: MOV A,01H ;CLEAR DISPLAY CALL WLCMC MOV A,80H ;SET LINE ONE, POSITION 0 CALL WLCMC MOV A,10H MOV LINE_COUNT,A ;SET LINE COUNTER 16個位置
MAIN_1: MOV A,31H ;WRITE '1‘, ASCII=31 CALL WLCMD ;寫入資料 CALL DELAY ;DELAY 100mS SDZ LINE_COUNT ;LINE_COUNT-1 = 0? JMP MAIN_1 ;NO, NEXT POSITION MOV A,0C0H ;SET LINE TWO, POSITION 0 CALL WLCMC ;寫入命令 MOV A,16 MOV LINE_COUNT,A ;SET LINE COUNTER MAIN_2: MOV A,32H ;WRITE '2‘, ASCII=32 CALL WLCMD ;寫入資料 CALL DELAY ;DELAU 100mS SDZ LINE_COUNT ;LINE_COUNT-1 = 0? JMP MAIN_2 ;NO, NEXT POSITION JMP MAIN ;RE-START
;********************************************************************;******************************************************************** ; LCD DATA/COMMAND WRITE PROCEDURE ;******************************************************************** WLCMD PROC SET DC_FLAG ;SET DC_FLAG=1FOR DATA WRITE JMP WLCM WLCMC: CLR DC_FLAG ;SET DC_FLAG=0 FOR COMMAND WRITE WLCM: SET LCD_DATAC ;CONFIG LCD_DATA ASINPUT MODE CLR LCD_CONTR ;CLEAR ALL LCD CONTROL SIGNAL ;E=0,RS=0,RW=0 SET LCD_RW ;SET RW SIGNAL (READ) NOP ;FOR TAS SET LCD_EN ;SET EN HIGH NOP ;FOR TDDR
WF: SZ LCD_READY ;IS LCD BUSY? JMP WF ;YES, JUMP TO WAIT CLR LCD_DATAC ;NO, CONFIG LCD_DATA AS ; OUTPUT MODE MOV LCD_DATA,A ;LATCH DATA/COMMAND ON PB(LCD ; DATA BUS) CLR LCD_CONTR ;CLEAR ALL LCD CONTROL SIGNAL SZ DC_FLAG ;IS COMMAND WRITE? SET LCD_RS ;NO, SET RS HIGH SET LCD_EN ;SET EN HIGH NOP ;讓LCD有足夠時間完成工作 CLR LCD_EN ;SET EN LOW RET WLCMD ENDP
;********************************************************************;******************************************************************** ; Delay about DEL1*10mS ;******************************************************************** DELAY PROC MOV A,10 MOV 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 COUNTER DEL_3: SDZ DEL3 ;DEL3 DOWN COUNT JMP DEL_3 SDZ DEL2 ;DEL2 DOWN COUNT JMP DEL_2 SDZ DEL1 ;DEL1 DOWN COUNT JMP DEL_1 RET DELAY ENDP END