Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
06/04/04 14:33
Read: times


 
#71762 - RE: multiple key press
Responding to: ???'s previous message
Try this


;4*4 Matrix Keyboard.
;Rows Connected To P0.0-P0.3 & Columns To p0.4, p0.5,P0.6.



READKEYBOARD :

INITKEYCHECK : ;Ensure that no key is pressed initially.

MOV P0,#0FFH ;Make P0 output port.

CLR P0.0 ;Ground all the rows.
CLR P0.1
CLR P0.2
CLR P0.3

JNB P0.4,INITKEYCHECK ;Checking columns to ensure no key pressed.
JNB P0.5,INITKEYCHECK
JNB P0.6,INITKEYCHECK
JNB P0.7,INITKEYCHECK

CHECKKEYPRESSED : ;Check if a key is pressed else stay in loop.

MOV R3,#2 ;20mS Debounce delay.
ACALL DELAY

JNB P0.4,ENSUREKEYPRESSED
JNB P0.5,ENSUREKEYPRESSED
JNB P0.6,ENSUREKEYPRESSED
JNB P0.7,ENSUREKEYPRESSED

SJMP CHECKKEYPRESSED


ENSUREKEYPRESSED : ;Ensure that a key is pressed.

MOV R3,#2 ;20mS Debouce delay.
ACALL DELAY

JNB P0.4,FINDROW
JNB P0.5,FINDROW
JNB P0.6,FINDROW
JNB P0.7,FINDROW

SJMP CHECKKEYPRESSED

FINDROW : ;Determine row in which key is pressed.

MOV P0,#0FFH
CLR P0.0 ;Ground rows one by one and check all cols.

JNB P0.4,ROW_0 ;Key pressed in row 0.
JNB P0.5,ROW_0
JNB P0.6,ROW_0
JNB P0.7,ROW_0

MOV P0,#0FFH
CLR P0.1

JNB P0.4,ROW_1 ;Key pressed in row 1.
JNB P0.5,ROW_1
JNB P0.6,ROW_1
JNB P0.7,ROW_1

MOV P0,#0FFH
CLR P0.2

JNB P0.4,ROW_2 ;Key pressed in row 2.
JNB P0.5,ROW_2
JNB P0.6,ROW_2
JNB P0.7,ROW_2

MOV P0,#0FFH
CLR P0.3

JNB P0.4,ROW_3 ;Key pressed in row 3.
JNB P0.5,ROW_3
JNB P0.6,ROW_3
JNB P0.7,ROW_3

LJMP CHECKKEYPRESSED ;No key pressed go back.

ROW_0 :
MOV DPTR,#KCODE0 ;Load data pointer with appropriate
SJMP FINDKEY ;address of scan codes for each row.

ROW_1 :
MOV DPTR,#KCODE1
SJMP FINDKEY

ROW_2 :
MOV DPTR,#KCODE2
SJMP FINDKEY

ROW_3 :
MOV DPTR,#KCODE3
SJMP FINDKEY

FINDKEY :

MOV P0,#0FFH

CLR P0.0 ;Ground all rows
CLR P0.1
CLR P0.2
CLR P0.3

JNB P0.4,MATCHKEY ;Check columns one by one.
INC DPTR ;Advance DPTR appropriately so that it points to correct scan code.
JNB P0.5,MATCHKEY
INC DPTR
JNB P0.6,MATCHKEY
INC DPTR
JNB P0.7,MATCHKEY
INC DPTR

LJMP CHECKKEYPRESSED

MATCHKEY : ;Load ACC with appropriate scan code.
CLR A
MOVC A,@A+DPTR
MOV R7,A

RET

KCODE3 : DB '1','2','3','0' ;Scan codes.
KCODE2 : DB '4','5','6','0'
KCODE1 : DB '7','8','9','0'
KCODE0 : DB 'C','0','H','0'

PASSWORD : DB 5,'7','8','5','6','0'

READPASSWORD :
LCALL READKEYBOARD
MOV A,R7
MOV A,#31H
ADD A,R0
MOV R1,A
MOV A,R7
MOV @R1,A
INC 30H
INC R0
MOV A,R7
CJNE A,#'H',READPASSWORD
RET

CHECKPASSWORD :
MOV DPTR,#PASSWORD
MOV R0,#00H
MOV A,R0
MOVC A,@A+DPTR
MOV B,30H
CJNE A,B, MAINLOOP
MOV R4,#30H
MOV R2,A
CONTINUECHECK :
INC R0
MOV A,R0
MOVC A,@A+DPTR
PUSH ACC
MOV A,R0
ADD A,R4
MOV R1,A
POP ACC
MOV B,@R1
PUSH ACC
MOV A,B
POP ACC
CJNE A,B,MAINLOOP
DJNZ R2,CONTINUECHECK
PASSWORDOK:
CLR P2.3
MOV R3,#0FFH
LCALL DELAY
SETB P2.3
LJMP MAINLOOP

DELAY :
MOV TMOD,#01H
MOV TL0,#0FFH
MOV TH0,#0DBH
SETB TR0

DELAYLOOP :
JNB TF0,DELAYLOOP
CLR TR0
CLR TF0
DJNZ R3,DELAY
RET






List of 8 messages in thread
TopicAuthorDate
multiple key press            01/01/70 00:00      
   RE: multiple key press            01/01/70 00:00      
   RE: multiple key press            01/01/70 00:00      
   What do you mean?            01/01/70 00:00      
   RE: multiple key press            01/01/70 00:00      
      RE: multiple key press            01/01/70 00:00      
         RE: multiple key press            01/01/70 00:00      
   RE: multiple key press            01/01/70 00:00      

Back to Subject List