Professional Documents
Culture Documents
;check user ID
check0: mov wrong,#00h
check1: movc dptr,#msg5 ;enter user ID
mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,n2
mov b,n4
mov var,#01h
mov start,#20h
mov counter,temp
;check user Id
check2: cjne a,@start,loop1
inc start
cjne b,@start,loop2
inc start
jmp password_check
loop1: inc start
loop2: inc start
inc start
inc start
inc var
inc var
inc var
inc var
cjne var,counter,check2
movc dptr,#msg6 ;wrong Id
mov temp1,dpl
mov temp2,dph
acall lcdmodule
inc wrong
cjne wrong,#03h,check1
; alert
;PASSWORD CHECKING
password_check: mov wrong,#00h
mov temp,start
check3: mov start,temp
movc dptr,#msg8 ;enter Password
mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,n2
mov b,n4
;check password
check4: cjne a,@start,loop3
inc start
cjne b,@start,loop3
jmp open
loop3:
movc dptr,#msg9 ;wrong password
mov temp1,dpl
mov temp2,dph
acall lcdmodule
inc wrong
cjne wrong,#03h,check3
; alert
;*******************************************************************
; THIS ROUTINE READS A BYTE OF DATA FROM EEPROM
; From EEPROM current address pointer.
; Returns the data byte in R1
;*******************************************************************
CREAD: MOV A,#RDCMD ;LOAD READ COMMAND
CALL OUTS ;SEND IT
CALL IN ;READ DATA
MOV R1,A ;STORE DATA
CALL STOP ;SEND STOP CONDITION
RET
;**********************************************************************
; THIS ROUTINE READS IN A BYTE FROM THE EEPROM
; and stores it in the accumulator
;**********************************************************************
IN: MOV R2,#8 ;LOOP COUNT
SETB SDA ;SET DATA BIT HIGH FOR INPUT
INLP: CLR SCL ;CLOCK LOW
NOP ;NOTE 1
NOP
NOP
NOP ;NOTE 1
NOP
NOP
NOP
SETB SCL ;CLOCK HIGH
CLR C ;CLEAR CARRY
JNB SDA,INL1 ;JUMP IF DATA = 0
CPL C ;SET CARRY IF DATA = 1
INL1: RLC A ;ROTATE DATA INTO ACCUMULATOR
DJNZ R2,INLP ;DECREMENT COUNTER
CLR SCL ;CLOCK LOW
RET
;*************LCDMODULE@P1***********************************
lcdmodule: mov a,#01h
acall command
movc dptr,#mycom
clr a
cc: movc a,@a+dptr
acall command
acall delay1
jz send_data
inc dptr
sjmp cc
send_data:
dd: clr a
mov dpl,temp1
mov dph,temp2
dd1: movc a,@a+dptr
acall data_write
acall delay1
inc dptr
jz again
clr a
sjmp dd1
again: ret
command: mov p1,a
clr p2.0
clr p2.1
setb p2.2
acall delay1
clr p2.2
ret
data_write:
mov p1,a
setb p2.0
clr p2.1
setb p2.2
acall delay1
clr p2.2
ret
delay1: nop
nop
ret
;***************LCDEND******************************************
;**************KEYBOARD@P0************************************
keyboard: MOV p0,#0ffH
SETB p0.4
SETB p0.5
SETB p0.6
SETB p0.7
CLR p0.0
CLR p0.1
CLR p0.2
CLR p0.3
mov digit4,#01h
k1: cjne digit4,#05h,proceed
ljmp G4
proceed:
MOV p0,#0ffH
SETB p0.4
SETB p0.5
SETB p0.6
setb p0.7
CLR p0.0
CLR p0.1
CLR p0.2
CLR p0.3
mov a,p0
anl a,#11110000b
cjne a,#11110000b,k1
k2: MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,OVER
SJMP k2
OVER: MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,OVER1
SJMP k2
OVER1: MOV A,p0
ORL A,#11111111B
MOV p0,A
CLR p0.0
MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,row0
MOV A,p0
ORL A,#11111111B
MOV p0,A
CLR p0.1
MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,row1
MOV A,p0
ORL A,#11111111B
MOV p0,A
CLR p0.2
MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,row2
MOV A,p0
ORL A,#11111111B
MOV p0,A
CLR p0.3
MOV A,p0
ANL A,#11110000B
CJNE A,#11110000B,row3
row0: movc dptr,#kcode0
sjmp find
row1: movc dptr,#kcode1
sjmp find
row2: movc dptr,#kcode2
sjmp find
row3: movc dptr,#kcode3
sjmp find
find: rlc a
jnc match
inc dptr
sjmp find
match: clr a
movc a,@a+dptr
mov r00,a
CJNE digit4,#01H,G1
INC digit4
mov r44,a
ljmp dd5
G1: CJNE digit4,#02H,G2
INC digit4
MOV a,r00
mov n2,a
ljmp dd5
G2: CJNE digit4,#03H,G3
INC digit4
MOV a,r00
mov r66,a
ljmp dd5
G3: CJNE digit4,#04H,G4
INC digit4
MOV a,r00
mov n4,a
ljmp dd5
G4:
MOV A,r44
subb a,#30h
SWAP A
mov r44,a
mov a,n2
subb a,#30h
mov n2,a
mov a,r44
ORL A,n2
MOV n2,A
;HIGHER DIGITSS IN n2
MOV A,r66
subb a,#30h
swap a
mov r66,a
mov a,n4
subb a,#30h
mov n4,a
mov a,r66
ORL A,n4
MOV n4,A ;LOWER DISITS IN n4
ret
;************************keyboared ends********************************
;************************digit display********************
dd5: clr a
mov a,#'*'
acall dat5
acall delay5
ljmp k1
dat5: mov p1,a
setb p2.0 ;data register is selected
clr p2.1
setb p2.2
acall delay5
clr p2.2
ret
delay5: mov r1,#03h
here5: djnz r1,here5
ret
;***************************************************
; ROUTine To Add User
;***************************************************
org 0003h
mov flag,#00h
init: movc dptr,#msg2 ;enter admin id
mov temp1,dpl
mov temp2,dph
acall lcdmodule
acall keyboard
mov a,#RDCMD
acall OUTS
mov a,#01h
acall OUT
acall CREAD
cjne a,n2,return1
mov a,#02h
acall OUT
acall CREAD ;a=34
cjne a,n4,return1
org 0b00h
kcode3: db 'c','0','=','/'
kcode2: db '1','2','3','*'
kcode1: db '4','5','6','-'
kcode0: db '7','8','9','#'
org 0f50h
mycom : db 38h,0eh,01h,06h,0
org 0f20h
msg1: db "wait please...",0
org 0d90h
msg2: db "enter admin id",0
org 0d50h
msg3: db "enter admin password",0
org 0d20h
msg4: db "password saved",0
org 0c90h
msg5: db "enter user ID",0
org 0c60h
msg6: db "wrong ID",0
org 0c20h
msg7: db "you are debarred to enter",0
org 0c00h
msg8: db "enter password",0
org 0b90h
msg9: db"WRONG PASSWORD",0
org 0b50h
msg10: db "Welcome",0
end