;Very simple 4 bit 2 Line LCD Driver DATA EQU P1 ;D4=P1.4,D5=P1.5,D6=P1.6 AND D7=P1.7 RS EQU P1.0 ;RS=P1.0 EN EQU P1.1 ;EN=P1.1 ;)))))))))))))))))))))))))))))))))) ORG 00H START: MOV 40H,#'D' MOV 41H,#'P' MOV 42H,#'P' MOV 43H,#'R' MOV 44H,#' ' MOV 45H,#'S' MOV 46H,#'Y' MOV 47H,#'S' MOV 48H,#'T' MOV 49H,#'E' MOV 4AH,#'M' MOV 4BH,#'S' MOV 4CH,#' ' MOV 4DH,#'B' MOV 4EH,#'N' MOV 4FH,#'D' lcall MAIN1 ;for line 1 MOV 40H,#'D' MOV 41H,#'P' MOV 42H,#'P' MOV 43H,#'R' MOV 44H,#' ' MOV 45H,#'S' MOV 46H,#'Y' MOV 47H,#'S' MOV 48H,#'T' MOV 49H,#'E' MOV 4AH,#'M' MOV 4BH,#'S' MOV 4CH,#' ' MOV 4DH,#'S' MOV 4EH,#'D' MOV 4FH,#'D' lcall MAIN2 ;for line 2 LCALL 4DELAY LCALL 4DELAY SJMP START ;**************************************** MAIN1: MOV A,#28h ;RE-INIT LCD 2LINE 587 MATRIX LCALL COMNWRT ;CALL COMMAND SUBRUTINE I LCALL DELAY1 ;GIVE LCD SOME TIME MOV A,#0EH ;DISPLAY ON CURSOR ON LCALL COMNWRT ;CALL COMMAND SUBRUTINE II LCALL DELAY1 ;GIVE LCD SOME TIME MOV A,#06h ;SIFT CURSOR RIGHT LCALL COMNWRT ;CALL COMMAND SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,#02H ;CURSOR AT LINE 1,POS.1 LCALL COMNWRT ;CALL COMMAND SUBRUTINE LCALL DELAY1 ;GIVE LCD SOME TIME clr a LJMP 0LCDDATA ;;************************************************ MAIN2: MOV A,#28h ;RE-INIT LCD 2LINE 587 MATRIX LCALL COMNWRT ;CALL COMMAND SUBRUTINE I LCALL DELAY1 ;GIVE LCD SOME TIME MOV A,#0EH ;DISPLAY ON CURSOR ON LCALL COMNWRT ;CALL COMMAND SUBRUTINE II LCALL DELAY1 ;GIVE LCD SOME TIME MOV A,#06h ;SIFT CURSOR RIGHT LCALL COMNWRT ;CALL COMMAND SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,#0C0H ;CURSOR AT LINE 2,POS.1 LCALL COMNWRT ;CALL COMMAND SUBRUTINE LCALL DELAY1 ;GIVE LCD SOME TIME clr a ;;************************************************ 0LCDDATA:MOV A,40H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,41H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,42H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,43H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,44H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,45H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,46H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,47H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,48H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,49H ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,4AH ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,4BH ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,4CH ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,4DH ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,4EH ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV A,4FH ;DISPLAY DATA START HERE LCALL DATAWRT ;CALL DISPLAY SUBRUTINE LCALL DELAY1 ; GIVE LCD SOME TIME MOV DATA,#0FFH RET W_NIB: PUSH ACC ;Save A for low nibble ORL DATA,#0F0h ;Bits 4..7 <- 1 ORL A,#0Fh ;Don't affect bits 0-3 ANL DATA,A ;High nibble to display SETB EN CLR EN POP ACC ;Prepare to send SWAP A ;...second nibble ORL DATA,#0F0h ; Bits 4...7 <- 1 ORL A,#0Fh ; Don't affect bits 0...3 ANL DATA,A ;Low nibble to display SETB EN CLR EN RET COMNWRT: ;SEND COMMAND TO LCD CLR RS ;FOR RS=0 COMMAND LCALL W_NIB LCALL DELAY1 ;GIVE LCD SOME TIME RET DATAWRT: ;WRITE DATA TO LCD SETB RS ;FOR RS=1 COMMAND LCALL W_NIB LCALL DELAY1 RET DELAY1:MOV R2,#10 HERE3: MOV R3,#20 HERE2: DJNZ R3,HERE2 DJNZ R2,HERE3 RET ;********************************************************************** 4DELAY:ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY RET DELAY: MOV R3,#255 ;DELAY2 FOR HOLD DATA HERE5: MOV R2,#255 HERE4: DJNZ R2,HERE4 DJNZ R3,HERE5 RET END