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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/04/07 06:41
Read: times


 
#134234 - The Whole Code sir :-)
Responding to: ???'s previous message
Well sir its the full program but i think its not fully commented ... oops

		ORG 0000H
		LJMP MAIN
		ORG 0030H
		X1 EQU P1.7
		X2 EQU P1.6
		X3 EQU P1.5
		X4 EQU P1.4
		Y1 EQU P1.3
		Y2 EQU P1.2
		Y3 EQU P1.1
		Y4 EQU P1.0
MAIN:		MOV R5,#0
		MOV R6,#0
		MOV R4,#0
		CLR P3.7
		SETB P3.5
		MOV TMOD,#020H
		MOV TH1,#0F3H
		MOV SCON,#050H
		MOV DPTR,#MYDATA
		SETB TR1
		CLR TI
LOOP:		CLR A
		MOVC A,@A+DPTR
		JZ START
		ACALL SEND
		INC DPTR
		SJMP LOOP
START:		MOV R7,#0
		MOV R1,#030H
AGAIN:		CJNE R7,#4,GO_ON
		LCALL TEST_RES
GO_ON:		INC R7
		LCALL SCANNING
		MOV A,B
		SETB P3.7
		MOV @R1,A
		INC R1
		SJMP AGAIN
TEST_RES:	MOV R1,#030H
		CJNE @R1,#'A',WRONG
		INC R1
		CJNE @R1,#'5',WRONG
		INC R1
		CJNE @R1,#'1',WRONG
		INC R1
		CJNE @R1,#'F',WRONG
		CLR P3.7
		CLR P3.5
		MOV A,#'G'
		LCALL SEND
		SJMP START
		RET
WRONG:		MOV A,#'W'
		CLR P3.7
		SETB P3.5
		LCALL SEND
		SJMP START
SCANNING:	CLR A			;STARTING SCANNIG THE KEYS
		CLR X1			;DOING NECCASRY THINGS THAT ALL ROWS = 0
		CLR X2
		CLR X3
		CLR X4
		SETB Y1			;ALL COULUMNS = 1	
		SETB Y2
		SETB Y3
		SETB Y4
		MOV A,P1		;TAKING THE VALUE OF THE COULUMNS TO ACCUMULATOR
		ANL A,#00001111B	;DONT EFFECT THE UNUSED BITS OF THE COULUMNS PORT
TXT:		CJNE A,#00Fh,FIRST	;IF ANY KEY PRESSED THEN JUMP TO "FIRST"
		MOV A,P1
		ANL A,#00001111B
		SJMP TXT
FIRST:		LCALL DELAY		;DELAY FOR 30-MILI SECONDS
		MOV A,P1		
		ANL A,#00001111B
TXT2:		CJNE A,#00Fh,SECOND	;IF ANY KEY PRESSED THEN JUMP TO "SECOND"
		MOV A,P1
		ANL A,#00001111B
		SJMP TXT2
SECOND:		LCALL DELAY		;DELAY FOR 30-MILI SECONDS
		CLR A
ROWS:		SETB X1			;CHECKING EVERY ROW BY MAKING IT "0"	
		SETB X2
		SETB X3
		CLR X4			;FIRST ROW=0
		MOV A,P1
		ANL A,#00001111B
		CJNE A,#00Fh,R1_H	;IF FIRST ROW CONTAINS THE KEY PRESSED THEN JUMP TO RI_H
		SETB X1				  
		SETB X2
		CLR X3
		SETB X4
		MOV A,P1
		ANL A,#00001111B
		CJNE A,#00Fh,R2_H	;IF FIRST ROW CONTAINS THE KEY PRESSED THEN JUMP TO R2_H
		SETB X1			
		CLR X2
		SETB X3
		SETB X4
		MOV A,P1
		ANL A,#00001111B
		CJNE A,#00Fh,R3_H	;IF FIRST ROW CONTAINS THE KEY PRESSED THEN JUMP TO R3_H
		CLR X1			
		SETB X2
		SETB X3
		SETB X4
		MOV A,P1
		ANL A,#00001111B
		CJNE A,#00Fh,R4_H	;IF FIRST ROW CONTAINS THE KEY PRESSED THEN JUMP TO R3_H
		SJMP ROWS		;IF NOT FOUND DO IT AGAIN
R1_H:		MOV DPTR,#ROW1		;SET THE DPTR TO ROW1
		SJMP COLS		;JUMP TO COLS
R2_H:		MOV DPTR,#ROW2		;SET THE DPTR TO ROW1
		SJMP COLS		;JUMP TO COLS
R3_H:		MOV DPTR,#ROW3		;SET THE DPTR TO ROW1
		SJMP COLS		;JUMP TO COLS
R4_H:		MOV DPTR,#ROW4		;SET THE DPTR TO ROW1
		SJMP COLS		;JUMP TO COLS
COLS:		MOV R0,#0
C1:		RRC A
		JNC SHOW
		INC R0
		SJMP C1			;IF NOT FOUND DO TI AGAIN
SHOW:		MOV A,R0
		MOVC A,@A+DPTR		;GET THE VALUE BY USING THE DISTANCE ADDRESSING
		LCALL SEND		;SEND THE PRESSED CHAR TO UART
		MOV B,A
TILT:		CJNE R4,#13,DO_TILT	;MOST IMPORTANT LABEL TO BE SEE......
		SJMP NO_KEY
DO_TILT:	MOV A,P1
		ANL A,#00001111B
		CJNE A,#00001111B,DEB_CHE
		RET
DEB_CHE:	LCALL DELAY		;DELAY ROUTINE FOR 30-MILI SECONDS
		CJNE A,#00001111B,KEY
KEY:		INC R4
		SJMP TILT
NO_KEY:		MOV R4,#0
		RET			;RETURNING THE SCANNING FUNCIONS.
DELAY:		MOV R5,#30
AGN:		MOV R6,#250
HRE:		NOP
		NOP
		DJNZ R6,HRE
		DJNZ R5,AGN
		RET
SEND:		MOV SBUF,A
TST:		JNB TI,TST
		CLR TI
		RET
		ORG 250H
MYDATA: 	DB "DD'S SECURITY TESTING",13,10,0
ROW1:		DB	'3','2','1','0'
ROW2:		DB	'7','6','5','4'
ROW3:		DB	'B','A','9','8'
ROW4:		DB	'F','E','D','C'
		END


List of 21 messages in thread
TopicAuthorDate
Is there any better solution of Debouncing?            01/01/70 00:00      
   specify            01/01/70 00:00      
      probably            01/01/70 00:00      
         ultimately            01/01/70 00:00      
            no matter of defines            01/01/70 00:00      
            clear or not?            01/01/70 00:00      
            X1,X2,X3 and X4 are Output of Keypad            01/01/70 00:00      
               The Whole Code sir :-)            01/01/70 00:00      
               how to            01/01/70 00:00      
                  WoW what a complete guide...            01/01/70 00:00      
                     please explain            01/01/70 00:00      
                     debouncing algorithms            01/01/70 00:00      
                        Well sir thanks for your help i have got it....            01/01/70 00:00      
   my way            01/01/70 00:00      
   better? who knows            01/01/70 00:00      
   "help me"            01/01/70 00:00      
      first, second, third            01/01/70 00:00      

Back to Subject List