??? 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 |
Topic | Author | Date |
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 |