اطلاعیه

Collapse
No announcement yet.

اسکن اعداد چند رقمی از کی پد در atmega 16

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

    اسکن اعداد چند رقمی از کی پد در atmega 16

    سلام

    باید یک عدد دو رقمی را از ورودی کی پد 3 در 4 اسکن کرده و بر روی یک سون سگمنت 2 کارکتری نمایش بدیم.
    تا حدیش رو خودم نوشتم
    که اعداد 0 تا 9 رو بتونه چاپ کنه
    ولی نمیدونم چطوری باید اعداد چند رقمی رو از ورودی بگیرم !

    کد:
      #include <mega16.h>
      #include <delay.h>
      #define KEYPAD A //KEYPAD IS ATTACHED ON PORTA
      #define KEYPAD_PORT PORTA
      #define KEYPAD_DDR  DDRA
      #define KEYPAD_PIN  PINA
      #define p1 PORTD.0
      #define p2 PORTD.1
      char n[10] = {0b11000000,0b11111001,0b10100100,
    0b10110000,0b10011001,0b10010010,0b10000010,0b11011000,
    0b10000000,0b10010000};
      unsigned int key1,key2;
      unsigned int GetKeyPressed()
      {
       unsigned int r,c;
       KEYPAD_PORT|= 0X0F;
       for(c=0;c<3;c++)
       {
         KEYPAD_DDR&=~(0X7F);
         KEYPAD_DDR|=(0X40>>c);
         for(r=0;r<4;r++)
         {
          if(!(KEYPAD_PIN & (0X08>>r)))
          {
            return (r*3+c);
          }
         }
       }
       return 0XFF;//Indicate No key pressed
      } 
      void show(void)
      {   
         p2 = 1;
         
         PORTC = n[key2];
         delay_ms(15);
         p2 = 0 ;
    
         p1 = 1;
    
         PORTC = n[0];
         delay_ms(15);
         p1 = 0 ;
      }
      void main()
      {
      DDRC = 0xFF; 
      DDRD = 0xFF;
      DDRA = 0x00; 
    
      key1=0;
      key2=0;
       //Now initialize the module
       while(1)
       { 
       show();
        key1=GetKeyPressed(); //Get the keycode of pressed key
         switch (key1){
         case 10:
         key1 = 0;
         key2 = 0;
         break;
         
         case 0:
         key1 = 0;
         key2 = 1;
         break;
         
         case 1:
         key1 = 0;
         key2 = 2;
         break;
         
         case 2:
         key1 = 0;
         key2 = 3;
         break;
         
         case 3:
         key1 = 0;
         key2 = 4;
         break;
         
         case 4:
         key1 = 0;
         key2 = 5;
         break;
         
         case 5:
         key1 = 0;
         key2 = 6;
         break;
         
         case 6:
         key1 = 0;
         key2 = 7;
         break; 
    
         case 7:
         key1 = 0;
         key2 = 8;
         break; 
         
         case 8:
         key1 = 0;
         key2 = 9;
         break;
         
    
    
        }
       }
       }

    #2
    پاسخ : اسکن اعداد چند رقمی از کی پد در atmega 16

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

    دیدگاه


      #3
      پاسخ : اسکن اعداد چند رقمی از کی پد در atmega 16

      مشکل اینه که اگر بخوام انقدر صبر کنم تا کاربر یک عدد جدید وارد کنه (یعنی هر بار کنترل کنم!) سون سگمنت خاموش میشه !
      اینطوری هم خیلی سریع چک میکنه که کاربر خیلی سریع عمل کنه فقط عدد اول رو میتونه وارد کنه

      دیدگاه


        #4
        پاسخ : اسکن اعداد چند رقمی از کی پد در atmega 16

        نوشته اصلی توسط Alir3za
        مشکل اینه که اگر بخوام انقدر صبر کنم تا کاربر یک عدد جدید وارد کنه (یعنی هر بار کنترل کنم!) سون سگمنت خاموش میشه !
        اینطوری هم خیلی سریع چک میکنه که کاربر خیلی سریع عمل کنه فقط عدد اول رو میتونه وارد کنه
        خوب به دلیل اینکه الگوریتم برنامه شما اشتباه است . شما باید دیگه سعی کنید برنامه که می نویسید اینتراپتی باشی . یا حداقل اگه از روش poling استفاده می کنی جوری برنامهرو بنویسی که در یک نقطه قفل نشه .

        جالا یه پیشنهاد شما هر 50 میلی ثانیه که حالا می شه با یک دیلی هم ایجاد کرد کیبرد رو چک کن اگه کلیدی زده شده بود بخونش و بزار داخل ارایه بعد هم برو سراغ ادامه کار ها انتهایی loop برنامه که دوباره برگشتی و delay رو هم رد کردی دوباره برو سراغ کیبورد حالا اگه تعداد اعداد مورد نظر درست بود برو سراغ چک کردن کلش یا اگه هر کاری که دوست داری کارت هم تموم شدش برو سراغ ادامه کار ها در loop و سلام
        اگر که مشکلی داشتی باز ه کدت رو بزرا تا مشکل رو حل کنیم .

        دیدگاه

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