| ??? 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 |
| Topic | Author | Date |
| 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 |



