اطلاعیه

Collapse
No announcement yet.

مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)


    http://ir2up.ir/up19/47713701154521.rar
    برنامه مربوط به محمد یارمحمدی توقسمت پروژههای تکمیل شده avr است

    سلام .این برنامه تو پروتوس همه چیش عالیه

    اما تو عمل عدد 0 رو روی ال سی دی نمایش نمیده . ولی بقیه کلید همگی کار میکنند

    مهمتر اینکه خودش گفته رمز 1111 هست . اما تو عمل هر چی بهش رمز میدی میگه رمز اشتباه هست .

    اخه چرا مردم اذیت میکنند


    لطفی کنید بگید مشکل از چیه
    ادمهای خوب تو eca خیلی پیدا میشه

    #2
    پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)

    سلام. احتمالا یک فایل eeprom هم باید کنار فایل های پروژه باشد که باید آن را در eeprom میکرو پروگرام کنید. اگر نبود می توانید تابعی تعریف کنید که با اجرا شدن آن متغیرهای ذخیره نگهدارنده پسورد در eeprom برابر با صفر شوند. این تابع می تواند با تغییر وضعیت یکی از پورت های بدون استفاده میکرو، اجرا شود. در واقع آن ورودی مانند کلید ریست پسورد عمل می کند.

    دیدگاه


      #3
      پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)

      سلام
      من برنامه را خواندم (البته نه بصورت دقیق و کامل) ممکنه تشخیص من اشتباه باشه.
      فکر کنم مشکل از مقدار دهی اولیه EEPROM هست : شما وقتی برنامه را پروگرام میکنید و اجرا میکنید جایی توی برنامه تعریف نشده که برای دفعه اول مقدار پیشفرض توی EEPROM قرار بگیره پس باید خودتون یک فایل باینری تهیه کنید و چهار بایت اول EEPROM را برابر با 1و1و1و1 کنید.

      البته میتونید این کار را داخل خود سورس میکرو انجام بدهید:
      این را ابتدای برنامه جایی که دیگر متغیر ها را نوشته اند اضافه کنید.
      کد:
      char eeprom FirstUSE;
      این کد را قبل از حلقه while اصلی برنامه قرار بدهید:
      کد:
      if(FirstUSE !=0x0A) 
      {
      password[0] =0x01;
      delay_ms(15);
      password[1] =0x01;
      delay_ms(15);
      password[2] =0x01;
      delay_ms(15);
      password[3] =0x01;
      delay_ms(15);
      FirstUSE = 0x0A;
      delay_ms(15);
      }
      البته این را هم بگم به این پروژه اعتماد نکن چون خیلی از اصول برنامه نویسی رعایت نشده!

      موفق باشید
      امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

      دیدگاه


        #4
        پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)



        اقا مرحمت کنید کمک کنید

        الان اگه میشه خودت فایل دانلود کن و تصحیح کن و بزارش تا دانلودش کنم .دارم دیونه میشم

        هر جور شده .اگه حتی کلک مرغابی هم شده بگو تا روش اجرا کنم

        فردا صبح باید دست استاد بدم
        ادمهای خوب تو eca خیلی پیدا میشه

        دیدگاه


          #5
          پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)

          سلام

          من متاسفانه کدویژن روی سیستمم ندارم با winavr کار میکنم
          ولی این کد را کامپایل کن درست میشه
          کد:
          #include <mega8.h>
           #include <delay.h>
          // Alphanumeric LCD Module functions
          #asm
            .equ __lcd_port=0x18 ;PORTB
          #endasm
          #include <lcd.h>
          
          // Declare your global variables here
          char keypad(void);
          char password_check(void);
          void new_password(void);
          #pragma warn-
          char eeprom password[5];
          char eeprom FirstUSE;
          #pragma warn+
          char password_att[5], password_temp[5],key=0,c,i=0,accept=0;
          void main(void)
          {
          
          PORTB=0x00;
          DDRB=0x00;
          
          PORTC=0x00;
          DDRC=0x00;
          
          PORTD=0x00;
          DDRD=0x78;
          
          TCCR0=0x00;
          TCNT0=0x00;
          
          
          ACSR=0x80;
          SFIOR=0x00;
          
          // LCD module initialization
          lcd_init(16);
          
          
          // ***************************************Check First Use
          if(FirstUSE !=0x0A) 
          {
          password[0] =0x01;
          delay_ms(15);
          password[1] =0x01;
          delay_ms(15);
          password[2] =0x01;
          delay_ms(15);
          password[3] =0x01;
          delay_ms(15);
          FirstUSE = 0x0A;
          delay_ms(15);
          }
          
          PORTD=255;
          while (1)
             {   
             lcd_clear();
             lcd_putsf("Enter password *");
             lcd_gotoxy(0,1);
             lcd_putsf("Change password#");
             PORTD.3=1;
             PORTD.4=1;
             PORTD.5=1;
             PORTD.6=0; 
             if(PIND.2==0)
              {
                  delay_ms(10);
                  if(PIND.2==0)
                   {
                      new_password();
                   }
              }              
              if(PIND.0==0)
              {
                  delay_ms(10);
                  if(PIND.0==0)
                   {
                      password_check();
                   }
              }              
             };
             }  
          
          ////////////////
          ////////////////
          char password_check()
          {    
              int temp=0; 
              lcd_clear();
              lcd_putsf("Enter password:"); 
              lcd_gotoxy(0,1); 
              for (i=0;i<4;i++)    
              {
                  password_att[i]=keypad();
                  lcd_putchar('*');
              }  
              for (i=0;i<4;i++)    
              {
                  password_temp[i]=password[i];
              }   
              for (i=0;i<4;i++)    
              {  
                if (password_att[i]==password_temp[i])
                  temp++;
              } 
              if(temp<4)
              {
                  lcd_clear();
                  lcd_putsf("invalid password!");
                  temp=0;
                  delay_ms(500);
                  accept=0;
              }
              else if(temp==4) 
               {   
                  lcd_clear();
                  lcd_putsf("Password accepted!");
                  delay_ms(500);
                  accept=1; 
               }
              
              return accept;
              
          } 
          
          ////////////////
          ////////////////
          void new_password(void)
          {   
              int temp;
              lable:
              temp=0;
              lcd_clear(); 
              lcd_putsf("Enter old pass:");
              lcd_gotoxy(0,1); 
              for (i=0;i<4;i++)    
              {
                  password_att[i]=keypad();
                  lcd_putchar('*');
              }
              for (i=0;i<4;i++)    
              {
                  password_temp[i]=password[i];
              }   
              for (i=0;i<4;i++)    
              {  
                if (password_att[i]==password_temp[i]) 
                  temp++;
              } 
              if(temp>3) 
               {   
                  lcd_clear();
                  lcd_putsf("Enter new pass:"); 
                  lcd_gotoxy(0,1); 
                  for (i=0;i<4;i++)    
                  {   
                    password[i]=keypad();
                    lcd_putchar('*');
                  }
               } 
               else if(temp<4)
              {
                  lcd_clear();
                  lcd_putsf("invalid password!");
                  temp=0;
                  delay_ms(500);
                  goto lable;
              }
          } 
          ////////////////
          ////////////////
          char keypad(void)
          {    
              char key_press=1;
              while(key_press) 
              {
              //////
              PORTD.3=0;
              PORTD.4=1;
              PORTD.5=1;
              PORTD.6=1; 
              if(PIND.0==0)
              {
                  delay_ms(10);
                  if(PIND.0==0)
                  {
                      key_press=0;
                      key=1;
                   }
              }    
              if(PIND.1==0)
              {
                  delay_ms(10);
                  if(PIND.1==0)
                   {
                      key_press=0;
                      key=2;
                   }
              }
              if(PIND.2==0)
              {
                  delay_ms(10);
                  if(PIND.2==0)
                   {
                      key_press=0;
                      key=3;
                   }
              } 
              
              /////
              PORTD.3=1;
              PORTD.4=0;
              PORTD.5=1;
              PORTD.6=1; 
              if(PIND.0==0)
              {    
                  key_press=0;
                  delay_ms(10);
                  if(PIND.0==0)
                   {
                      key_press=0;
                      key=4;
                   }
              }
              if(PIND.1==0)
              {    
                  key_press=0;
                  delay_ms(10);
                  if(PIND.1==0)
                  {
                      key_press=0;
                      key=5;
                   }
              }
              if(PIND.2==0)
              {        
                  key_press=0;
                  delay_ms(10);
                  if(PIND.2==0)
                  {
                      key_press=0;
                      key=6;
                   }
              } 
              
              //////
              PORTD.3=1;
              PORTD.4=1;
              PORTD.5=0;
              PORTD.6=1; 
              if(PIND.0==0)
              {      
                  key_press=0;
                  delay_ms(10);
                  if(PIND.0==0)
                  {
                      key_press=0;
                      key=7;
                   }
              }
              if(PIND.1==0)
              {      
                  key_press=0;
                  delay_ms(10);
                  if(PIND.1==0)
                  {
                      key_press=0;
                      key=8;
                   }
              }
              if(PIND.2==0)
              {     
                  key_press=0;
                  delay_ms(10);
                  if(PIND.2==0)
                  {
                      key_press=0;
                      key=9;
                   }
              }              
              
              //////
              PORTD.3=1;
              PORTD.4=1;
              PORTD.5=1;
              PORTD.6=0; 
              
              if(PIND.1==0)
              {
                  key_press=0;
                  delay_ms(10);
                  if(PIND.1==0)
                  {
                      key_press=0;
                      key=0;
                   }
              }
               
              
              }  
              delay_ms(100);
              return key; 
          }
          اگه شد پروژه را اصلاح میکنم و امشب پ میکنم

          موفق باشید
          امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

          دیدگاه


            #6
            پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)

            اقا دمت گرم تست میکنم جواب بهت میگم

            ادمهای خوب تو eca خیلی پیدا میشه

            دیدگاه


              #7
              پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)

              اقا برنامه شما رو کلا تو یه پوشه جدید باز کردم الان فایل هگز تولید میشه و تو پروتوس کار میکنه

              اما برا پروگرم کردن ایسی میگه اصلا فایل هگز وجود نداره

              بزار یه خورده سعی کنم ببینم مشکل از چیه
              ادمهای خوب تو eca خیلی پیدا میشه

              دیدگاه


                #8
                پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)

                اقا .الهی که خیر ببینی . خداوکیلی الان گریه ام گرفته

                فعلا تو تست اولیه جواب داد . دمت گرم


                خب الان یه دو خط برنامه بهش اضافه کنم برای وصل کردن رله زمانی که رمز درست بود

                جواب نهایی بهت میگم
                ادمهای خوب تو eca خیلی پیدا میشه

                دیدگاه


                  #9
                  پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)



                  همه چی OK شد.


                  انشاالله که سلامت باشی و انچه که از خدا میخوای بهت بده

                  ادمهای خوب تو eca خیلی پیدا میشه

                  دیدگاه


                    #10
                    پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شده از خود انجمن)

                    قسمت نوشته های سطر دوم LCD یه خورده حالت تثبیت شده نداره (چشمک زن)

                    ایا میشه با دستکاری زمان مربوط به این قسمت مشکل برطرف کرد
                    ادمهای خوب تو eca خیلی پیدا میشه

                    دیدگاه


                      #11
                      پاسخ : مشکل عملی با برنامه قفل رمز (دانلود شد&#1607

                      الوعده وفا :biggrin:

                      توی این مدت من داشتم این پروژه را مینوشتم ، شما خیلی پست داشتید انقدر عجله داری

                      این هم یک برنامه توپ برای قفل دیجیتال
                      فقط خیلی روش کار نکردم
                      ظاهر پروژه شبیه به پروژه قبلی هست برای بازگشت کلید # را میتونی بزنی
                      خودش دفعه اول راه اندازی را تشخیص میده و کد پیشفرض را 1111 قرار میده

                      اگه دقت کنی توی این پروژه صفحه کلید اسکن دایم نمیشه که این خودش یک مزیت به حساب میاد

                      برای رله هم پایه C0 بمدت 1 ثانیه روشن میشه که میتونی استفاده کنی

                      کد:
                      #include <mega8.h>
                       #include <delay.h> 
                      // Alphanumeric LCD Module functions
                      #asm
                        .equ __lcd_port=0x18 ;PORTB
                      #endasm
                      #include <lcd.h>
                      
                      #define Star   10
                      #define Sharp   11
                      
                      
                      char passcode_check(void);
                      char new_passcode(void);
                      unsigned char GetKeyCode (void);
                      void FirstPage (void);
                      
                      //*****************************************
                      unsigned char eeprom passcode[4];
                      unsigned char eeprom FirstUSE;
                      //*****************************************
                      
                      
                      
                      
                      void main(void)
                      {
                      unsigned char KEY_Value;
                      DDRD  =  0b00000111;
                      PORTD =  0b01111000; 
                      
                      DDRC = 0x01;
                      
                      lcd_init(16);
                      lcd_clear();
                      
                      
                      
                      if(FirstUSE !=0x0A) 
                      { 
                      lcd_puts("First Use");
                      lcd_gotoxy(0,1);
                      lcd_puts("DP = 1111"); 
                      
                      passcode[0] =0x01;
                      delay_ms(15);
                      passcode[1] =0x01;
                      delay_ms(15);
                      passcode[2] =0x01;
                      delay_ms(15);
                      passcode[3] =0x01;
                      delay_ms(15);
                      FirstUSE = 0x0A;
                      delay_ms(200);
                      lcd_clear();
                      }
                      
                      FirstPage();
                          
                            
                      while (1)
                      {  
                      
                          if ((PIND & 0b01111000) != 0b01111000) // Check keypad  
                          { 
                          
                           KEY_Value = GetKeyCode();
                           
                      
                           
                         if(KEY_Value == Sharp)
                          {
                              delay_ms(10);
                                  new_passcode(); 
                                  
                               
                          } 
                                       
                          if(KEY_Value == Star)
                          {
                              delay_ms(10);
                                  passcode_check();
                          }
                            
                          delay_ms(20);
                          while ((PIND & 0b01111000) != 0b01111000) ;              
                         }
                         
                         
                      };
                      } 
                      
                      void FirstPage (void)
                      {
                      lcd_clear();
                         lcd_gotoxy(0,0);
                         lcd_puts("Enter PassCode *");
                         lcd_gotoxy(0,1);
                         lcd_puts("Change PassCode#");
                      }
                      
                      char passcode_check()
                      {  
                      unsigned char temp[4];
                      unsigned char count = 0;
                      unsigned char Key;
                      lcd_clear();
                      lcd_gotoxy(0,0);
                       lcd_puts("Enter Passcode:"); 
                       delay_ms(200);
                       
                      
                      
                      lcd_gotoxy(0,1);
                      while(1)
                      {
                       if ((PIND & 0b01111000) != 0b01111000) // Check keypad 
                       { 
                       
                       Key = GetKeyCode(); 
                       temp[count++] = Key ;
                        
                       lcd_puts("*");
                        if(count == 4) 
                        {  
                        if(temp[0] == passcode[0] && temp[1] == passcode[1] && temp[2] == passcode[2] && temp[3] == passcode[3])
                        { 
                        PORTC.0 = 1; // for relay
                        lcd_puts(" OK");
                        delay_ms(1000);
                        FirstPage();
                        PORTC.0 = 0; // for relay
                        return 1;             
                        }
                        else 
                        {
                        lcd_puts(" ERROR");
                        delay_ms(1000);
                        FirstPage();
                        return 0; 
                        }
                        }        
                        
                        if(Key == Sharp){ FirstPage();return 0;}
                        
                       while ((PIND & 0b01111000) != 0b01111000) ; 
                       }
                      }
                      
                       
                        return 0;
                      } 
                      
                      char new_passcode(void)
                      {   
                      unsigned char temp[4];
                      unsigned char count = 0;
                      unsigned char Key ,verify = 0;
                      
                      lcd_clear();
                      lcd_gotoxy(0,0);
                       lcd_puts("Old Passcode"); 
                       delay_ms(200);
                       
                      
                      
                      lcd_gotoxy(0,1);
                      while(1)
                      {
                       if ((PIND & 0b01111000) != 0b01111000) // Check keypad 
                       { 
                       
                       Key = GetKeyCode(); 
                       temp[count++] = Key ;
                        
                       lcd_puts("*");
                       if(count == 4) 
                       {
                        if(verify == 0)
                        {  
                        if(temp[0] == passcode[0] && temp[1] == passcode[1] && temp[2] == passcode[2] && temp[3] == passcode[3])
                        { 
                        lcd_puts(" OK");
                        verify= 1;
                        count = 0;
                        delay_ms(300);
                         lcd_clear();
                         lcd_gotoxy(0,0);
                         lcd_puts("New Passcode"); 
                         lcd_gotoxy(0,1);          
                        }
                        else 
                        {
                        lcd_puts(" ERROR");
                        delay_ms(1000);
                        FirstPage();
                        return 0; 
                        }
                        }
                        else
                        {
                         passcode[0] = temp[0];
                        delay_ms(10);        
                          passcode[1] = temp[1];
                        delay_ms(10); 
                          passcode[2] = temp[2];
                        delay_ms(10); 
                          passcode[3] = temp[3];
                        delay_ms(10);     
                        lcd_puts(" Saved");
                        delay_ms(1000); 
                          FirstPage();
                        return 1; 
                        } 
                        }
                        if(Key == Sharp){ FirstPage();return 0;}
                        
                       while ((PIND & 0b01111000) != 0b01111000) ; 
                       }
                      }
                      
                       
                        return 0;
                      } 
                      
                      
                      
                      unsigned char GetKeyCode (void)
                      {
                      unsigned char A,B , KEY_CODE;
                      
                        
                        // delay_ms(1000);  
                        A = PIND & 0b01111000; 
                        delay_ms(10);  
                        DDRD =   0b01111000;
                        PORTD =   0b00000111; 
                        
                        B = PIND & 0b00000111; 
                        delay_ms(10);
                        
                        DDRD  =  0b00000111; 
                        PORTD =  0b01111000; 
                      
                        
                          
                        
                        
                        switch (A)
                        {     
                         case 0b01110000:
                         switch (B)
                         {
                         case 0b00000110:
                            KEY_CODE = 1;
                         break; 
                         case 0b00000101: 
                            KEY_CODE = 2;
                         break;
                         case 0b00000011: 
                            KEY_CODE = 3;
                         break;  
                         }
                        break; 
                        
                        case 0b01101000:
                         switch (B)
                         {
                         case 0b00000110:
                            KEY_CODE = 4;
                         break; 
                         case 0b00000101: 
                            KEY_CODE = 5;
                         break;
                         case 0b00000011: 
                            KEY_CODE = 6;
                         break;   
                         }
                        break;
                        
                      
                        case 0b01011000:
                         switch (B)
                         {
                         case 0b00000110:
                            KEY_CODE = 7;
                         break; 
                         case 0b00000101: 
                            KEY_CODE = 8;
                         break;
                         case 0b00000011: 
                            KEY_CODE = 9;
                         break;  
                         }
                        break;
                           
                        
                         case 0b00111000:
                         switch (B)
                         {
                         case 0b00000110:
                            KEY_CODE = Star;
                         break; 
                         case 0b00000101: 
                            KEY_CODE = 0;
                         break;
                         case 0b00000011: 
                            KEY_CODE = Sharp;
                         break;  
                         }
                        break;
                        }  
                        
                         return KEY_CODE;
                      }
                      دانلود پروژه :
                      http://www.uplooder.net/cgi-bin/dl.c...8c771bf4a869be

                      موفق باشید
                      امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                      دیدگاه

                      لطفا صبر کنید...
                      X