اطلاعیه

Collapse
No announcement yet.

یه برنامه ی درست برای کار با کیبورد ماتریسی می خوام

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

    یه برنامه ی درست برای کار با کیبورد ماتریسی می خوام

    سلام، من هر برنامه ای برای کار با کیبورد ماتریسی تو AVR می نویسم کار نمی کنه این یه نمونه از برنامه هاییه که نوشتم:
    "

    $regfile = "m32def.dat"
    $crystal = 8000000
    Config Portb = Input
    Config Portd = Output
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Pind.0 , Db5 = Pind.1 , Db6 = Pind.2 , Db7 = Pind.3 , Rs = Pind.4 , E = Pind.5
    Config Kbd = Port C , Debounce = 50 , Delay = 100
    Dim A As Byte
    Do
    A = Getkbd()
    Loop Until A <> 16
    Lcd A

    ولی آخرش کلی اخطار میده معمولا eror 202 و eror 1 میاد که همشم در رابطه با خط آخره
    لطفا کمکم کنید، ممنونم
    آدم ها را بدون اینکه به وجودشان نیاز داشته باشی دوست بدار همانند کاری که خدا در حق تو انجام میدهد...

    #2
    پاسخ : یه برنامه ی درست برای کار با کیبورد ماتریسی می خوام

    سلام یه برنامه خوب تو کد ویژن
    unsigned char uu=0;
    flash unsigned char keytbl[16]={0xee,0xed,0xeb,0xe7,
    0xde,0xdd,0xdb,0xd7,
    0xbe,0xbd,0xbb,0xb7 ,
    0x7e,0x7d,0x7b,0x77};
    unsigned char scankey (void);

    unsigned char scankey (void)
    {
    unsigned char u4=0;
    uu=0;

    DDRA=0x0f;
    PORTA=0xf0;
    delay_us (5);
    key1=PINA;
    DDRA=0xf0;
    PORTA=0x0f;
    delay_us (5);
    key1=key1|PINA;

    if ( key1 != 0xff){u4=1;uu=1;}

    delay_ms (2);
    if (( key1 !=0xff) & (u4 == 1))
    {
    for ( butnum=0 ;butnum<16 ; butnum++ )
    {
    if ( keytbl[butnum]==key1) { break; };

    };
    if ( butnum==16) { butnum=13;}

    }
    else { butnum=13;};
    if (u4==1)
    {switch (butnum) {

    case 0 :return 1;break;
    case 1 :return 2;break;
    case 2 :return 3;break;
    case 3 :return 30;break;
    case 4 :return 4;break;
    case 5 :return 5;break;
    case 6 :return 6;break;
    case 7 :return 31;break;
    case 8 :return 7;break;
    case 9 :return 8;break;
    case 10 :return 9;break;
    case 11 :return 32;break;
    case 12 :return '.';break;
    case 13 :return 0;break;
    case 14 :return 34;break;
    case 15 :return 35;break;
    };
    };


    }
    البته اون متغییر سراسری که uu تعریف شده برای اینکه اگه حین انجام برنامه چندین بار برنامه scan انجام شد ولی کلیدی فشار داده نشد تغییراتی در برنامه main تان ایجاد نشه بسته به سلیقه خودتون میتونید حذف یا از اون استفاده کنید

    دیدگاه


      #3
      پاسخ : یه برنامه ی درست برای کار با کیبورد ماتریسی می خوام

      دوست عزیز مشکل از این خط هست:

      $regfile = "m32def.dat"
      $crystal = 8000000
      Config Portb = Input
      Config Portd = Output
      Config Lcd = 20 * 4
      Config Lcdpin = Pin , Db4 = Pind.0 , Db5 = Pind.1 , Db6 = Pind.2 , Db7 = Pind.3 , Rs = Pind.4 , E = Pind.5
      Config Kbd = Port C , Debounce = 50 , Delay = 100
      Dim A As Byte
      Do
      A = Getkbd()
      Loop Until A <> 16
      Lcd A


      یک اسبیس اضافی گذاشتی و portc رو نمیشناسه

      دیدگاه

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