we we're assigned to edit this program if how to change the default password and save a new password through the 4x3 keypad? please help us guys..and thanks..
we we're assigned to edit this program if how to change the default password and save a new password through the 4x3 keypad? please help us guys..and thanks..
this is the program we use MPLAB IDE..
//================================================== ======================================
// include
//================================================== =======================================
#include <pic.h>
//================================================== =======================================
// configuration
//================================================== =======================================
__CONFIG ( 0x3F32 );
//================================================== ========================================
// define
//================================================== ========================================
#define rs RC0
#define e RC1
#define led_red RC3
#define led_yellow RC2
#define lcd_data PORTD
#define relay RB1
#define buzzer RB2
//================================================== =========================================
// function prototype
//================================================== =========================================
void delay(unsigned long data);
void send_config(unsigned char data);
void send_char(unsigned char data);
void e_pulse(void);
void lcd_goto(unsigned char data);
void lcd_clr(void);
void send_string(const char *s);
void clearrow1(void);
void clearrow2(void);
void clearrow3(void);
void clearrow4(void);
void scancolumn1(void);
void scancolumn2(void);
void scancolumn3(void);
void beep_once(void);
void beep_twice(void);
//================================================== ==========================================
// global variable
//================================================== ==========================================
unsigned char password_count=0;
unsigned char keyin_char[6]; // Declare an array to stall the 6-digit key in password
unsigned char stalled_char[6]="123456"; // Declare an array to stall the 6-digit desired password
//================================================== ==========================================
// main function
//================================================== ==========================================
void main(void)
{
ADCON1=0b00000110; //set all portA pins as digital I/O
TRISA=0b11001111; //clear bit 4&5 portA as output and set the rest as input
TRISB=0b00000000; //set portB as output
TRISD=0b00000000; //set portD as output
TRISC=0b11110000; //set bit4-7 portC as input(connected to 4 row of keypad)
TRISE=0b00000000; //set portE as output
PORTC=0;
PORTD=0;
relay=0;
buzzer=0;
led_yellow=0;
led_red=0;
send_config(0b00001001); //clear display at lcd
send_config(0b00000010); //Lcd Return to home
send_config(0b00000110); //entry mode-cursor increase 1
send_config(0b00001100); //diplay on, cursor off and cursor blink off
send_config(0b00111000); //function
lcd_clr(); //clear LCD
delay(1000); //delay
lcd_goto(0); //initial display
send_string("PLEASE ENTER"); //Display "PLEASE ENTER" on lcd
lcd_goto(20); //Display on 2nd line
send_string("6-DIGIT PASSWORD"); //Display "6-DIGIT PASSWORD" on lcd
while(1)
{ //keypad scanning algorithm
clearrow1(); //Clear 1st output pin and set the others
scancolumn1(); //scan column 1-3
clearrow2(); //Clear 2nd output pin and set the others
scancolumn2(); //scan column
clearrow3(); //Clear 3rd output pin and set the others
scancolumn3(); //scan column
clearrow4(); //Clear 4th output pin and set the others
if(password_count==6)
{
password_count=0;
if((keyin_char[0]==stalled_char[0])&&(keyin_char[1]==stalled_char[1])&&
(keyin_char[2]==stalled_char[2])&&(keyin_char[3]==stalled_char[3])&&
(keyin_char[4]==stalled_char[4])&&(keyin_char[5]==stalled_char[5])) //compare the keyin value with stalled value to test whether password is correct
{
lcd_clr(); //clear lcd
lcd_goto(0);
send_string("SUCCESS!"); //display SUCCESS
led_yellow=1; //yellow light on
relay=1; //relay on
beep_once(); //beep one time
while(1); //infinity loop
}
else
{
lcd_clr(); //clear lcd
lcd_goto(0);
send_string("ERROR!"); //display ERROR!
led_red=1; //red light on
beep_twice(); //beep two time
while(1); //infinity loop
}
}
}
}
//================================================== =====================================
// scanning functions
//================================================== =====================================
void clearrow1(void) //clear the 1st row and set the others
{
RE1=0; //RE1,RE0, and s RA5 are the output pins from PIC which connect to 4 pins of keypad
RE0=1;
RA5=1;
}
void clearrow2(void) //clear the 2nd row and set the others
{
RE1=1;
RE0=0;
RA5=1;
}
void clearrow3(void) //clear the 3rd row and set the others
{
RE1=1;
RE0=1;
RA5=0;
}
void clearrow4(void) //clear the 4th row and set the others
{
RE1=1;
RE0=1;
RA5=1;
}
void scancolumn1(void)
{
if(RA0==0) //if key '*' is being pressed
{
while(RA0==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='*'; //Stall the '*' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA1==0) //if key '7' is being pressed
{
while(RA1==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='7'; //Stall the '7' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA2==0) //if key '4' is being pressed
{
while(RA2==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='4'; //Stall the '4' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA3==0) //if key '1' is being pressed
{
while(RA3==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='1'; //Stall the '1' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
}
void scancolumn2(void)
{
if(RA0==0) //if key '0' is being pressed
{
while(RA0==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD -+
keyin_char[password_count]='0'; //Stall the '0' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA1==0) //if key '8' is being pressed
{
while(RA1==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='8'; //Stall the '8' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA2==0) //if key '5' is being pressed
{
while(RA2==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='5'; //Stall the '5' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA3==0) //if key '2' is being pressed
{
while(RA3==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='2'; //Stall the '2' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
}
void scancolumn3(void)
{
if(RA0==0) //if key '#' is being pressed
{
while(RA0==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='#'; //Stall the '#' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA1==0) //if key '9' is being pressed
{
while(RA1==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='9'; //Stall the '9' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA2==0) //if key '6' is being pressed
{
while(RA2==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='6'; //Stall the '6' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA3==0) //if key '3' is being pressed
{
while(RA3==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='3'; //Stall the '3' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
}
//================================================== =============================================
// General Purpose functions
//================================================== =============================================
void delay(unsigned long data)
{
for( ;data>0;data-=1);
}
void beep_once(void)
{
buzzer=1; //buzzer on
delay(8000);
buzzer=0; //buzzer off
}
void beep_twice(void)
{
buzzer=1; //buzzer on
delay(8000);
buzzer=0; //buzzer off
delay(13000);
buzzer=1; //buzzer on
delay(8000);
buzzer=0; //buzzer off
}
//================================================== ======================================
// LCD functions
//================================================== ======================================
void send_config(unsigned char data)
{
rs=0; //clear rs into config mode
lcd_data=data;
delay(50);
e_pulse();
}
void send_char(unsigned char data)
{
rs=1; //set rs into write mode
lcd_data=data;
delay(50);
e_pulse();
}
void e_pulse(void)
{
e=1;
delay(50);
e=0;
delay(50);
}
void lcd_goto(unsigned char data)
{
if(data<16)
{
send_config(0x80+data);
}
else
{
data=data-20;
send_config(0xc0+data);
}
}
void lcd_clr(void)
{
send_config(0x01);
delay(50);
}
void send_string(const char *s)
{
unsigned char i=0;
while (s && *s)send_char (*s++);
}
hahaha mao mani akong kalabdan sa ulo sauna! PROGRAMMING!! hahah man ko ana kay gi hagbung kong Pena!!
pag buhat nalang ug imong bag.o
kapoy kapoy lang ka ani!
pa balhin ni sa programming section oi!
Last edited by crysyani; 02-17-2011 at 05:13 AM.
mm...FYI...mo run na nga program using MPLAB IDE..it just that..pun-anan lang jud atong unsaun pag change the default password and save it...
Let the Computer Engineers do the coding.
Mga taw sa istorya wala kailag [code] tags. Labad kau tan-awn ang imo code brader. Di mada.
Isulod pud na ug code tags brad, nya please paki post pud apil sa schematic ninyo.
this is the source code...
http://www.cytron.com.my/usr_attachm..._Schematic.pdf
PHP Code:
//=======================================================================================
// Project description :PIC18F877A + 4x3 keypad + LCD are used to build a keypad door
// security system which will activate the relay and buzzer after
// a preset 6-digit password is entered.
// LCD will display ****** when keypad is pressed.
// preset password for this program is 123456
//========================================================================================
//========================================================================================
// include
//=========================================================================================
#include <pic.h>
//=========================================================================================
// configuration
//=========================================================================================
__CONFIG ( 0x3F32 );
//==========================================================================================
// define
//==========================================================================================
#define rs RC0
#define e RC1
#define led_red RC3
#define led_yellow RC2
#define lcd_data PORTD
#define relay RB1
#define buzzer RB2
//===========================================================================================
// function prototype
//===========================================================================================
void delay(unsigned long data);
void send_config(unsigned char data);
void send_char(unsigned char data);
void e_pulse(void);
void lcd_goto(unsigned char data);
void lcd_clr(void);
void send_string(const char *s);
void clearrow1(void);
void clearrow2(void);
void clearrow3(void);
void clearrow4(void);
void scancolumn1(void);
void scancolumn2(void);
void scancolumn3(void);
void beep_once(void);
void beep_twice(void);
//============================================================================================
// global variable
//============================================================================================
unsigned char password_count=0;
unsigned char keyin_char[6]; // Declare an array to stall the 6-digit key in password
unsigned char stalled_char[6]="123456"; // Declare an array to stall the 6-digit desired password
//============================================================================================
// main function
//============================================================================================
void main(void)
{
ADCON1=0b00000110; //set all portA pins as digital I/O
TRISA=0b11001111; //clear bit 4&5 portA as output and set the rest as input
TRISB=0b00000000; //set portB as output
TRISD=0b00000000; //set portD as output
TRISC=0b11110000; //set bit4-7 portC as input(connected to 4 row of keypad)
TRISE=0b00000000; //set portE as output
PORTC=0;
PORTD=0;
relay=0;
buzzer=0;
led_yellow=0;
led_red=0;
send_config(0b00001001); //clear display at lcd
send_config(0b00000010); //Lcd Return to home
send_config(0b00000110); //entry mode-cursor increase 1
send_config(0b00001100); //diplay on, cursor off and cursor blink off
send_config(0b00111000); //function
lcd_clr(); //clear LCD
delay(1000); //delay
lcd_goto(0); //initial display
send_string("PLEASE ENTER"); //Display "PLEASE ENTER" on lcd
lcd_goto(20); //Display on 2nd line
send_string("6-DIGIT PASSWORD"); //Display "6-DIGIT PASSWORD" on lcd
while(1)
{ //keypad scanning algorithm
clearrow1(); //Clear 1st output pin and set the others
scancolumn1(); //scan column 1-3
clearrow2(); //Clear 2nd output pin and set the others
scancolumn2(); //scan column
clearrow3(); //Clear 3rd output pin and set the others
scancolumn3(); //scan column
clearrow4(); //Clear 4th output pin and set the others
if(password_count==6)
{
password_count=0;
if((keyin_char[0]==stalled_char[0])&&(keyin_char[1]==stalled_char[1])&&
(keyin_char[2]==stalled_char[2])&&(keyin_char[3]==stalled_char[3])&&
(keyin_char[4]==stalled_char[4])&&(keyin_char[5]==stalled_char[5])) //compare the keyin value with stalled value to test whether password is correct
{
lcd_clr(); //clear lcd
lcd_goto(0);
send_string("SUCCESS!"); //display SUCCESS
led_yellow=1; //yellow light on
relay=1; //relay on
beep_once(); //beep one time
while(1); //infinity loop
}
else
{
lcd_clr(); //clear lcd
lcd_goto(0);
send_string("ERROR!"); //display ERROR!
led_red=1; //red light on
beep_twice(); //beep two time
while(1); //infinity loop
}
}
}
}
//=======================================================================================
// scanning functions
//=======================================================================================
void clearrow1(void) //clear the 1st row and set the others
{
RE1=0; //RE1,RE0, and s RA5 are the output pins from PIC which connect to 4 pins of keypad
RE0=1;
RA5=1;
}
void clearrow2(void) //clear the 2nd row and set the others
{
RE1=1;
RE0=0;
RA5=1;
}
void clearrow3(void) //clear the 3rd row and set the others
{
RE1=1;
RE0=1;
RA5=0;
}
void clearrow4(void) //clear the 4th row and set the others
{
RE1=1;
RE0=1;
RA5=1;
}
void scancolumn1(void)
{
if(RA0==0) //if key '*' is being pressed
{
while(RA0==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='*'; //Stall the '*' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA1==0) //if key '7' is being pressed
{
while(RA1==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='7'; //Stall the '7' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA2==0) //if key '4' is being pressed
{
while(RA2==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='4'; //Stall the '4' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA3==0) //if key '1' is being pressed
{
while(RA3==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='1'; //Stall the '1' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
}
void scancolumn2(void)
{
if(RA0==0) //if key '0' is being pressed
{
while(RA0==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD -+
keyin_char[password_count]='0'; //Stall the '0' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA1==0) //if key '8' is being pressed
{
while(RA1==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='8'; //Stall the '8' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA2==0) //if key '5' is being pressed
{
while(RA2==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='5'; //Stall the '5' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA3==0) //if key '2' is being pressed
{
while(RA3==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='2'; //Stall the '2' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
}
void scancolumn3(void)
{
if(RA0==0) //if key '#' is being pressed
{
while(RA0==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='#'; //Stall the '#' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA1==0) //if key '9' is being pressed
{
while(RA1==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='9'; //Stall the '9' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA2==0) //if key '6' is being pressed
{
while(RA2==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='6'; //Stall the '6' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
else if(RA3==0) //if key '3' is being pressed
{
while(RA3==0)continue; //waiting the key to be released
if(password_count==0)lcd_clr(); //Clear the LCD if the key is the 1st password
lcd_goto(password_count); //The cursor of LCD points to the column equivalent to the value of password_count variable
send_char('*'); //Display the symbol '*' at LCD
keyin_char[password_count]='3'; //Stall the '3' value at the keyin_char array
password_count+=1; //increase the Password_count variable's value by 1 and the result stall back to the variable
}
}
//===============================================================================================
// General Purpose functions
//===============================================================================================
void delay(unsigned long data)
{
for( ;data>0;data-=1);
}
void beep_once(void)
{
buzzer=1; //buzzer on
delay(8000);
buzzer=0; //buzzer off
}
void beep_twice(void)
{
buzzer=1; //buzzer on
delay(8000);
buzzer=0; //buzzer off
delay(13000);
buzzer=1; //buzzer on
delay(8000);
buzzer=0; //buzzer off
}
//========================================================================================
// LCD functions
//========================================================================================
void send_config(unsigned char data)
{
rs=0; //clear rs into config mode
lcd_data=data;
delay(50);
e_pulse();
}
void send_char(unsigned char data)
{
rs=1; //set rs into write mode
lcd_data=data;
delay(50);
e_pulse();
}
void e_pulse(void)
{
e=1;
delay(50);
e=0;
delay(50);
}
void lcd_goto(unsigned char data)
{
if(data<16)
{
send_config(0x80+data);
}
else
{
data=data-20;
send_config(0xc0+data);
}
}
void lcd_clr(void)
{
send_config(0x01);
delay(50);
}
void send_string(const char *s)
{
unsigned char i=0;
while (s && *s)send_char (*s++);
}
sorry i am a new user and we really need help...i attach the schematic for that code but we're using 4x3 keypad with MPLAB IDE software...
Similar Threads |
|