Skip to content

Fatma2003/digitallock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

digitallock

.include "m32def.inc"

;======================== ; LCD ;======================== .equ LCD_PORT = PORTD .equ LCD_DDR = DDRD .equ RS = 0 .equ E = 1

;======================== ; Keypad ;======================== .equ KPD_PORT = PORTC .equ KPD_DDR = DDRC .equ KPD_PIN = PINC

;======================== ; Registers ;======================== .def temp = r16 .def key = r17 .def count = r18 .def pass1_reg = r19 .def pass2_reg = r20

.org 0x0000 rjmp START

;======================== START: ; LCD setup ldi temp,0xFF out LCD_DDR,temp ldi temp,(1<<RS)|(1<<E) out DDRB,temp ldi temp,0x00 out PORTB,temp

rcall LCD_INIT

; Keypad setup ldi temp,0b01110000 ; PC4-PC6 outputs out KPD_DDR,temp ldi temp,0x0F ; PC0-PC3 inputs pull-up out KPD_PORT,temp

clr count
clr pass1_reg
clr pass2_reg

MAIN_LOOP: rcall GET_KEY cpi key,0xFF breq MAIN_LOOP

WAIT_RELEASE: in temp,KPD_PIN andi temp,0x0F cpi temp,0x0F brne WAIT_RELEASE

inc count
cpi count,1
breq STORE1
cpi count,2
breq STORE2
cpi count,3
breq STORE3
ldi count,0
rjmp MAIN_LOOP

STORE1: mov pass1_reg,key rjmp MAIN_LOOP

STORE2: mov pass2_reg,key rjmp MAIN_LOOP

STORE3: ;======================== ; Compare with 5 users ;========================

; User1: 413 -> Abdelrahman mov temp, pass1_reg cpi temp,'4' brne CHECK_USER2 mov temp, pass2_reg cpi temp,'1' brne CHECK_USER2 cpi key,'3' brne CHECK_USER2 rcall SHOW_USER1 rjmp RESET_INPUT

; User2: 545 -> Mohammed CHECK_USER2: mov temp, pass1_reg cpi temp,'5' brne CHECK_USER3 mov temp, pass2_reg cpi temp,'4' brne CHECK_USER3 cpi key,'5' brne CHECK_USER3 rcall SHOW_USER2 rjmp RESET_INPUT

; User3: 049 -> Noreen CHECK_USER3: mov temp, pass1_reg cpi temp,'0' brne CHECK_USER4 mov temp, pass2_reg cpi temp,'4' brne CHECK_USER4 cpi key,'9' brne CHECK_USER4 rcall SHOW_USER3 rjmp RESET_INPUT

; User4: 011 -> Fatma CHECK_USER4: mov temp, pass1_reg cpi temp,'0' brne CHECK_USER5 mov temp, pass2_reg cpi temp,'1' brne CHECK_USER5 cpi key,'1' brne CHECK_USER5 rcall SHOW_USER4 rjmp RESET_INPUT

; User5: 025 -> Salma CHECK_USER5: mov temp, pass1_reg cpi temp,'0' brne BAD_PASS mov temp, pass2_reg cpi temp,'2' brne BAD_PASS cpi key,'5' brne BAD_PASS rcall SHOW_USER5 rjmp RESET_INPUT

RESET_INPUT: ldi count,0 clr pass1_reg clr pass2_reg ldi key,0xFF rjmp MAIN_LOOP

BAD_PASS: rcall SHOW_DENIED rjmp RESET_INPUT

;======================== ; Show routines with Eng/ ;======================== SHOW_USER1: rcall LCD_CLEAR ldi temp,0x80 rcall LCD_CMD ; 3 فراغات لتزيح الاسم ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,'E' rcall LCD_DATA ldi temp,'n' rcall LCD_DATA ldi temp,'g' rcall LCD_DATA ldi temp,'/' rcall LCD_DATA ldi temp,'A' rcall LCD_DATA ldi temp,'b' rcall LCD_DATA ldi temp,'d' rcall LCD_DATA ldi temp,'e' rcall LCD_DATA ldi temp,'l' rcall LCD_DATA ldi temp,'r' rcall LCD_DATA ldi temp,'a' rcall LCD_DATA ldi temp,'h' rcall LCD_DATA ldi temp,'m' rcall LCD_DATA ldi temp,'a' rcall LCD_DATA ldi temp,'n' rcall LCD_DATA ldi temp,0xC0 rcall LCD_CMD ldi temp,'I' rcall LCD_DATA ldi temp,'D' rcall LCD_DATA ldi temp,':' rcall LCD_DATA ldi temp,'4' rcall LCD_DATA ldi temp,'1' rcall LCD_DATA ldi temp,'3' rcall LCD_DATA ret

SHOW_USER2: rcall LCD_CLEAR ldi temp,0x80 rcall LCD_CMD ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,'E' rcall LCD_DATA ldi temp,'n' rcall LCD_DATA ldi temp,'g' rcall LCD_DATA ldi temp,'/' rcall LCD_DATA ldi temp,'M' rcall LCD_DATA ldi temp,'o' rcall LCD_DATA ldi temp,'h' rcall LCD_DATA ldi temp,'a' rcall LCD_DATA ldi temp,'m' rcall LCD_DATA ldi temp,'m' rcall LCD_DATA ldi temp,'e' rcall LCD_DATA ldi temp,'d' rcall LCD_DATA ldi temp,0xC0 rcall LCD_CMD ldi temp,'I' rcall LCD_DATA ldi temp,'D' rcall LCD_DATA ldi temp,':' rcall LCD_DATA ldi temp,'5' rcall LCD_DATA ldi temp,'4' rcall LCD_DATA ldi temp,'5' rcall LCD_DATA ret

SHOW_USER3: rcall LCD_CLEAR ldi temp,0x80 rcall LCD_CMD ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,'E' rcall LCD_DATA ldi temp,'n' rcall LCD_DATA ldi temp,'g' rcall LCD_DATA ldi temp,'/' rcall LCD_DATA ldi temp,'N' rcall LCD_DATA ldi temp,'o' rcall LCD_DATA ldi temp,'r' rcall LCD_DATA ldi temp,'e' rcall LCD_DATA ldi temp,'e' rcall LCD_DATA ldi temp,'n' rcall LCD_DATA ldi temp,0xC0 rcall LCD_CMD ldi temp,'I' rcall LCD_DATA ldi temp,'D' rcall LCD_DATA ldi temp,':' rcall LCD_DATA ldi temp,'0' rcall LCD_DATA ldi temp,'4' rcall LCD_DATA ldi temp,'9' rcall LCD_DATA ret

SHOW_USER4: rcall LCD_CLEAR ldi temp,0x80 rcall LCD_CMD ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,'E' rcall LCD_DATA ldi temp,'n' rcall LCD_DATA ldi temp,'g' rcall LCD_DATA ldi temp,'/' rcall LCD_DATA ldi temp,'F' rcall LCD_DATA ldi temp,'a' rcall LCD_DATA ldi temp,'t' rcall LCD_DATA ldi temp,'m' rcall LCD_DATA ldi temp,'a' rcall LCD_DATA ldi temp,0xC0 rcall LCD_CMD ldi temp,'I' rcall LCD_DATA ldi temp,'D' rcall LCD_DATA ldi temp,':' rcall LCD_DATA ldi temp,'0' rcall LCD_DATA ldi temp,'1' rcall LCD_DATA ldi temp,'1' rcall LCD_DATA ret

SHOW_USER5: rcall LCD_CLEAR ldi temp,0x80 rcall LCD_CMD ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,'E' rcall LCD_DATA ldi temp,'n' rcall LCD_DATA ldi temp,'g' rcall LCD_DATA ldi temp,'/' rcall LCD_DATA ldi temp,'S' rcall LCD_DATA ldi temp,'a' rcall LCD_DATA ldi temp,'l' rcall LCD_DATA ldi temp,'m' rcall LCD_DATA ldi temp,'a' rcall LCD_DATA ldi temp,0xC0 rcall LCD_CMD ldi temp,'I' rcall LCD_DATA ldi temp,'D' rcall LCD_DATA ldi temp,':' rcall LCD_DATA ldi temp,'0' rcall LCD_DATA ldi temp,'2' rcall LCD_DATA ldi temp,'5' rcall LCD_DATA ret

SHOW_DENIED: rcall LCD_CLEAR ldi temp,0x80 rcall LCD_CMD ldi temp,'A' rcall LCD_DATA ldi temp,'c' rcall LCD_DATA ldi temp,'c' rcall LCD_DATA ldi temp,'e' rcall LCD_DATA ldi temp,'s' rcall LCD_DATA ldi temp,'s' rcall LCD_DATA ldi temp,' ' rcall LCD_DATA ldi temp,'D' rcall LCD_DATA ldi temp,'e' rcall LCD_DATA ldi temp,'n' rcall LCD_DATA ldi temp,'i' rcall LCD_DATA ldi temp,'e' rcall LCD_DATA ldi temp,'d' rcall LCD_DATA ret

;======================== ; LCD functions ;======================== LCD_INIT: ldi temp,0x38 rcall LCD_CMD rcall DELAY ldi temp,0x0C rcall LCD_CMD rcall DELAY ldi temp,0x01 rcall LCD_CMD rcall DELAY ldi temp,0x06 rcall LCD_CMD rcall DELAY ret

LCD_CMD: cbi PORTB,RS rcall LCD_WRITE ret

LCD_DATA: sbi PORTB,RS rcall LCD_WRITE ret

LCD_WRITE: out LCD_PORT,temp sbi PORTB,E rcall DELAY cbi PORTB,E rcall DELAY ret

LCD_CLEAR: ldi temp,0x01 rcall LCD_CMD rcall DELAY ret

;======================== ; Keypad scan ;======================== GET_KEY: ldi key,0xFF ; Column1 ldi temp,0b11101111 out KPD_PORT,temp rcall SCAN_COL1 cpi key,0xFF brne END_KEY ; Column2 ldi temp,0b11011111 out KPD_PORT,temp rcall SCAN_COL2 cpi key,0xFF brne END_KEY ; Column3 ldi temp,0b10111111 out KPD_PORT,temp rcall SCAN_COL3 cpi key,0xFF brne END_KEY ret

END_KEY: ret

SCAN_COL1: in temp,KPD_PIN andi temp,0x0F cpi temp,0b1110 breq R1C1 cpi temp,0b1101 breq R2C1 cpi temp,0b1011 breq R3C1 cpi temp,0b0111 breq R4C1 ret R1C1: ldi key,'1' ; return '1' ret R2C1: ldi key,'4' ret R3C1: ldi key,'7' ret R4C1: ldi key,'*' ret

SCAN_COL2: in temp,KPD_PIN andi temp,0x0F cpi temp,0b1110 breq R1C2 cpi temp,0b1101 breq R2C2 cpi temp,0b1011 breq R3C2 cpi temp,0b0111 breq R4C2 ret R1C2: ldi key,'2' ret R2C2: ldi key,'5' ret R3C2: ldi key,'8' ret R4C2: ldi key,'0' ret

SCAN_COL3: in temp,KPD_PIN andi temp,0x0F cpi temp,0b1110 breq R1C3 cpi temp,0b1101 breq R2C3 cpi temp,0b1011 breq R3C3 cpi temp,0b0111 breq R4C3 ret R1C3: ldi key,'3' ret R2C3: ldi key,'6' ret R3C3: ldi key,'9' ret R4C3: ldi key,'#' ret

;======================== ; Delay ;======================== DELAY: ldi temp,250 D1: dec temp brne D1 ret

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors