The Philippine Electronics and Technology Forum
February 10, 2012, 12:43:55 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
 
   Home   Help Search Login Register  

Pages: [1]   Go Down
  Print  
Author Topic: password code help  (Read 861 times)
cliff88
CR2032 Battery
**

Pogi/Ganda Points: 0
Offline Offline

Posts: 26


« on: December 25, 2009, 03:51:52 PM »

ito po ung password algo n ngawa ko.
default password: 1234
initially RA0=1. during keypad input, its binary equivalent is displayd at PORTB. wla pong problema jan n part. ito ung problem:
if *1234# is entered,RA0 shud go to low(RA0=0). pro wla pong ngyayari sa RA0. nka-high prn.
pasword can be changed by entering *12345# plus 4digits plus *.
i use pic16f877a 4MHz crystal,3x4 keypad.rows are connected to pull up resistors.
 patulong nmn po kng san ang mali dito.


#include<pic.h>
#include <htc.h>   // Required to interface with delay routines

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif


__CONFIG(XT & WDTDIS & LVPDIS & UNPROTECT);

char code1[10] ,user1[4];
int i=0,j,m=0;

unsigned char scanned_key = 0x00;
unsigned char decoded_key = 0x00;

void init_LED(void)
{
   PORTB = 0xF0;
   TRISB = 0xF0;
}

void init_KEYPAD(void)
{
   TRISD = 0x70;         //PORTD<6:4> input, COLUMNS
   TRISD = ~0x0F;         //PORTD<3:0> output, ROWS      
   PORTD = 0b00001111;          //PORTD<3:0> initially high
}





unsigned char decode_key(unsigned char val)
{
   unsigned char key;

   switch(val)
   {
      case 0x60:            //0
         key = 0x01;
         break;
      case 0x50:            //1
         key = 0x02;
         break;
      case 0x30:            //2
         key = 0x03;
         break;
      case 0x61:            //3
         key = 0x04;
         break;
      case 0x51:            //4
         key = 0x05;
         break;
      case 0x31:            //5
         key = 0x06;
         break;
      case 0x62:            //6
         key = 0x07;
         break;
      case 0x52:            //7
         key = 0x08;
         break;
      case 0x32:            //8
         key = 0x09;
         break;
      case 0x63:            //9
         key = 0x0A;
         break;
      case 0x53:            //10
         key = 0x0B;
         break;
      case 0x33:            //11
         key = 0x0C;
         break;
      default:
         key = decoded_key;
         break;
   }
   
   return key;
   
}

void display_key(unsigned char key)
{
   PORTB = key;
}

unsigned char scan_keypad()
{
   unsigned char val_1 = 0x00;
   unsigned char val_2 = 0x00;
   unsigned char count1;
   
   
   for(count1=0;count1 < 4;count1++)
   {
      PORTD = ~(0x01 << count1);   //scan row
      __delay_ms(35);
      val_1 = PORTD & 0x70;      //read column, RD<6:4>
                           //while clearing RD<7> &
                           //RD<3:0>
      if (val_1 != 0x70)         //if a column is pressed
      {
         val_2 = (val_1 | count1);    //column (high-nibble) and count (low-nibble)
         return val_2;         //return value
      }
   }

   return 0xFF;               //return any value            
}

void code_enter(void)
{
   //while(1)
   //{
      //unsigned char key;
//      i=0;
      scanned_key = scan_keypad();
      decoded_key = decode_key(scanned_key);
      display_key(decoded_key);
            
      code1 = decoded_key;
//      i++;

   //}
}
void delay_20ms()
{
 __delay_ms(20);
}

void code_read()  //Read data from EEPROM
{
 delay_20ms();
 user1[0] = eeprom_read(0x00);          // Read data from address 0
 delay_20ms();
 user1[1] = eeprom_read(0x01);          // Read data from address 2
 delay_20ms();
 user1[2] = eeprom_read(0x02);          // Read data from address 4
 delay_20ms();
 user1[3] = eeprom_read(0x03);          // Read data from address 8
 delay_20ms();
}

void code_write() //Write data from EEPROM
{
 delay_20ms();
 eeprom_write(0x00,code1[0]);               // Write some data at address 00
 delay_20ms();
 eeprom_write(0x01,code1[1]);               // Write some data at address 02
 delay_20ms();
 eeprom_write(0x02,code1[2]);               // Write some data at address 04
 delay_20ms();
 eeprom_write(0x03,code1[3]);               // Write some data at address 08

}


void change_code()
{

 i=0;
 code_enter();
 i=1;
 code_enter();
 i=2;
 code_enter();
 i=3;
 code_enter();
 code_write();
 code_read();
}

void main()
{
 ADCON1 |= 0x07;      // Configure AN pins as digital
 TRISA = 0x00;          // set direction to be output
 RA0  =1;
 init_KEYPAD();
 init_LED();                           // Initialize Keypad
 
 code_read();
 //If no code is stored then default is 1234
 if(user1[0] == 0xFF && user1[1] == 0xFF && user1[2] == 0xFF && user1[3] == 0xFF )
 {
 eeprom_write(0x00,1);               // Write some data at address 00
 delay_20ms();
 eeprom_write(0x01,2);               // Write some data at address 02
 delay_20ms();
 eeprom_write(0x02,3);               // Write some data at address 04
 delay_20ms();
 eeprom_write(0x03,4);               // Write some data at address 08
 }
 code_read();
 __delay_ms(100);
 do
{
  i = 0;
  code_enter();
  if(code1[0] == 0x0A)
  {
   i = 0;
   code_enter();
   i=1;
   code_enter();
   i=2;
   code_enter();
   i=3;
   code_enter();
   i=4;
   code_enter();
   if(code1[0] == 1 && code1[1] == 2 && code1[2] == 3 && code1[3] == 4 && code1[4] == 5)  //check master code
   {
    i=5;
   code_enter();
    if(code1[5] == 0x0C)
    {
     change_code();
    }
   }
   if(code1[0] == user1[0] && code1[1] == user1[1] && code1[2] == user1[2] && code1[3] == user1[3] && code1[4] == 0x0C) //compare code with store one
   {
    RA0  =0;
   __delay_ms(50);
   
   }
  }
 }
while(1);
}


thanks in advance..
Logged
The Philippine Electronics and Technology Forum
« on: December 25, 2009, 03:51:52 PM »

 Logged
7_SeVeN_7
Technical People
Solar Power Satellite
*****

Pogi/Ganda Points: 380
Offline Offline

Posts: 5954


There is no delight in owning anything unshared.


« Reply #1 on: December 25, 2009, 05:54:23 PM »

at first glance, medyo mahirap basahin yung code mo, daming magic number at madaming repeated code... practice using enum para madaling mabasa ng ibang programmers.

however I spotted something:

char code1[10]
unsigned char decoded_key = 0x00;

tapos doon sa isang code you did
code1 = decoded_key; //this is wrong.

and from my interpretation (I haven't read the source code deeply yet), you still need to add something doon sa code_enter function mo...

although I want to do it for you, it would be best na ikaw na ang maka solve nito Smiley HTH
Logged

E-Gizmo Mechatronix Central: www.e-gizmo.com

Tel #: (63)(2) 536-3378
Globe +63915-973-7691
Smart +63921-779-0748

Location Map

YM: julie.egizmo  aka Born2BeWired  Grin
cliff88
CR2032 Battery
**

Pogi/Ganda Points: 0
Offline Offline

Posts: 26


« Reply #2 on: December 25, 2009, 09:41:46 PM »

pnalitan ko n po ung ng gnito:
code=decoded_key;
pro gnon prn po.
ano problem don s char code1[10]?s pgkakaalam ko po ung command n un nag-aalocate lng ng
10 registers pra s code1.
un dn po naiicip ko.s code_enter ung my kulang. ano po b dpt idag2?=(
pwede m po b gawan i2 ng sample code?i think ito klangan ko mtutunan.

input: RB1(push-button)
output: RC7(indicator), RC<3-0>(counter)
evrytym RB1 is pressd,RC7 shud change its state and variable "i" must increment. the value of i shud be reflected at portC(3-0).
in high tech c po sna.
nabasa ko n ung tutorial n sir paranz pro wla kc kpareho nito don. im sure madali lng yn s inyo master.thnx po.

anyway, ano po ung enum?
Logged
7_SeVeN_7
Technical People
Solar Power Satellite
*****

Pogi/Ganda Points: 380
Offline Offline

Posts: 5954


There is no delight in owning anything unshared.


« Reply #3 on: December 25, 2009, 10:10:00 PM »

pwede ko rin sana itesting kaso may iba akong ginagawa ngayon hehehe... sa nakikita ko may dapat kang idagdag at iadjust sa keypad interpretation logic mo... kaya mo yan Smiley wag mawalan ng pag-asa heheh Cheesy
Logged

E-Gizmo Mechatronix Central: www.e-gizmo.com

Tel #: (63)(2) 536-3378
Globe +63915-973-7691
Smart +63921-779-0748

Location Map

YM: julie.egizmo  aka Born2BeWired  Grin
cliff88
CR2032 Battery
**

Pogi/Ganda Points: 0
Offline Offline

Posts: 26


« Reply #4 on: December 25, 2009, 10:32:08 PM »

kahit ung sample code lng po mna ung ilagay nyo..prng maiksing program lng nmn un e..mbilis m lng un mggawa.plss...thanx po..
Logged
cliff88
CR2032 Battery
**

Pogi/Ganda Points: 0
Offline Offline

Posts: 26


« Reply #5 on: December 25, 2009, 11:29:16 PM »

wg nlng po pla ung sample code.nagawan ko n.hehe regarding s topic nlng po. any help s mga masters jn ps....
Logged
cliff88
CR2032 Battery
**

Pogi/Ganda Points: 0
Offline Offline

Posts: 26


« Reply #6 on: December 26, 2009, 02:16:07 AM »

namodify ko n po ung code.pro gnon prn tlga e.same result lng.ung default pasword n 1234 plng tntry ko pro hndi prn nagzezero ang RA0.bkt po kya?di ko n alm gwn ko.tulong nmn mga masters jn=( *1234* pra mgzero ang RA0.*1234#1234* to change code.

#include<pic.h>
#include <htc.h>   // Required to interface with delay routines

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif


__CONFIG(XT & WDTDIS & LVPDIS & UNPROTECT);

int i=0,j,m=0;

unsigned char code1[10] ,user1[4];

unsigned char scanned_key = 0x00;
unsigned char decoded_key = 0x00;

void init_LED(void)
{
   PORTB = 0xF0;
   TRISB = 0xF0;
}

void init_KEYPAD(void)
{
   TRISD = 0x70;         //PORTD<6:4> input, COLUMNS
   TRISD = ~0x0F;         //PORTD<3:0> output, ROWS      
   PORTD = 0b00001111;          //PORTD<3:0> initially high
}




unsigned char decode_key(unsigned char val)
{
   unsigned char key;

   switch(val)
   {
      case 0x60:            //0
         key = 0x01;
         break;
      case 0x50:            //1
         key = 0x02;
         break;
      case 0x30:            //2
         key = 0x03;
         break;
      case 0x61:            //3
         key = 0x04;
         break;
      case 0x51:            //4
         key = 0x05;
         break;
      case 0x31:            //5
         key = 0x06;
         break;
      case 0x62:            //6
         key = 0x07;
         break;
      case 0x52:            //7
         key = 0x08;
         break;
      case 0x32:            //8
         key = 0x09;
         break;
      case 0x63:            //9
         key = 0x0A;
         break;
      case 0x53:            //10
         key = 0x0B;
         break;
      case 0x33:            //11
         key = 0x0C;
         break;
      default:
         key = decoded_key;
         break;
   }
   
   return key;
   
}

void display_key(unsigned char key)
{
   PORTB = key;
}

unsigned char scan_keypad()
{
   unsigned char val_1 = 0x00;
   unsigned char val_2 = 0x00;
   unsigned char count1;
   
   
   for(count1=0;count1 < 4;count1++)
   {
      PORTD = ~(0x01 << count1);   //scan row
      __delay_ms(35);
      val_1 = PORTD & 0x70;      //read column, RD<6:4>
                           //while clearing RD<7> &
                           //RD<3:0>
      if (val_1 != 0x70)         //if a column is pressed
      {
         val_2 = (val_1 | count1);    //column (high-nibble) and count (low-nibble)
         return val_2;         //return value
      }
   }

   return 0xFF;               //return any value            
}

void code_enter(void)
{
//  i=1;
   while(1)
   {
      //unsigned char key;
      
      scanned_key = scan_keypad();
      decoded_key = decode_key(scanned_key);
      code1 = display_key;

      display_key(decoded_key);
            
   //   code1 = 0x0a;
   //   code1[1] = 0x01;
   //   code1[2] = 0x02;
   //   code1[3] = 0x03;
   //   code1[4] = 0x04;
   //   code1[5] = 0x0a;
      i++;
   }
}

void code_read(void)  //Read data from EEPROM
{
 __delay_ms(20);
 user1[0] = eeprom_read(0x00);          // Read data from address 0
 __delay_ms(20);
 user1[1] = eeprom_read(0x01);          // Read data from address 2
 __delay_ms(20);
 user1[2] = eeprom_read(0x02);          // Read data from address 4
 __delay_ms(20);
 user1[3] = eeprom_read(0x03);          // Read data from address 8
 __delay_ms(20);
}

void code_write(void) //Write data from EEPROM
{
 __delay_ms(20);
 eeprom_write(0x00,code1[1]);               // Write some data at address 00
 __delay_ms(20);
 eeprom_write(0x01,code1[2]);               // Write some data at address 02
 __delay_ms(20);
 eeprom_write(0x02,code1[3]);               // Write some data at address 04
 __delay_ms(20);
 eeprom_write(0x03,code1[4]);               // Write some data at address 08

}


void change_code(void)
{

 i=1;
 code_enter();
 code_write();
 code_read();
}

void main()
{
 ADCON1 = 0x07;      // Configure AN pins as digital
 TRISA = 0x00;          // set direction to be output
 RA0  =1;
 init_KEYPAD();
 init_LED();                           // Initialize Keypad
 
 code_read();
 //If no code is stored then default is 1234
 if(user1[0] == 0xFF && user1[1] == 0xFF && user1[2] == 0xFF && user1[3] == 0xFF )
 {
 eeprom_write(0x00,1);               // Write some data at address 00
 __delay_ms(20);
 eeprom_write(0x01,2);               // Write some data at address 02
 __delay_ms(20);
 eeprom_write(0x02,3);               // Write some data at address 04
 __delay_ms(20);
 eeprom_write(0x03,4);               // Write some data at address 08
 }
 code_read();
 __delay_ms(100);
 do
{
  i = 0;
  code_enter();
  if(code1[0] == 0x0A)
  {
     if(code1[1] == 1 && code1[2] == 2 && code1[3] == 3 && code1[4] == 4)
   {
    if(code1[5] == 0x0C)
    {
     change_code();
    }
   if(code1[5]==0x0a)
   {RA0=0;}

   }
//   if(code1[0] == user1[0] && code1[1] == user1[1] && code1[2] == user1[2] && code1[3] == user1[3] )//&& code1[4] == 0x0A) //compare code with store one
   if(code1[1] == user1[0] && code1[2] == user1[1] && code1[3] == user1[2] && code1[4] == user1[3] )//&& code1[4] == 0x0A) //compare code with store one

   {
//   i=4;
//   code_enter();
    if(code1[5] == 0x0C)
    {
     change_code();
    }
   if(code1[5] == 0x0A)
    {
       
    RA0  =0;
   __delay_ms(50);
   // __delay_ms(150);
   // RA0  =1;
    }
   }
   else
   {
   RA0=1;
   }
  }
 }
while(1);
}
 
Logged
cliff88
CR2032 Battery
**

Pogi/Ganda Points: 0
Offline Offline

Posts: 26


« Reply #7 on: December 26, 2009, 02:24:33 AM »

namodify ko n po ung code.pro gnon prn tlga e.same result lng.ung default pasword n 1234 plng tntry ko pro hndi prn nagzezero ang RA0.bkt po kya?di ko n alm gwn ko.tulong nmn mga masters jn=( *1234* pra mgzero ang RA0.*1234#1234* to change code.

#include<pic.h>
#include <htc.h>   // Required to interface with delay routines

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif


__CONFIG(XT & WDTDIS & LVPDIS & UNPROTECT);

int i=0,j,m=0;

unsigned char code1[10] ,user1[4];

unsigned char scanned_key = 0x00;
unsigned char decoded_key = 0x00;

void init_LED(void)
{
   PORTB = 0xF0;
   TRISB = 0xF0;
}

void init_KEYPAD(void)
{
   TRISD = 0x70;         //PORTD<6:4> input, COLUMNS
   TRISD = ~0x0F;         //PORTD<3:0> output, ROWS      
   PORTD = 0b00001111;          //PORTD<3:0> initially high
}




unsigned char decode_key(unsigned char val)
{
   unsigned char key;

   switch(val)
   {
      case 0x60:            //0
         key = 0x01;
         break;
      case 0x50:            //1
         key = 0x02;
         break;
      case 0x30:            //2
         key = 0x03;
         break;
      case 0x61:            //3
         key = 0x04;
         break;
      case 0x51:            //4
         key = 0x05;
         break;
      case 0x31:            //5
         key = 0x06;
         break;
      case 0x62:            //6
         key = 0x07;
         break;
      case 0x52:            //7
         key = 0x08;
         break;
      case 0x32:            //8
         key = 0x09;
         break;
      case 0x63:            //9
         key = 0x0A;
         break;
      case 0x53:            //10
         key = 0x0B;
         break;
      case 0x33:            //11
         key = 0x0C;
         break;
      default:
         key = decoded_key;
         break;
   }
   
   return key;
   
}

void display_key(unsigned char key)
{
   PORTB = key;
}

unsigned char scan_keypad()
{
   unsigned char val_1 = 0x00;
   unsigned char val_2 = 0x00;
   unsigned char count1;
   
   
   for(count1=0;count1 < 4;count1++)
   {
      PORTD = ~(0x01 << count1);   //scan row
      __delay_ms(35);
      val_1 = PORTD & 0x70;      //read column, RD<6:4>
                           //while clearing RD<7> &
                           //RD<3:0>
      if (val_1 != 0x70)         //if a column is pressed
      {
         val_2 = (val_1 | count1);    //column (high-nibble) and count (low-nibble)
         return val_2;         //return value
      }
   }

   return 0xFF;               //return any value            
}

void code_enter(void)
{
   while(1)
   {
      scanned_key = scan_keypad();
      decoded_key = decode_key(scanned_key);
      code1 = display_key;

      display_key(decoded_key);
            
   //   code1 = 0x0a;
   //   code1[1] = 0x01;
   //   code1[2] = 0x02;
   //   code1[3] = 0x03;
   //   code1[4] = 0x04;
   //   code1[5] = 0x0a;
      i++;
   }
}

void code_read(void)  //Read data from EEPROM
{
 __delay_ms(20);
 user1[0] = eeprom_read(0x00);          // Read data from address 0
 __delay_ms(20);
 user1[1] = eeprom_read(0x01);          // Read data from address 2
 __delay_ms(20);
 user1[2] = eeprom_read(0x02);          // Read data from address 4
 __delay_ms(20);
 user1[3] = eeprom_read(0x03);          // Read data from address 8
 __delay_ms(20);
}

void code_write(void) //Write data from EEPROM
{
 __delay_ms(20);
 eeprom_write(0x00,code1[1]);               // Write some data at address 00
 __delay_ms(20);
 eeprom_write(0x01,code1[2]);               // Write some data at address 02
 __delay_ms(20);
 eeprom_write(0x02,code1[3]);               // Write some data at address 04
 __delay_ms(20);
 eeprom_write(0x03,code1[4]);               // Write some data at address 08

}


void change_code(void)
{

 i=1;
 code_enter();
 code_write();
 code_read();
}

void main()
{
 ADCON1 = 0x07;      // Configure AN pins as digital
 TRISA = 0x00;          // set direction to be output
 RA0  =1;
 init_KEYPAD();
 init_LED();                           // Initialize Keypad
 
 code_read();
 //If no code is stored then default is 1234
 if(user1[0] == 0xFF && user1[1] == 0xFF && user1[2] == 0xFF && user1[3] == 0xFF )
 {
 eeprom_write(0x00,1);               // Write some data at address 00
 __delay_ms(20);
 eeprom_write(0x01,2);               // Write some data at address 02
 __delay_ms(20);
 eeprom_write(0x02,3);               // Write some data at address 04
 __delay_ms(20);
 eeprom_write(0x03,4);               // Write some data at address 08
 }
 code_read();
 __delay_ms(100);
 do
{
  i = 0;
  code_enter();
  if(code1[0] == 0x0A)
  {
     if(code1[1] == 1 && code1[2] == 2 && code1[3] == 3 && code1[4] == 4)
     {
          if(code1[5] == 0x0C)
          {change_code();}

          if(code1[5]==0x0a)
          {RA0=0;}

     }
     if(code1[1] == user1[0] && code1[2] == user1[1] && code1[3] == user1[2] && code1[4] == user1[3] )compare code with store one

     {
           if(code1[5] == 0x0C)
           {change_code();}
           if(code1[5] == 0x0A)
           {RA0  =0;
   __delay_ms(50);}
     }
     else
     {RA0=1;}
     }
 }
while(1);
}
 
Logged
cliff88
CR2032 Battery
**

Pogi/Ganda Points: 0
Offline Offline

Posts: 26


« Reply #8 on: December 26, 2009, 02:38:16 AM »

ung nsa code_enter n line:   code1 = display_key;
ganito po yn s code ko :      code1 = display_key;
hndi sya ndisplay kc akala e command un pra s italic. thanks po ng mrami  s mkakatulong.sakit n tlga ulo ko di ko mkita san ang mali=(
Logged
tahirmaqsood
CR2032 Battery
**

Pogi/Ganda Points: 0
Offline Offline

Posts: 9


« Reply #9 on: September 24, 2010, 12:38:37 AM »

i want used 3310 lcd with this code lock
any body help
 thanks
Logged
zinckingeye
Size C Battery
*****

Pogi/Ganda Points: 4
Offline Offline

Gender: Male
Posts: 186



« Reply #10 on: September 26, 2010, 06:38:34 AM »

i notice something here at your first post under code_read procedure...
Quote
code_read();
 //If no code is stored then default is 1234
 if(user1[0] == 0xFF && user1[1] == 0xFF && user1[2] == 0xFF && user1[3] == 0xFF )
 {
 eeprom_write(0x00,1);               // Write some data at address 00
 delay_20ms();
 eeprom_write(0x01,2);               // Write some data at address 02
 delay_20ms();
 eeprom_write(0x02,3);               // Write some data at address 04
 delay_20ms();
 eeprom_write(0x03,4);               // Write some data at address 08
 }
base d2 ang kelangan mong pindutin ay dapat 1234 right? pero wag mo sana kalimutan ang gamit ng ASCII. sa code mo kasi kelagan eh ng corresponding character ng ascii format of 1,2,3,4 which is mga unprintable characters sila and not the string format of  "1234". ang ascii code ng number 1,2,3,4 ay 49,50,51,52 respectively......

 i recommend you to try this code using character format...

 code_read();
 //If no code is stored then default is 1234
 if(user1[0] == 0xFF && user1[1] == 0xFF && user1[2] == 0xFF && user1[3] == 0xFF )
 {
 eeprom_write(0x00,'1');               // Write some data at address 00
 delay_20ms();
 eeprom_write(0x01,'2');               // Write some data at address 02
 delay_20ms();
 eeprom_write(0x02,'3');               // Write some data at address 04
 delay_20ms();
 eeprom_write(0x03,'4');               // Write some data at address 08
 }


or use this using ascii format

code_read();
 //If no code is stored then default is 1234
 if(user1[0] == 0xFF && user1[1] == 0xFF && user1[2] == 0xFF && user1[3] == 0xFF )
 {
 eeprom_write(0x00,49);               // Write some data at address 00
 delay_20ms();
 eeprom_write(0x01,50);               // Write some data at address 02
 delay_20ms();
 eeprom_write(0x02,51);               // Write some data at address 04
 delay_20ms();
 eeprom_write(0x03,52);               // Write some data at address 08
 }


yan ang tama.. it means na kelangan ko
change mo ung single quote into double quote kung mali ang code ko...
Logged

Wakupakels....
zinckingeye
Size C Battery
*****

Pogi/Ganda Points: 4
Offline Offline

Gender: Male
Posts: 186



« Reply #11 on: September 26, 2010, 07:42:35 AM »

yaikkss... mukang saLA PALA answer ko... medyo mahaba ang code mo...
bale nirevise ko yan...
ito sureness na... i explain briefly for you

Quote
void code_enter(void)
{
   while(1)
   {
      unsigned char key;
      i=0;
      scanned_key = scan_keypad();
      decoded_key = decode_key(scanned_key);
      display_key(decoded_key);
           
      code1 = decoded_key;
      i++;

   }
}

1. what kind of loop is code above?finite loop or infinite loop...
--->ayun infinite loop nga. ibig sabihin nyan ay natrap na ang execution sa code_enter procedure at hindi na babalik kahit kelan sa main procedure...ang dahilan nyan ay while(1). wala kang condition para makaalis ng loop... try mo nga ito kung gagana....

ito ang revise version

#include<pic.h>
#include <htc.h>   // Required to interface with delay routines

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif


__CONFIG(XT & WDTDIS & LVPDIS & UNPROTECT);

int i=0,j,m=0;

unsigned char code1[10] ,user1[4];

unsigned char scanned_key = 0x00;
unsigned char decoded_key = 0x00;

void init_LED(void)
{
   PORTB = 0xF0;
   TRISB = 0xF0;
}

void init_KEYPAD(void)
{
   TRISD = 0x70;         //PORTD<6:4> input, COLUMNS
   TRISD = ~0x0F;         //PORTD<3:0> output, ROWS     
   PORTD = 0b00001111;          //PORTD<3:0> initially high
}




unsigned char decode_key(unsigned char val)
{
   unsigned char key;

   switch(val)
   {
      case 0x60:            //0
         key = 0x01;
         break;
      case 0x50:            //1
         key = 0x02;
         break;
      case 0x30:            //2
         key = 0x03;
         break;
      case 0x61:            //3
         key = 0x04;
         break;
      case 0x51:            //4
         key = 0x05;
         break;
      case 0x31:            //5
         key = 0x06;
         break;
      case 0x62:            //6
         key = 0x07;
         break;
      case 0x52:            //7
         key = 0x08;
         break;
      case 0x32:            //8
         key = 0x09;
         break;
      case 0x63:            //9
         key = 0x0A;
         break;
      case 0x53:            //10
         key = 0x0B;
         break;
      case 0x33:            //11
         key = 0x0C;
         break;
      default:
         key = decoded_key;
         break;
   }
   
   return key;
   
}

void display_key(unsigned char key)
{
   PORTB = key;
}

unsigned char scan_keypad()
{
   unsigned char val_1 = 0x00;
   unsigned char val_2 = 0x00;
   unsigned char count1;
   
   
   for(count1=0;count1 < 4;count1++)
   {
      PORTD = ~(0x01 << count1);   //scan row
      __delay_ms(35);
      val_1 = PORTD & 0x70;      //read column, RD<6:4>
                           //while clearing RD<7> &
                           //RD<3:0>
      if (val_1 != 0x70)         //if a column is pressed
      {
         val_2 = (val_1 | count1);    //column (high-nibble) and count (low-nibble)
         return val_2;         //return value
      }
   }

   return 0xFF;               //return any value           
}

void code_enter(void)
{
   i=0;  //on the first character of code1 has been position... reading of value of code[0]
   while(decoded!=0x0a) //if the enter button is not press then wait for input, else stop looping and return to main...
   {
      scanned_key = scan_keypad();
      decoded_key = decode_key(scanned_key);
      code1 = display_key;                //store one character/number of code to their designated array index..

      display_key(decoded_key);     //display nga ba ito hehehe di ko alam ang gamit nito eh?
     
      i++;
   }
}

void code_read(void)  //Read data from EEPROM
{
 __delay_ms(20);
 user1[0] = eeprom_read(0x00);          // Read data from address 0
 __delay_ms(20);
 user1[1] = eeprom_read(0x01);          // Read data from address 2
 __delay_ms(20);
 user1[2] = eeprom_read(0x02);          // Read data from address 4
 __delay_ms(20);
 user1[3] = eeprom_read(0x03);          // Read data from address 8
 __delay_ms(20);
}

void code_write(void) //Write data from EEPROM
{
 __delay_ms(20);
 eeprom_write(0x00,code1[1]);               // Write some data at address 00
 __delay_ms(20);
 eeprom_write(0x01,code1[2]);               // Write some data at address 02
 __delay_ms(20);
 eeprom_write(0x02,code1[3]);               // Write some data at address 04
 __delay_ms(20);
 eeprom_write(0x03,code1[4]);               // Write some data at address 08

}


void change_code(void)
{

 i=1;
 code_enter();
 code_write();
 code_read();
}

void main()
{
 ADCON1 = 0x07;      // Configure AN pins as digital
 TRISA = 0x00;          // set direction to be output
 RA0  =1;
 init_KEYPAD();
 init_LED();                           // Initialize Keypad
 
 code_read();
 //If no code is stored then default is 1234
 if(user1[0] == 0xFF && user1[1] == 0xFF && user1[2] == 0xFF && user1[3] == 0xFF )
 {
 eeprom_write(0x00,1);               // Write some data at address 00
 __delay_ms(20);
 eeprom_write(0x01,2);               // Write some data at address 02
 __delay_ms(20);
 eeprom_write(0x02,3);               // Write some data at address 04
 __delay_ms(20);
 eeprom_write(0x03,4);               // Write some data at address 08
 }
 code_read();
 __delay_ms(100);
 do
{
  i = 0;
  code_enter();
  if((code1[4] == 0x0A) || code1[4]==0x0C) //if i push enter key/change code key after the 4-digit password...so the enter key/change code key must be located at code1[4]
  {
     if(code1[0] == 1 && code1[1] == 2 && code1[2] == 3 && code1[3] == 4)
     {
          if(code1[4] == 0x0C)
          {change_code();}

          if(code1[4]==0x0a)
          {RA0=0;}

     }
     if(code1[0] == user1[0] && code1[1] == user1[1] && code1[2] == user1[2] && code1[3] == user1[3] )//compare code with store one

     {
           if(code1[4] == 0x0C)
           {change_code();}
           if(code1[4] == 0x0A)
           {RA0  =0;
   __delay_ms(50);}
     }
     else
     {RA0=1;}
     }
 }
while(1);
}

hope na gumana.... kasakit naman sa ulo ung code mo....
Logged

Wakupakels....
zinckingeye
Size C Battery
*****

Pogi/Ganda Points: 4
Offline Offline

Gender: Male
Posts: 186



« Reply #12 on: September 26, 2010, 07:48:53 AM »

another revise na naman..... sensya na...


#include<pic.h>
#include <htc.h>   // Required to interface with delay routines

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif


__CONFIG(XT & WDTDIS & LVPDIS & UNPROTECT);

int i=0,j,m=0;

unsigned char code1[10] ,user1[4];

unsigned char scanned_key = 0x00;
unsigned char decoded_key = 0x00;

void init_LED(void)
{
   PORTB = 0xF0;
   TRISB = 0xF0;
}

void init_KEYPAD(void)
{
   TRISD = 0x70;         //PORTD<6:4> input, COLUMNS
   TRISD = ~0x0F;         //PORTD<3:0> output, ROWS     
   PORTD = 0b00001111;          //PORTD<3:0> initially high
}




unsigned char decode_key(unsigned char val)
{
   unsigned char key;

   switch(val)
   {
      case 0x60:            //0
         key = 0x01;
         break;
      case 0x50:            //1
         key = 0x02;
         break;
      case 0x30:            //2
         key = 0x03;
         break;
      case 0x61:            //3
         key = 0x04;
         break;
      case 0x51:            //4
         key = 0x05;
         break;
      case 0x31:            //5
         key = 0x06;
         break;
      case 0x62:            //6
         key = 0x07;
         break;
      case 0x52:            //7
         key = 0x08;
         break;
      case 0x32:            //8
         key = 0x09;
         break;
      case 0x63:            //9
         key = 0x0A;
         break;
      case 0x53:            //10
         key = 0x0B;
         break;
      case 0x33:            //11
         key = 0x0C;
         break;
      default:
         key = decoded_key;
         break;
   }
   
   return key;
   
}

void display_key(unsigned char key)
{
   PORTB = key;
}

unsigned char scan_keypad()
{
   unsigned char val_1 = 0x00;
   unsigned char val_2 = 0x00;
   unsigned char count1;
   
   
   for(count1=0;count1 < 4;count1++)
   {
      PORTD = ~(0x01 << count1);   //scan row
      __delay_ms(35);
      val_1 = PORTD & 0x70;      //read column, RD<6:4>
                           //while clearing RD<7> &
                           //RD<3:0>
      if (val_1 != 0x70)         //if a column is pressed
      {
         val_2 = (val_1 | count1);    //column (high-nibble) and count (low-nibble)
         return val_2;         //return value
      }
   }

   return 0xFF;               //return any value           
}

void code_enter(void)
{
   i=0;  //on the first character of code1 has been position... reading of value of code[0]
   while(decoded!=0x0a) //if the enter button is not press then wait for input, else stop looping and return to main...
   {
      scanned_key=0;// reinitialize scan key as empty
      while(scanned_key==0) if the key  is still no input detect then you must be in loop
      {
         scanned_key = scan_keypad();
      }
      decoded_key = decode_key(scanned_key);
      code1 = display_key;                //store one character/number of code to their designated array index..

      display_key(decoded_key);     //display nga ba ito hehehe di ko alam ang gamit nito eh?
     
      i++;
   }
}

void code_read(void)  //Read data from EEPROM
{
 __delay_ms(20);
 user1[0] = eeprom_read(0x00);          // Read data from address 0
 __delay_ms(20);
 user1[1] = eeprom_read(0x01);          // Read data from address 2
 __delay_ms(20);
 user1[2] = eeprom_read(0x02);          // Read data from address 4
 __delay_ms(20);
 user1[3] = eeprom_read(0x03);          // Read data from address 8
 __delay_ms(20);
}

void code_write(void) //Write data from EEPROM
{
 __delay_ms(20);
 eeprom_write(0x00,code1[1]);               // Write some data at address 00
 __delay_ms(20);
 eeprom_write(0x01,code1[2]);               // Write some data at address 02
 __delay_ms(20);
 eeprom_write(0x02,code1[3]);               // Write some data at address 04
 __delay_ms(20);
 eeprom_write(0x03,code1[4]);               // Write some data at address 08

}


void change_code(void)
{

 i=1;
 code_enter();
 code_write();
 code_read();
}

void main()
{
 ADCON1 = 0x07;      // Configure AN pins as digital
 TRISA = 0x00;          // set direction to be output
 RA0  =1;
 init_KEYPAD();
 init_LED();                           // Initialize Keypad
 
 code_read();
 //If no code is stored then default is 1234
 if(user1[0] == 0xFF && user1[1] == 0xFF && user1[2] == 0xFF && user1[3] == 0xFF )
 {
 eeprom_write(0x00,1);               // Write some data at address 00
 __delay_ms(20);
 eeprom_write(0x01,2);               // Write some data at address 02
 __delay_ms(20);
 eeprom_write(0x02,3);               // Write some data at address 04
 __delay_ms(20);
 eeprom_write(0x03,4);               // Write some data at address 08
 }
 code_read();
 __delay_ms(100);
 do
{
  i = 0;
  code_enter();
  if((code1[4] == 0x0A) || code1[4]==0x0C) //if i push enter key/change code key after the 4-digit password...so the enter key/change code key must be located at code1[4]
  {
     if(code1[0] == 1 && code1[1] == 2 && code1[2] == 3 && code1[3] == 4)
     {
          if(code1[4] == 0x0C)
          {change_code();}

          if(code1[4]==0x0a)
          {RA0=0;}

     }
     if(code1[0] == user1[0] && code1[1] == user1[1] && code1[2] == user1[2] && code1[3] == user1[3] )//compare code with store one

     {
           if(code1[4] == 0x0C)
           {change_code();}
           if(code1[4] == 0x0A)
           {RA0  =0;
   __delay_ms(50);}
     }
     else
     {RA0=1;}
     }
 }
while(1);
}
Logged

Wakupakels....
The Philippine Electronics and Technology Forum
   

 Logged
Pages: [1]   Go Up
  Print  
 
Jump to:  


Related Topics
Subject Started by Replies Views Last post
may assembly code(op code) ba kayo ng zilog/pic .
Microcontroller/Microprocessor Unit Projects and Programming
Siramiko 12 1999 Last post February 13, 2008, 11:26:41 AM
by motion55
password program
Computer Programming/Software Engineering
n 18 2996 Last post September 30, 2008, 12:36:13 PM
by Red Sonjah
Admin password sa PC. « 1 2 »
Absolute Beginner Technical Discussion
takot_sa_kuryente 35 4102 Last post July 21, 2008, 06:54:34 AM
by nrdvjr
HEX CODE CONVERSION TO SOURCE CODE « 1 2 »
ECE Students
emely 26 3986 Last post September 15, 2008, 10:01:07 AM
by maldihtah13
forgot your id or password
Computer Programming/Software Engineering
ineedhelp 1 746 Last post March 01, 2009, 10:24:16 PM
by Bleed
Bluetooth module password..
COE Students
2malness 3 589 Last post June 09, 2010, 01:15:50 PM
by zinckingeye
password code help new
Microcontroller/Microprocessor Unit Projects and Programming
cliff88 17 1204 Last post January 09, 2010, 08:53:40 PM
by cliff88
Powered by MySQL Powered by PHP Powered by SMF 1.1.15 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!