100% found this document useful (10 votes)
14K views4 pages

Electronic Code Lock

This document defines functions for an access control system using a keypad and LCD display. It initializes modules, reads and writes codes from EEPROM, compares entered codes to stored codes, and allows changing the code if the master code is entered. The system will grant or deny access depending on the code comparison and track attempts to limit to 3 tries before locking out.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
100% found this document useful (10 votes)
14K views4 pages

Electronic Code Lock

This document defines functions for an access control system using a keypad and LCD display. It initializes modules, reads and writes codes from EEPROM, compares entered codes to stored codes, and allows changing the code if the master code is entered. The system will grant or deny access depending on the code comparison and track attempts to limit to 3 tries before locking out.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

unsigned short kp; char code1[10] ,user1[4]; char msg1[20] = "Initializing......

",msg2[12] = "Enter Code"; char msg3[15] = "Access Granted",msg4[15] = "Access Denied"; char msg5[15] = "Enter New Code"; int i=0,j,cnt; // Keypad module connections char keypadPort at PORTD; // End Keypad module connections // LCD module connections sbit LCD_RS at RB2_bit; sbit LCD_EN at RB3_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISB2_bit; sbit LCD_EN_Direction at TRISB3_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; // End LCD module connection void code_enter() { kp = 0; // Reset key code variable // Wait for key to be pressed and released do //kp = Keypad_Key_Press(); // Store key code in kp variable kp = Keypad_Key_Click(); // Store key code in kp variable while (!kp); // Prepare value for output, transform key to it's ASCII value switch (kp) { case 1: kp = '1'; break; // 1 case 2: kp = '2'; break; // 2 case 3: kp = '3'; break; // 3 case 5: kp = '4'; break; // 4 case 6: kp = '5'; break; // 5 case 7: kp = '6'; break; // 6 case 9: kp = '7'; break; // 7 case 10: kp = '8'; break; // 8 case 11: kp = '9'; break; // 9 case 13: kp = 42; break; // * case 14: kp = 48; break; // 0 case 15: kp = 35; break; // # } code1[i] = kp; Lcd_Chr(2, i+1, code1[i]); // Print key ASCII value on Lcd i++; } void delay_20ms() { Delay_ms(20);

} void code_read() //Wead data from EEPROM { delay_20ms(); user1[0] = EEPROM_Read(0x00); // Read data from address delay_20ms(); user1[1] = EEPROM_Read(0x01); // Read data from address delay_20ms(); user1[2] = EEPROM_Read(0x02); // Read data from address delay_20ms(); user1[3] = EEPROM_Read(0x03); // Read data from address delay_20ms(); } void code_write() //Write data from EEPROM { delay_20ms(); EEPROM_Write(0x00,code1[0]); // Write some data delay_20ms(); EEPROM_Write(0x01,code1[1]); // Write some data delay_20ms(); EEPROM_Write(0x02,code1[2]); // Write some data delay_20ms(); EEPROM_Write(0x03,code1[3]); // Write some data } void change_code() { Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1, 1, "Enter New Code"); i=0; code_enter(); code_enter(); code_enter(); code_enter(); code_write(); code_read(); } void main() { ADCON1 |= 0x07; // Configure AN pins as digital TRISA = 0x00; // set direction to be output PORTA.B0 =1; Keypad_Init(); // Initialize Keypad Lcd_Init(); // Initialize Lcd code_read(); //If no code is stored then default is 2345 if(user1[0] == 0xFF && user1[1] == 0xFF && user1[2] == 0xFF && user1[3] == 0xFF ) { EEPROM_Write(0x00,'2'); // Write some data at address 00 delay_20ms(); EEPROM_Write(0x01,'3'); // Write some data at address 02 delay_20ms(); EEPROM_Write(0x02,'4'); // Write some data at address 04

0 2 4 8

at address 00 at address 02 at address 04 at address 08

// Clear display

delay_20ms(); EEPROM_Write(0x03,'5'); // Write some data at address 08 } code_read(); Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Out(1, 1,msg1 ); Delay_ms(500); Lcd_Cmd(_LCD_CLEAR); // Clear display cnt=0; do { Lcd_Cmd(_LCD_CLEAR); Lcd_Out(2, 3, "Press *"); i = 0; code_enter(); if(code1[0] == 42) { Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Out(1, 1,msg2); //delay_ms(500); i = 0; code_enter(); code_enter(); code_enter(); code_enter(); code_enter(); if(code1[0] == '2' && code1[1] == '3' && code1[2] == '4' && code1[3] == '5' & & code1[4] == '5') //check master code { code_enter(); if(code1[5] == 35) { change_code(); } } if(cnt<3 && code1[0] == user1[0] && code1[1] == user1[1] && code1[2] == user1 [2] && code1[3] == user1[3] && code1[4] == 35) //compare code with store one { Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Out(1, 1, msg3); PORTA.B0 =0; PORTA.B2=1; //Buzzer Delay_ms(2000); PORTA.B2=0; Delay_ms(3000); PORTA.B0 =1; } else { cnt++; Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1, 1,msg4 ); } if(cnt>=3) { do {

PORTA.B2=1; }while(1); } } }while(1); }

You might also like