ORG 00H MAIN: LCD_RS EQU P3.5 LCD_RW EQU P3.6 LCD_EN EQU P3.7 DYTA EQU 50H ;************* ;LCD ROUTINES* ;************* ;INITIALIZE ROUTINE IS FOR INITIALIZING BOTH LCD 4*20 OR 2*16 ;WRITE_ON ROUTINE IS FOR WRITING A LETTER ON LCD ;TRANSFER ROUTINE IS FOR WRITING A MESSAGE ON LCD ;CLEAR_SCREEN ROUTINE IS FOR CLEARING THE SCREEN ;ADDRESS ROUTINE IS FOR LOADING ADDRESS IN DDRAM ;OTHER LCD ROUTINES ARE SAME WITH NAMES ;FOR EXAMPLE ;MOV A,#80H ;LCALL ADDRESS ;MOV A,#'S' ;LCALL WRITE_ON ;OR ;MOV A,#0C0H ;LCALL ADDRESS ;MOV DPTR,#WORD ;LCALL TRANSFER ;OR ;MOV A,#0C0H ;LCALL ADDRESS ;LCALL CURSOR_BLINK ;************** ;KEYPAD ROUTIN* ;************** ;START ROUTNE IS FOR SCANNING KEYPAD ;FOR EXAMPLE ;LCALL START ;CJNE A,#1,COMPARE1 ;ACC IS INCLUDED THE RETURNED CODE FROM START ROUTINE ;MEANS THAT IF KEY 1 IS PRESSED THEN .... ;1 2 3 A >>> 1 2 3 15 15=0FH ;4 5 6 B >>> 4 5 6 31 31=1FH ;7 8 9 C >>> 7 8 9 47 47=2FH ;D 0 E F >>> 63 0 79 95 ....... ;RELKEY ROUTINE IS WAITING LOOP UNTIL ALL KEYS IS RELEASED. ;SEE LOOK UP TABLE INITIALIZE: SETB LCD_EN CLR LCD_RW CLR LCD_RS MOV P1,#00110000B CLR LCD_EN LCALL DELAY1 SETB LCD_EN CLR LCD_RW CLR LCD_RS MOV P1,#00110000B CLR LCD_EN LCALL DELAY1 SETB LCD_EN CLR LCD_RW CLR LCD_RS MOV P1,#00110000B CLR LCD_EN LCALL DELAY1 SETB LCD_EN CLR LCD_RW CLR LCD_RS MOV P1,#00111000B CLR LCD_EN LCALL DELAY1 SETB LCD_EN CLR LCD_RW CLR LCD_RS MOV P1,#00001100B CLR LCD_EN LCALL DELAY1 SETB LCD_EN CLR LCD_RW CLR LCD_RS MOV P1,#00000110B CLR LCD_EN LCALL DELAY1 RET CURSOR_BLINK: MOV A,#0FH LCALL COMMAND RET CURSOR_OFF: MOV A,#0CH LCALL COMMAND RET CURSOR_CUSTOM: MOV A,#0C0H LCALL COMMAND RET SHIFT_LEFT_SCREEN: MOV A,#18H LCALL COMMAND RET SHIFT_RIGHT_SCREEN: MOV A,#1CH LCALL COMMAND RET COMMAND: MOV P1,A SETB LCD_EN CLR LCD_RW CLR LCD_RS LCALL DELAY0 CLR LCD_EN LCALL DELAY0 RET CLEAR_SCREEN: SETB LCD_EN CLR LCD_RS CLR LCD_RW MOV P1,#00000001B LCALL DELAY0 CLR LCD_EN LCALL DELAY0 RET ADDRESS: SETB LCD_EN CLR LCD_RW CLR LCD_RS MOV P1,A LCALL DELAY0 CLR LCD_EN LCALL DELAY0 RET WRITE_ON: MOV P1,A SETB LCD_EN CLR LCD_RW SETB LCD_RS LCALL DELAY0 CLR LCD_EN LCALL DELAY0 LCALL DELAY0 RET TRANSFER: CLR A MOVC A,@A+DPTR INC DPTR CJNE A,#0FFH,TRANS LJMP EXIT3 TRANS: MOV P1,A LCALL WRITE_ON LJMP TRANSFER EXIT3: RET START: LCALL RELKEY LCALL START0 RET START0: SUB_0: MOV R3,#04H MOV R2,#0FEH MOV R4,#00H SUB_1: MOV A,R2 MOV P0,A LCALL DELAY2 MOV A,P0 ANL A,#0F0H CJNE A,#0F0H,SUB_2 INC R4 MOV A,R2 RL A MOV R2,A DJNZ R3,SUB_1 LJMP SUB_0 SUB_2: CJNE A,#0E0H,SUB_3 MOV R6,#00H LJMP SUB_7 SUB_3: CJNE A,#0D0H,SUB_5 SUB_4: MOV R6,#01H LJMP SUB_7 SUB_5: CJNE A,#0B0H,SUB_6 MOV R6,#02H LJMP SUB_7 SUB_6: CJNE A,#70H,SUB_01 MOV R6,#03H SUB_7: MOV A,R4 MOV DPTR,#INTIGER MOV B,#4 MUL AB ADD A,R6 MOVC A,@A+DPTR MOV DYTA,A MOV A,DYTA SUB_01: RET RELKEY: CLR LCD_EN MOV DYTA,A L_0438: MOV P0,#0F0H LCALL DELAY0 MOV A,P0 ANL A,#0F0H CJNE A,#0F0H,L_0438 MOV A,DYTA RET ;**************************************** ;**************************************** ;**************************************** ;**************************************** ;**************************************** DELAY0: PUSH 7 MOV R7,#1 SUB_DELAY: MOV TMOD,#00000001B MOV TH0,#0FCH MOV TL0,#00H SETB TR0 TF0?: JNB TF0,TF0? CLR TR0 CLR TF0 DJNZ R7,SUB_DELAY POP 7 RET DELAY1: PUSH 7 MOV R7,#1 SUB_DELAY1Z: MOV TMOD,#00000001B MOV TH0,#0A0H MOV TL0,#00H SETB TR0 TF0??: JNB TF0,TF0?? CLR TR0 CLR TF0 DJNZ R7,SUB_DELAY1Z POP 7 RET DELAY2: PUSH 7 MOV R7,#1 SUB_DELAY1B: MOV TMOD,#00000001B MOV TH0,#0D5H MOV TL0,#68H SETB TR0 TF0??????: JNB TF0,TF0?????? CLR TR0 CLR TF0 DJNZ R7,SUB_DELAY1B POP 7 RET INTIGER: DB 1,2,3,15,4,5,6,31,7,8,9,47,63,0,79,95 END