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

Back to Subject List

Thread Closed

???
08/22/10 03:46
Read: times


 
#178203 - specific quetion now!
Responding to: ???'s previous message
will this code work for my project??

This is "THE DIGITAL CODE LOCK" Program which takes a 4-digit password
;from the user and compares it with the already saved password.
;If the password entered is correct then the LED GLOWS!!!!
;$ THE DOOR OPENS!!!!
;Otherwise if the password entered is incorrect then the message - "INCORRECT CODE"
;is displayed on the screen of the LCD.
;PIN P0.7 an LED is attached which glows as the lock opens!!!

MAIN : CLR P0.6
DB0 EQU P1.0
DB1 EQU P1.1
DB2 EQU P1.2
DB3 EQU P1.3
DB4 EQU P1.4
DB5 EQU P1.5
DB6 EQU P1.6
DB7 EQU P1.7
EN EQU P3.0
RS EQU P3.1
RW EQU P3.2
TEXT EQU P1
ACALL LCD_START
ACALL DELAY_3
ACALL LCD_DISPLAY
ACALL DELAY_3
MOV R1,#0H
MOV R3,#46 ;Use 46 instead of 2 in real program.
MOV TMOD,#10H
MOV TL1,#0H
MOV TH1,#0H
SETB TR1
CLR TF1
ACALL LOOP_START

LOOP_START:DEC R3
MOV TL1,#0H
MOV TH1,#0H
SETB TR1
CLR TF1

LOOP1: ACALL KEY ;Store value of digit at R1
SJMP GOTO

GOTO : JNB P0.1,KEY_DISPLAY

JNB TF1,LOOP1
CLR TF1
;SET TRO
;CALL LOOP_START
INC R3
DJNZ R3,LOOP_START
ACALL EXIT

KEY_DISPLAY:INC R1
MOV A,#1
CLR CY
SUBB A,R1
JZ DISPLAY1
;MOV R2,#46
;ACALL LOOP_START

MOV A,#2
CLR CY
SUBB A,R1
JZ DISPLAY2
;MOV R2,#46
;ACALL LOOP_START

MOV A,#3
CLR CY
SUBB A,R1
JZ DISPLAY3
;MOV R2,#46
;ACALL LOOP_START

MOV A,#4
CLR CY
SUBB A,R1
JZ DISPLAY4

;ACALL EXIT Control of EXIT is done by DISPLAY$

DISPLAY1:CLR P0.6
LCALL INIT_LCD
CLR RS ;PUT CURSOR AT THE STARTING OF THE SECOND LINE
MOV TEXT,#0C0h
SETB EN
CLR EN
LCALL WAIT_LCD
MOV A,R6
LCALL WRITE_TEXT
CJNE R6,#0EEH,DISPLAY22
;JNB P0.6,GOTO1
MOV R3,#46 ;Use 46 instead of 2 in real program.
ACALL LOOP_START
;RET
;GOTO1: CLR P0.6;ACALL LOOP
RET

DISPLAY22:SETB P0.6 ;To check if digit entered is wrong
;ACALL LOOP
MOV R3,#46 ;Use 46 instead of 2 in real program.
ACALL LOOP_START
RET

DISPLAY2:;MOV DPTR,
LCALL INIT_LCD
CLR RS ;PUT CURSOR AT THE STARTING OF THE SECOND LINE
MOV TEXT,#0C1h
SETB EN
CLR EN
LCALL WAIT_LCD
MOV A,R6
LCALL WRITE_TEXT
CJNE R6,#0EEH,DISPLAY33
;ACALL LOOP
;JNB P0.6,GOTO2
MOV R3,#46 ;Use 46 instead of 2 in real program.
ACALL LOOP_START
;RET
;GOTO2: CLR P0.6
RET

DISPLAY33:SETB P0.6
MOV R3,#46 ;Use 46 instead of 2 in real program.
ACALL LOOP_START
;ACALL LOOP
RET

DISPLAY3:LCALL INIT_LCD
CLR RS ;PUT CURSOR AT THE STARTING OF THE SECOND LINE
MOV TEXT,#0C2h
SETB EN
CLR EN
LCALL WAIT_LCD
MOV A,R6
LCALL WRITE_TEXT
CJNE R6,#0EEH,DISPLAY44
;ACALL LOOP
;JNB P0.6,GOTO3
MOV R3,#46 ;Use 46 instead of 2 in real program.
ACALL LOOP_START
RET
;GOTO3: CLR P0.6
; RET

DISPLAY44:SETB P0.6
MOV R3,#46 ;Use 46 instead of 2 in real program.
ACALL LOOP_START
;ACALL LOOP
RET

DISPLAY4:LCALL INIT_LCD
CLR RS ;PUT CURSOR AT THE STARTING OF THE SECOND LINE
MOV TEXT,#0C3h
SETB EN
CLR EN
LCALL WAIT_LCD
MOV A,R6
LCALL WRITE_TEXT
CJNE R6,#0EEH,DISPLAY55
;JNB P0.6,GOTO4
;RET
;GOTO4: CLR P0.6
ACALL CHECK

DISPLAY55:SETB P0.6
ACALL CHECK

CHECK:JNB P0.6,CORRECT
ACALL WRONG

CORRECT:CLR P0.7 ;CODE ENTERED ISCORRECT ....LED GLOWS....LOCK OPENS
LCALL INIT_LCD
LCALL CLEAR_LCD

MOV A,#'C'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'R'
LCALL WRITE_TEXT
MOV A,#'R'
LCALL WRITE_TEXT
MOV A,#'E'
LCALL WRITE_TEXT
MOV A,#'C'
LCALL WRITE_TEXT
MOV A,#'T'
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#'C'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'D'
LCALL WRITE_TEXT
MOV A,#'E'
LCALL WRITE_TEXT

CLR RS ;PUT CURSOR AT THE STARTING OF THE SECOND LINE
MOV TEXT,#0C0h
SETB EN
CLR EN
LCALL WAIT_LCD

LCALL INIT_LCD
MOV A,#'D'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'R'
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'P'
LCALL WRITE_TEXT
MOV A,#'E'
LCALL WRITE_TEXT
MOV A,#'N'
LCALL WRITE_TEXT
MOV A,#'S'
LCALL WRITE_TEXT

ACALL DELAY_3

ACALL EXIT

WRONG:;Code entered is incorrest
LCALL INIT_LCD
LCALL CLEAR_LCD
MOV A,#'I'
LCALL WRITE_TEXT
MOV A,#'N'
LCALL WRITE_TEXT
MOV A,#'C'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'R'
LCALL WRITE_TEXT
MOV A,#'R'
LCALL WRITE_TEXT
MOV A,#'E'
LCALL WRITE_TEXT
MOV A,#'C'
LCALL WRITE_TEXT
MOV A,#'T'
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#'C'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'D'
LCALL WRITE_TEXT
MOV A,#'E'
LCALL WRITE_TEXT

ACALL DELAY_3

ACALL EXIT
RET

LCD_START:LCALL INIT_LCD
LCALL CLEAR_LCD
MOV A,#'D'
LCALL WRITE_TEXT
MOV A,#'I'
LCALL WRITE_TEXT
MOV A,#'G'
LCALL WRITE_TEXT
MOV A,#'I'
LCALL WRITE_TEXT
MOV A,#'T'
LCALL WRITE_TEXT
MOV A,#'A'
LCALL WRITE_TEXT
MOV A,#'L'
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#'L'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'C'
LCALL WRITE_TEXT
MOV A,#'K'
LCALL WRITE_TEXT
RET


LCD_DISPLAY:LCALL INIT_LCD
LCALL CLEAR_LCD
MOV A,#'E'
LCALL WRITE_TEXT
MOV A,#'N'
LCALL WRITE_TEXT
MOV A,#'T'
LCALL WRITE_TEXT
MOV A,#'E'
LCALL WRITE_TEXT
MOV A,#'R'
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#'C'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
MOV A,#'D'
LCALL WRITE_TEXT
MOV A,#'E'
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT
MOV A,#':'
LCALL WRITE_TEXT
MOV A,#' '
LCALL WRITE_TEXT

CLR RS ;PUT CURSOR AT THE STARTING OF THE SECOND LINE
MOV TEXT,#0C0h
SETB EN
CLR EN
LCALL WAIT_LCD

MOV A,#'*'
LCALL WRITE_TEXT
MOV A,#'*'
LCALL WRITE_TEXT
MOV A,#'*'
LCALL WRITE_TEXT
MOV A,#'*'
LCALL WRITE_TEXT
;CLR RS ;PUT CURSOR AT THE STARTING OF THE SECOND LINE
;MOV TEXT,#0CAh
;SETB EN
;CLR EN
;LCALL WAIT_LCD

RET

;CJNE R0,#4H,LOOP
;ACALL CHECK

DELAY_3:MOV R4,#46
;MOV R4,#5 ;This statement is for test only.Correct statement is the previous one.
ACALL DELAY_
RET

DELAY_ :MOV TMOD,#01H
MOV TL0,#0H
MOV TH0,#0H
SETB TR0
CLR TF0
JNB TF0,$
DJNZ R4,DELAY_
RET

INIT_LCD: CLR RS
MOV TEXT,#38h
SETB EN
CLR EN
LCALL WAIT_LCD
CLR RS
MOV TEXT,#0Eh
SETB EN
CLR EN
LCALL WAIT_LCD
CLR RS
MOV TEXT,#06h
SETB EN
CLR EN
LCALL WAIT_LCD
RET

CLEAR_LCD:CLR RS
MOV TEXT,#01h
SETB EN
CLR EN
LCALL WAIT_LCD
RET

WAIT_LCD:CLR EN ;Start LCD command
CLR RS ;It's a command
SETB RW ;It's a read command
MOV TEXT,#0FFh ;Set all pins to FF initially
SETB EN ;Clock out command to LCD
MOV A,TEXT ;Read the return value
;CLR ACC.7 ;TEST Statement Remove for main prog.
JB ACC.7,WAIT_LCD ;If bit 7 high, LCD still busy
CLR EN ;Finish the command
CLR RW ;Turn off RW for future commands
RET

WRITE_TEXT:SETB RS
MOV TEXT,A
SETB EN
CLR EN
LCALL WAIT_LCD
RET

KEY: CLR P0.1
;CLR P0.0
MOV R7,#50 ;It should be 50 instead of 2 in real program.
ACALL SCANKEYPAD
RET

SCANKEYPAD:MOV R0,#07FH
MOV R4,#0H
;MOV R6,R0
SETB P0.1

SCAN:SETB P0.1
MOV A,R0
RL A
MOV R2,P2
MOV R5,P2
MOV R0,A
ANL A,R5
CLR CY
SUBB A,R5
JZ DEBOUNCE
INC R4
CJNE R4,#4,SCAN
ACALL NOKEYPRESSED
RET

DEBOUNCE:DEC R7
CJNE R7,#49,CHK ;It should be 49 instead of 1 for real prog.
SETB P0.0
INC R7
MOV A,R5
MOV R6,A
DJNZ R7,SCANKEYPAD
ACALL KEYPRESSED
RET

CHK: MOV A,R6
CLR cy
SUBB A,R2
JZ SCANKEY
ACALL NOKEYPRESSED
RET

SCANKEY:INC R7
DJNZ R7,SCANKEYPAD
ACALL KEYPRESSED
RET

KEYPRESSED:;MOV P2,R5
CLR P0.1
ACALL EXIT1
RET

NOKEYPRESSED:NOP
CLR P0.2
ACALL EXIT1
RET

EXIT1:NOP
;ACALL GOT0
RET

EXIT:NOP
LCALL INIT_LCD
LCALL CLEAR_LCD
MOV A,#'E'
LCALL WRITE_TEXT
MOV A,#'N'
LCALL WRITE_TEXT
MOV A,#'D'
END

List of 29 messages in thread
TopicAuthorDate
need serious help ! Assignment!            01/01/70 00:00      
   Aside that you should have been working on it...            01/01/70 00:00      
      i m...            01/01/70 00:00      
         Have you done any work at all?            01/01/70 00:00      
   How Long Posted?            01/01/70 00:00      
      Week 11...            01/01/70 00:00      
   a little late to ask for help            01/01/70 00:00      
      kindness            01/01/70 00:00      
         It is a big World            01/01/70 00:00      
   specific quetion now!            01/01/70 00:00      
      What is the intent here....            01/01/70 00:00      
      will this code work for my project??            01/01/70 00:00      
      The code shown....            01/01/70 00:00      
         "doing the work"            01/01/70 00:00      
      Bad aproach            01/01/70 00:00      
         Definitely not worst            01/01/70 00:00      
   Cheats can get found out            01/01/70 00:00      
   Serious help            01/01/70 00:00      
      Sometimes is the teacher...            01/01/70 00:00      
   So, It's the 23rd.            01/01/70 00:00      
      postpone            01/01/70 00:00      
         No help when....            01/01/70 00:00      
         Let me ask you a serious question...            01/01/70 00:00      
         How about learning to read and write?            01/01/70 00:00      
   Common guys, don't feed this troll any longer!            01/01/70 00:00      
      Last laugh            01/01/70 00:00      

Back to Subject List