| ??? 10/26/03 08:26 Read: times |
#57264 - LCD problem ? |
I wrote my code here for T1602B LCD but it does not work (no character display on LCD). Anyone can show me why ? Thanks a lot. ACC EQU E0h; LCD_DATA EQU 090H LCD_DB4 EQU 094H ; P1.4 HIGH NIBBLE OF PORT 1 IS USED FOR DATA LCD_DB5 EQU 095H ; P1.5 HIGH NIBBLE OF PORT 1 IS USED FOR DATA LCD_DB6 EQU 096H ; P1.6 HIGH NIBBLE OF PORT 1 IS USED FOR DATA LCD_DB7 EQU 097H ; P1.7 HIGH NIBBLE OF PORT 1 IS USED FOR DATA LCD_RS EQU 0B3H ; P3.3 LCD REGISTER SELECT LINE LCD_RW EQU 0B4H ; P3.4 LCD READ / WRITE LINE LCD_E EQU 0B5H ; P3.5 LCD ENABLE LINE ; ***SYSTEM INSTRUCTIONS*** CONFIG EQU 28H ; 4-BIT DATA,2 LINES,5X7 MATRIX LCD ENTRYMODE EQU 6 ; INCREMENT CURSOR DON'T SHIFT DISPLAY ; ***CURSOR CONTROL INSTRUCTIONS*** OFFCUR EQU 0CH BLINKCUR EQU 0DH ; ***DISPLAY CONTROL INSTRUCTIONS*** CLRDSP EQU 01H ONDSP EQU 0EH ; ***MACRO'S*** ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 0000h LJMP MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INITLCD4: CLR LCD_RS ; LCD REGISTER SELECT LINE CLR LCD_RW ; READ / WRITE LINE CLR LCD_E ; ENABLE LINE MOV R4, #CONFIG; FUNCTION SET - DATA BITS, ; LINES, FONTS ACALL WRLCDCOM4 MOV R4, #ONDSP ; DISPLAY ON ACALL WRLCDCOM4 MOV R4, #ENTRYMODE ; SET ENTRY MODE ACALL WRLCDCOM4 ; INCREMENT CURSOR RIGHT, NO SHIFT MOV R4, #CLRDSP; CLEAR DISPLAY, HOME CURSOR ACALL WRLCDCOM4 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RESETLCD4: CLR LCD_RS ; LCD REGISTER SELECT LINE CLR LCD_RW ; READ / WRITE LINE CLR LCD_E ; ENABLE LINE CLR LCD_DB7 ; SET BIT PATTERN FOR... CLR LCD_DB6 ; ... POWER-ON-RESET SETB LCD_DB5 SETB LCD_DB4 SETB LCD_E ; START ENABLE PULSE CLR LCD_E ; END ENABLE PULSE MOV A, #4 ; DELAY 4 MILLISECONDS ACALL MDELAY SETB LCD_E ; START ENABLE PULSE CLR LCD_E ; END ENABLE PULSE MOV A, #1 ; DELAY 1 MILLISECOND ACALL MDELAY SETB LCD_E ; START ENABLE PULSE CLR LCD_E ; END ENABLE PULSE MOV A, #1 ; DELAY 1 MILLISECOND ACALL MDELAY CLR LCD_DB4 ; SPECIFY 4-BIT OPERATION SETB LCD_E ; START ENABLE PULSE CLR LCD_E ; END ENABLE PULSE MOV A, #1 ; DELAY 1 MILLISECOND ACALL MDELAY MOV R4, #CONFIG; FUNCTION SET ACALL WRLCDCOM4 MOV R4, #08H ; DISPLAY OFF ACALL WRLCDCOM4 MOV R4, #1 ; CLEAR DISPLAY, HOME CURSOR ACALL WRLCDCOM4 MOV R4, #ENTRYMODE ; SET ENTRY MODE ACALL WRLCDCOM4 AJMP INITLCD4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WRLCDCOM4: CLR LCD_E CLR LCD_RS ; SELECT SEND COMMAND CLR LCD_RW ; SELECT WRITE OPERATION PUSH ACC ; SAVE ACCUMULATOR MOV A, R4 ; PUT DATA BYTE IN ACC MOV C, ACC.4 ; LOAD HIGH NIBBLE ON DATA BUS MOV LCD_DB4, C ; ONE BIT AT A TIME USING... MOV C, ACC.5 ; BIT MOVE OPERATOINS MOV LCD_DB5, C MOV C, ACC.6 MOV LCD_DB6, C MOV C, ACC.7 MOV LCD_DB7, C SETB LCD_E ; PULSE THE ENABLE LINE CLR LCD_E MOV C, ACC.0 ; SIMILARLY, LOAD LOW NIBBLE MOV LCD_DB4, C MOV C, ACC.1 MOV LCD_DB5, C MOV C, ACC.2 MOV LCD_DB6, C MOV C, ACC.3 MOV LCD_DB7, C ACALL PULSEEWAIT4; PULSE THE ENABLE LINE... ; AND WAIT FOR BUSY FLAG TO CLEAR POP ACC RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PULSEEWAIT4: CLR LCD_E SETB LCD_E ; PULSE THE ENABLE LINE CLR LCD_E MOV LCD_DATA, #0FFH ; PREPARE PORT FOR INPUT SETB LCD_RW ; PREPARE R/W FOR READ OPERATION PUSH ACC ; SAVE ACCUMULATOR CONTENTS PEW: SETB LCD_E ; START THE ENABLE PULSE MOV A, LCD_DATA; READ STATUS NIBBLE CLR LCD_E ; END ENABLE PULSE SETB LCD_E ; PRETEND READING STATUS LOW NIBBLE CLR LCD_E JB ACC.7, PEW ; LOOP WHILE BUSY FLAG IS SET POP ACC ; RESTORE ACCUMULATOR RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WRLCDDATA: CLR LCD_E SETB LCD_RS ; SELECT SEND DATA CLR LCD_RW ; SELECT WRITE OPERATION PUSH ACC ; SAVE ACCUMULATOR MOV A, R4 ; PUT DATA BYTE IN ACC MOV C, ACC.4 ; LOAD HIGH NIBBLE ON DATA BUS MOV LCD_DB4, C ; ONE BIT AT A TIME USING... MOV C, ACC.5 ; BIT MOVE OPERATOINS MOV LCD_DB5, C MOV C, ACC.6 MOV LCD_DB6, C MOV C, ACC.7 MOV LCD_DB7, C SETB LCD_E ; PULSE THE ENABLE LINE CLR LCD_E MOV C, ACC.0 ; SIMILARLY, LOAD LOW NIBBLE MOV LCD_DB4, C MOV C, ACC.1 MOV LCD_DB5, C MOV C, ACC.2 MOV LCD_DB6, C MOV C, ACC.3 MOV LCD_DB7, C ACALL PULSEEWAIT4; PULSE THE ENABLE LINE... ; AND WAIT FOR BUSY FLAG TO CLEAR POP ACC RET ; ********************************************************** MDELAY: PUSH ACC ;MOV A,#0A6H MD_OLP: INC A NOP NOP NOP NOP NOP NOP NOP NOP JNZ MD_OLP NOP POP ACC RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAIN: MOV 80h,#00h ; 0->P0 CLR B1h ;mo chot MOV A0h,#00h ; 0->P2 CLR B0h ;mo chot ;MOV LCD_DATA,#ffh ; 1-> P1 LCALL RESETLCD4 MOV A, #4 ; DELAY 4 MILLISECONDS LCALL MDELAY LCALL INITLCD4 MOV A, #4 ; DELAY 4 MILLISECONDS LCALL MDELAY LCALL INITLCD4 MOV A, #4 ; DELAY 4 MILLISECONDS LCALL MDELAY LCALL INITLCD4 MOV R4,#23h ;MOV A,#'H' LCALL WRLCDDATA MOV R4,#'E' LCALL WRLCDDATA MOV R4,#'L' LCALL WRLCDDATA MOV R4,#'L' LCALL WRLCDDATA MOV R4,#'O' LCALL WRLCDDATA MOV R4,#' ' LCALL WRLCDDATA MOV R4,#'W' LCALL WRLCDDATA MOV R4,#'O' LCALL WRLCDDATA MOV R4,#'R' LCALL WRLCDDATA MOV R4,#'L' LCALL WRLCDDATA MOV R4,#'D' LCALL WRLCDDATA END |
| Topic | Author | Date |
| LCD problem ? | 01/01/70 00:00 | |
| RE: LCD problem ? | 01/01/70 00:00 | |
| RE: LCD problem ? | 01/01/70 00:00 | |
| RE: LCD problem ? | 01/01/70 00:00 | |
| RE: LCD problem ? | 01/01/70 00:00 | |
| RE: LCD problem ? | 01/01/70 00:00 | |
| RE: LCD problem ? | 01/01/70 00:00 | |
| To IJaz Ahmed | 01/01/70 00:00 | |
| RE: To IJaz Ahmed | 01/01/70 00:00 | |
| RE: To IJaz Ahmed | 01/01/70 00:00 | |
| Make smaller steps! | 01/01/70 00:00 | |
| RE: Make smaller steps! | 01/01/70 00:00 | |
RE: LCD problem ? | 01/01/70 00:00 |



