RS EQU P3.3
RW EQU P3.4
EN EQU P3.5
DAT EQU P1
BUSY BIT P1.7
KCLK EQU P3.0
KDAT EQU P3.1
ORG 0H
SJMP MAIN
ORG 30H
MAIN:
CALL INIT
MOV DPTR,#MES1
CALL MESSDISP
MOV A,#0C0H
CALL COMNWRT
AGAIN:
CALL KBDATA
CJNE A,#0F0H,AGAIN
CALL KBDATA
CALL KBCOMPARE
JMP AGAIN
;===================================================================================================;
;------------------------------KBFUNCTIONS START--------------------------------------------------------;
;===================================================================================================;
KBDATA: ; PROTOCOL TO GET DATA FROM KEYBOARD
MOV R3,#8
MOV R7,#0
KP1:MOV C,KCLK
JC KP1
K4:MOV C,KCLK
JNC K4
K5:MOV C,KCLK
JC K5
MOV C,KDAT
MOV A,R7
RRC A
MOV R7,A
K6:MOV C,KCLK
JNC K6
DJNZ R3,K5
MOV R2,A
MOV R4,#255
DJNZ R4,$
RET
KBCOMPARE: ; SUBROUTINE TO CONVERT KEYBOARD DATA TO ASCII
CJNE A,#16H,C1
MOV A,#31H
CALL DATAWRT
RET
C1: CJNE A,#1EH,C2
MOV A,#32H
CALL DATAWRT
RET
C2: CJNE A,#26H,C3
MOV A,#33H
CALL DATAWRT
RET
C3: CJNE A,#25H,C4
MOV A,#34H
CALL DATAWRT
RET
C4: CJNE A,#2EH,C5
MOV A,#35H
CALL DATAWRT
RET
C5: CJNE A,#36H,C6
MOV A,#36H
CALL DATAWRT
RET
C6: CJNE A,#3DH,C7
MOV A,#37H
CALL DATAWRT
RET
C7: CJNE A,#3EH,C8
MOV A,#38H
CALL DATAWRT
RET
C8: CJNE A,#46H,C9
MOV A,#39H
CALL DATAWRT
RET
C9: CJNE A,#45H,C10
MOV A,#30H
CALL DATAWRT
RET
C10: CJNE A,#76H,W1;ESC
MOV A,#0F1H
RET
W1: MOV A,#0F6H;NO KEY
RET
GETKBDATA:
CALL KBDATA
CJNE A,#0F0H,GETKBDATA
CALL KBDATA
CALL KBCOMPARE
RET
INIT:
CLR RW
MOV A,#38H ;LCD 2 LINES
CALL COMNWRT
MOV A,#01H ;CLEAR DISPLAY
CALL COMNWRT
MOV A,#0EH ;DISPLAY ON CURSOR ON
CALL COMNWRT
MOV A,#6H ;SHIFT CURSOR RIGHT
CALL COMNWRT
MOV A,#80H ;SEND FIRST LINE ADDRESS
CALL COMNWRT
;MOV A,#38H
;CALL DATAWRT
RET
COMNWRT:
CALL READY
MOV DAT,A
CLR RS
SETB EN
CLR EN
RET
DATAWRT:
CALL READY
MOV DAT,A
SETB RS
SETB EN
CLR EN
RET
READY:
SETB BUSY
SETB RW
CLR RS
CH1:
CLR EN
NOP
NOP
SETB EN
JB BUSY,CH1
CLR RW
RET
MESSDISP:
D1:CLR A
MOVC A,@A+DPTR
CJNE A,#0FFH,CONT
RET
CONT:
CALL DATAWRT
INC DPTR
SJMP D1
MES1: DB "WELOVE8051.COM",255
END