;;;;;;;;;;;;;;;;;;;;;;HARDWARE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; PROCESSOR : AT-89C52/89S8252/89C55/89C55WD ; CRYSTAL : 22.1184MHz ; LCD : 20X4 BACKLIT CHARACTER LCD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;CGRAM RAM ADDRESS FOR CHARACTER DISPLAY;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;*||01|02|03|04|05|06|07|08|09|00|01|02|03|04|05|06|07|08|09|00|*;;; ;;*||===========================================================||*;; ;;1||80|81|82|83|84|85|86|87|88|89|8A|8B|8C|8D|8E|8F|90|91|92|93||1;; ;;2||C0|C1|C2|C3|C4|C5|C6|C7|C8|C9|CA|CB|CC|CD|CE|CF|D0|D1|D2|D3||2;; ;;3||94|95|96|97|98|99|9A|9B|9C|9D|9E|9F|A0|A1|A2|A3|A4|A5|A6|A7||3;; ;;4||D4|D5|D6|D7|D8|D9|DA|DB|DC|DD|DE|DF|D0|D1|D2|D3|D4|D5|D6|D7||4;; ;;*||===========================================================||*;; ;;*||01|02|03|04|05|06|07|08|09|00|01|02|03|04|05|06|07|08|09|00||*;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;DIRECTIVES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCDPORT EQU P0 ;DATA PORT FOR LCD LCDRS EQU P1.0 ;REGISTER SELECT PIN FOR LCD (0-COMMAND, 1-DATA) LCDRW EQU P1.1 ;READ/WRITE PIN FOR LCD (1>0-DISPLAY, 0>1-READ) LCDEN EQU P1.2 ;ENABLE PIN FOR LCD (0-WRITE, 1-READ) LCDLINENO EQU 03H ;LOCATION FOR CURRENT LCD LINE POINTER ;;;;;;;;;;;;;;;;;;;;;;MAIN CODE;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 0000H LJMP START ;;;;;;;*12345678901234567890*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MENU00: DB '$+++++++++++++++++$|' DB '$UTILITY SOFTWARE$|' DB '$D&D:MKM Sc-C, CSI$|' DB '$+++++++++++++++++$!' ;;;;;;;*12345678901234567890*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; START: MOV SP,#020H LCALL INITIALIZELCD MOV LCDLINENO,#'1' MOV DPTR,#(MENU00) LCALL DISPMENU ;DISLAYING MAIN MENU WAIT: JMP WAIT ;;;;;;;;;;;;;;;;;;;;;;;;;;SUBROUTINES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DISPMENU: MOV A,#00H MOVC A,@A+DPTR LCALL LCDDATA INC DPTR MOV A,#00H MOVC A,@A+DPTR CJNE A,#'!',CHKCHAR4END RET CHKCHAR4END: CJNE A,#'|',DISPMENU INC LCDLINENO LCALL NEXTLCDLINE INC DPTR JMP DISPMENU ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NEXTLCDLINE: CJNE R3,#'2',CHK4LCDLINE3 LCALL LCD2LINE RET CHK4LCDLINE3: CJNE R3,#'3',CHK4LCDLINE4 LCALL LCD3LINE RET CHK4LCDLINE4: CJNE R3,#'4',CHK4LCDLINE1 LCALL LCD4LINE RET CHK4LCDLINE1: LCALL LCD1LINE RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INITIALIZELCD: SETB LCDEN ;ENABLE LCD CLR LCDRW ;WRITING MODE SETB LCDRS ;DATA MODE ;;;;;;;;;;;;;;;;;;;; ;SETTING OPERATING CHARACTERISTICS OF THE LCD MOV A,#01H ;CLEAR THE DISPLAY LCALL LCDCOMMAND MOV A,#06H ;ENTRY MODE INCREMENT WITH EACH WRITE LCALL LCDCOMMAND MOV A,#03CH LCALL LCDCOMMAND ;8 BIT DATA,5X10 FONT,2 LINE MOV A,#0FH LCALL LCDCOMMAND ;DISPLAY ON,CURSOR BLINK OFF,CURSOR UNDERLINE MOV A,#02H ;PUT THE CURSOR HOME LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLEARDISPLAY: MOV A,#01H LCALL LCDCOMMAND ;CLEAR THE DISPLAY RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCD1LINE: MOV A,#02H ;PUT THE CURSOR HOME LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCD2LINE: MOV A,#0C0H LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCD3LINE: MOV A,#094H LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCD4LINE: MOV A,#0D4H LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCDCOMMAND: CLR LCDRS ;SELECTING COMMAND MODE MOV LCDPORT,A ;WRITING ONTO PORT SETB LCDEN ;DOING 1 TO 0 TRANSITION FOR ENABLE PIN NOP CLR LCDEN LCALL LCDSTATUS RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCDDATA: SETB LCDRS ;SELECTING DATA MODE MOV LCDPORT,A ;WRITING ONTO PORT SETB LCDEN ;DOING 1 TO 0 TRANSITION FOR ENABLE PIN CLR LCDEN LCALL LCDSTATUS RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCDSTATUS: MOV LCDPORT,#0FFH SETB LCDRW ;(1-READING MODE, 0-WRITING MODE) CLR LCDRS SETB LCDEN ;DOING 1 TO 0 TRANSITION FOR ENABLE PIN MOV A,LCDPORT ;READ LCD STATUS(MSBIT:1-BUSY, 0-READY) JB ACC.7,LCDSTATUS CLR LCDEN ;DOING 1 TO 0 TRANSITION FOR ENABLE PIN CLR LCDRW ;(1-READING MODE, 0-WRITING MODE) RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END