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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
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

List of 13 messages in thread
TopicAuthorDate
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      

Back to Subject List