;******************************************************************************* ; CHARACTER CONTROLLER ;******************************************************************************* .SYMBOLS ;******************************************************************************* RS REG P3.0 E REG P3.4 R_W REG P3.7 STP REG P2.0 S_S REG P2.1 BCD EQU 01H CHAR_ADD EQU 7FH ;******************************************************************************* ORG 0H JMP START START: ;******************************************************************************* ; INITIALIZE ;******************************************************************************* INITIAL: CLR E ; MOV A,#00100010B ;INITIAL SETTING ONCE ; CALL COMMAND_4BIT ; ; MOV A,#10000000B ;2 Line ,5*8 Font ; CALL FUNCTION_SET ; MOV R3,#50 ;Set Counter1 = 50 ;DLP12: ; MOV R2,#255 ;Set Counter2 = 255 ;DLP11: ; DJNZ R2,DLP11 ;Waiting 50*256*2 > 4.1 ms ; DJNZ R3,DLP12 ; ; MOV A,#00100010B ;INITIAL SETTING TWICE ; CALL COMMAND_4BIT ; ; MOV A,#10000000B ;2 Line ,5*8 Font ; CALL FUNCTION_SET ; MOV R2,#80 ;Set Counter = 80 ;DLP2: ; DJNZ R2,DLP2 ;Waiting 80*2 > 100us MOV R4,#1 CALL DELAY1 MOV A,#00100010B ;INITIAL SETTING THIRD CALL COMMAND_4BIT ;4bit MOV A,#10000000B ;2 Line ,5*8 Font CALL FUNCTION_SET MOV R2,#80 ;Set Counter = 80 DLP3: DJNZ R2,DLP3 ;Waiting 80*2 > 39us MOV A,#00101000B ;Function Set 0010NF** CALL WRITE_COMMAND ;4bit ,2 Line ,5*8 Font MOV R2,#80 ;Set Counter = 80 DLP4: DJNZ R2,DLP4 ;Waiting 80*2 > 39us MOV A,#00001100B ;Display ON/OFF = 00001DCB CALL WRITE_COMMAND ;Display ON,Cursor&Blink OFF MOV A,#00000110B ;Entry Mode Set = 000001IS CALL WRITE_COMMAND ;Increment & Shift OFF MOV A,#00000010B ;Return Home CALL WRITE_COMMAND MOV A,#00000001B ;Clear Display CALL WRITE_COMMAND ;Write 20H to DDRAM MOV R4,#10 CALL DELAY1 CALL CGRAM ;Setting CGRAM data ;******************************************************************************* ; FULL ON ;******************************************************************************* FULL_ON: MOV A,#10000000B ;Set display data RAM addr=00H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 80 FLLOOP1: MOV A,#02H CALL WRITE_DATA DJNZ R1,FLLOOP1 MOV A,#11000000B ;Set display data RAM addr=40H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 40 FLLOOP2: MOV A,#02H CALL WRITE_DATA DJNZ R1,FLLOOP2 CALL DELAY CALL STP_SC ;******************************************************************************* ; Display 40*2 char Max ;******************************************************************************* SHOW_CHAR: MOV A,#10000000B ;Set display data RAM addr=00H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 80 MOV CHAR_ADD,#41H ;Set character start address SCLOOP1: MOV A,CHAR_ADD CALL WRITE_DATA INC CHAR_ADD DJNZ R1,SCLOOP1 MOV A,#11000000B ;Set display data RAM addr=40H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 40 MOV CHAR_ADD,#41H ;Set character start address SCLOOP2: MOV A,CHAR_ADD CALL WRITE_DATA INC CHAR_ADD DJNZ R1,SCLOOP2 CALL DELAY CALL STP_SC ;******************************************************************************* ; SQUARE ;******************************************************************************* SQUARE: MOV A,#10000000B ;Set display data RAM addr=00H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 40 SQLOOP1: MOV A,#00H ;Font Address CALL WRITE_DATA DJNZ R1,SQLOOP1 MOV A,#11000000B ;Set display data RAM addr=40H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 40 SQLOOP2: MOV A,#00H ;Font Address CALL WRITE_DATA DJNZ R1,SQLOOP2 CALL DELAY CALL STP_SC ;******************************************************************************* ; CROSS DOT ;******************************************************************************* CROSS_DOT: MOV A,#10000000B ;Set display data RAM addr=00H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 40 CDLOOP1: MOV A,#01H ;Font Address CALL WRITE_DATA DJNZ R1,CDLOOP1 MOV A,#11000000B ;Set display data RAM addr=40H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 40 CDLOOP2: MOV A,#01H ;Font Address CALL WRITE_DATA DJNZ R1,CDLOOP2 CALL DELAY CALL STP_SC ;******************************************************************************* ; SHOW FONT ;******************************************************************************* SHOW_FONT: MOV A,#10000000B ;Set display data RAM addr=00H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 40 SFLOOP1: MOV A,#A7H ;Font Address CALL WRITE_DATA DJNZ R1,SFLOOP1 MOV A,#11000000B ;Set display data RAM addr=40H CALL WRITE_COMMAND MOV R1,#40 ;Set counter 40 SFLOOP2: MOV A,#A7H ;Font Address CALL WRITE_DATA DJNZ R1,SFLOOP2 CALL DELAY CALL STP_SC LJMP START ;******************************************************************************* ; SET CG_RAM DATA ;******************************************************************************* CGRAM: MOV A,#01000000B ;SET CG_RAM ADDRESS 000000 CALL WRITE_COMMAND MOV DPTR,#TABLE_1 MOV R7,#24 CGLOOP: MOV A,#0 MOVC A,@A+DPTR CALL WRITE_DATA INC DPTR DJNZ R7,CGLOOP RET ;******************************************************************************* CHK_BUSY: MOV P1,#0FFH ;SET PORT1=INPUT CLR RS ;SET IR MODE RS=0 SETB R_W ;SET READ MODE R/W=1 SETB E ;ENABLE LCM MOV C,P1.7 ;CHECK BUSY FLAGE(BIT7) CLR E JC CHK_BUSY RET ;******************************************************************************* DELAY: CALL CBCD MOV R4,BCD LOPC: MOV R5,#2FH LOPB: MOV R6,#0FFH LOPA: DJNZ R6,LOPA DJNZ R5,LOPB DJNZ R4,LOPC RET ;******************************************************************************* DELAY1: LOP1: MOV R5,#40 LOP2: MOV R6,#25 LOP3: DJNZ R6,LOP3 DJNZ R5,LOP2 DJNZ R4,LOP1 RET ;******************************************************************************* DELAYS: MOV R5,#4 LOP1S: MOV R6,#25 LOP2S: DJNZ R6,LOP2S DJNZ R5,LOP1S RET ;******************************************************************************* COMMAND_4BIT: CLR RS CLR R_W MOV P1,A SETB E NOP CLR E SWAP A MOV P1,A SETB E NOP CLR E RET ;******************************************************************************* FUNCTION_SET: CLR RS CLR R_W MOV P1,A SETB E NOP CLR E RET ;******************************************************************************* WRITE_COMMAND: CALL DELAYS ; CALL CHK_BUSY CLR RS CLR R_W MOV P1,A SETB E NOP CLR E SWAP A MOV P1,A SETB E NOP CLR E RET ;******************************************************************************* WRITE_DATA: CALL DELAYS ; CALL CHK_BUSY SETB RS CLR R_W MOV P1,A SETB E NOP CLR E SWAP A MOV P1,A SETB E NOP CLR E RET ;******************************************************************************* READ_DATA: CALL DELAYS ; CALL CHK_BUSY SETB RS SETB R_W MOV P1,A SETB E NOP CLR E SWAP A MOV P1,A SETB E NOP CLR E RET ;******************************************************************************* ; Procedure of step by step and scan ;******************************************************************************* STP_SC: MOV C,S_S JC STEP RET STEP: MOV C,STP MOV R5,#0FH LOPE: MOV R6,#0FFH LOPD: DJNZ R6,LOPD DJNZ R5,LOPE JNB S_S,LOUT JNC STEP LOUT: RET ;******************************************************************************* ; BCD DELAY TIME SELECT ;******************************************************************************* CBCD: MOV P0,#00H PUSH A MOV A,P0 ANL A,#0FH RL A RL A MOV BCD,A POP A RET ;******************************************************************************* ; DISPLAY DATA ;******************************************************************************* TABLE_1: DB 1FH,11H,11H,11H,11H,11H,11H,1FH ;00H DB 0AH,15H,0AH,15H,0AH,15H,0AH,15H ;01H DB FFH,FFH,FFH,FFH,FFH,FFH,FFH,FFH ;01H END