Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
02/08/03 12:39
Read: times


 
#38604 - RE: Strange LCD Behavior
Responding to: ???'s previous message

My experience with the LCD driver HD44780 has been satisfactory when I am not checking the busy flag, and only time the event.

The code that I use to test new LCD modules is given below. Just a 200micro delay between each write is OK.

;PROGRAM TO INITIALIZE LCD IN TWO LINE MODE AND SEND DATA.
;Tested OK 10 Jan 2003 with the Version 3 PCB ( Same as SDK )
;



AUX EQU 8EH

;Memory mapped I/O addresses

ADD_H EQU 0F0H ;High nibble for all I/O R&W
DIN_1 EQU 00H ;Read. (Port bits pulled HIGH. Hence LOW when selected..)
DIN_2 EQU 01H ;Read. ( same as above )
DOT_1 EQU 00H ;Write
DOT_2 EQU 01H ;Write
LCD_C EQU 02H ;Write
LCD_D EQU 0AH ;Write
ADC_1 EQU 03H ;Read
DAC_1 EQU 03H ;Write
DAC_2 EQU 04H ;Write
PRN EQU 05H ;Write

FSET EQU 38H ; L=1(8 BITS),N=1(2LINE) ; 001L N000
DCB EQU 0CH ; DIS.ON=1,CUR.OFF=0,BLINK OFF=0; 0000 1DCB
RH EQU 02H ; RET.HOME ; 0000 0010 (NOT REQUIRED TO INITIALIZE)
CLER EQU 01H ; CLR. DISP; 0000 0001
SDD1 EQU 80H ; SET DDRAM ADDRESS LINE 1; 1000 0000 (NOT REQD.TO INITIALIZE)
SEM EQU 06H ; ENTRY MODE; INC=1, SHIFT=0; 0000 01IS
DCON EQU 18H ; DIS & CUR CONTROL; DIS SHIFT=1,LEFTWISE=0; 0001 SL00 (NOT
; REQUIRED TO INITIALIZE)


ORG 30H

DPLSAV DS 1



ORG 0000H

MOV AUX, #2H
SNDLCD: ACALL LCDSET
LINE1: MOV DPTR,#TXT ; START LOADING FIRST LINE
MOV R2,#0FH ; 16 CHARACTERS
NXT1: MOV A,#0
MOVC A,@A+DPTR
ACALL LCDCHR
INC DPTR
DJNZ R2, NXT1

LINE2: MOV A,#0C0H ; SET ADDRESS FOR 2ND LINE
ACALL LCDCOM ; WRITE TO DDRAM
MOV DPTR,#TXT1 ; START LOADING 2ND LINE
MOV R2,#0FH
NXT2: MOV A,#0
MOVC A,@A+DPTR
ACALL LCDCHR
INC DPTR
DJNZ R2, NXT2

SJMP $ ; Hang out here

TXT: DB 'THIS LCD MODULE' ; FIRST LINE MESSAGE
TXT1: DB 'IS WORKING OK..' ; SECOND LINE MESSAGE

LCDSET: MOV R6,#03
TTIMES: MOV A,#FSET
ACALL LCDCOM
ACALL LTIME1
DJNZ R6,TTIMES ; TO SEND FSET THRICE
MOV A,#DCB
ACALL LCDCOM
MOV A,#SEM
ACALL LCDCOM
MOV A,#CLER
ACALL LCDCOM
ACALL LTIME1
RET

LCDCOM: MOV P2,#ADD_H
MOV R0,#LCD_C
MOVX @R0,A
DELAY: MOV R3,#200 ; 100 micro DELAY FOR EACH WRITE
DLOOP: DJNZ R3,DLOOP
RET

LCDCHR: MOV P2,#ADD_H
MOV R0,#LCD_D
MOVX @R0,A
ACALL DELAY
RET

LTIME1: MOV DPTR,#5
LCALL LTIME
RET

; LTIME produces a delay of DPTR mSecs. Call with DPTR loaded with required number of mSecs.

LTIME: MOV A, DPL ; 6+DPTR*(15 + TIME0) micros (MOV DPTR + CALL add 4)
ORL A, DPH ; 6+DPTR*1000 micros
JZ SRET2
SETB C
MOV A, DPL
SUBB A, #0
MOV DPL, A
MOV A, DPH
SUBB A, #0
MOV DPH, A
ACALL TIME0
SJMP LTIME
SRET2: RET

TIME0: MOV DPLSAV, #196 ; (n1+1)*5 microsec=985 micros
NOP
TIME0L: NOP
NOP
NOP
DJNZ DPLSAV, TIME0L
RET

END

List of 5 messages in thread
TopicAuthorDate
Strange LCD Behavior            01/01/70 00:00      
   RE: Strange LCD Behavior            01/01/70 00:00      
   RE: Strange LCD Behavior            01/01/70 00:00      
   RE: Strange LCD Behavior            01/01/70 00:00      
   RE: Strange LCD Behavior            01/01/70 00:00      

Back to Subject List