اطلاعیه

Collapse
No announcement yet.

اتصال کیبرد عدد PS2 به AVR

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

    اتصال کیبرد عدد PS2 به AVR

    یه کیبرد کامپیوتر از همونها که فقط روش عدد داره فقط اعداد سمت راست کیبرد رو به AVR متصل کردم
    از برنامه های دوستان هم استفاده کردم ولی نتیجه ای نگرفتم
    به نظر شما ایراد کار کجاست ؟
    کد:
    $regfile = "m16def.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , _
     Db7 = Portb.7 , E = Portb.2 , Rs = Portb.3
    Config Keyboard = Pind.2 , Data = Pind.4 , Keydata = Keydata
    
    Dim B As Byte
    
    Home
    cls
    Lcd "keyboard"
    Wait 2
    Cls
    Do
    B = Getatkbd()
    If B > 0 Then
    Cls
    Lcd String(1 , B)
    Waitms 20
    End If
    Loop
    End                             'end program
    
    Keydata:
    Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
    Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
    Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
    Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
    Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
    Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
    Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
    Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
    'shifted keys UPPER case
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
    Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
    Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
    Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
    Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
    Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
    Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
    مردود شدن بهتر از با تقلب قبول شدن است

    #2
    پاسخ : اتصال کیبرد عدد PS2 به AVR

    سلام
    :nerd:


    شمر ۱۴۰۰سال پیش مُرد؛شمر زمانت بشناس.
    [img width=400 height=100]http:///uploads/140623781981451.png[/img]
    [glow=green,2,100]یاحسین تشنه لب[/glow]

    دیدگاه


      #3
      پاسخ : اتصال کیبرد عدد PS2 به AVR

      ممنون از پاسخ شما
      به نظر شما برنامه من ایراد داره ؟
      تقریبا برنامه شما همون برنامه منه ولی چرا من جواب نمیگیرم؟
      مردود شدن بهتر از با تقلب قبول شدن است

      دیدگاه


        #4
        پاسخ : اتصال کیبرد عدد PS2 به AVR

        ایراد کارو پیدا کردم
        یکی از سیم های اتصال ال سی دی ایراد داشت
        ولی هنوز بعضی از کلید ها جواب نمیده
        من هنوز فلسفه این اعداد جدول رو نفهمیدم این اعداد از کجا اومدن ؟ چرا اینقدر صفر وجود داره ؟
        تورو خدا کسی میدونه کمک کنه نیاز فوری دارم :angry: :angry: :angry:
        مردود شدن بهتر از با تقلب قبول شدن است

        دیدگاه


          #5
          پاسخ : اتصال کیبرد عدد PS2 به AVR

          مردود شدن بهتر از با تقلب قبول شدن است

          دیدگاه


            #6
            پاسخ : اتصال کیبرد عدد PS2 به AVR

            تورو خدا کسی در مورد این اعداد چیزی میدونه کمک کنه
            یعنی تا حالا کسی کار نکرده ؟ :eek:
            مردود شدن بهتر از با تقلب قبول شدن است

            دیدگاه


              #7
              پاسخ : اتصال کیبرد عدد PS2 به AVR

              نوشته اصلی توسط masoud58
              ایراد کارو پیدا کردم
              یکی از سیم های اتصال ال سی دی ایراد داشت
              ولی هنوز بعضی از کلید ها جواب نمیده
              من هنوز فلسفه این اعداد جدول رو نفهمیدم این اعداد از کجا اومدن ؟ چرا اینقدر صفر وجود داره ؟
              تورو خدا کسی میدونه کمک کنه نیاز فوری دارم :angry: :angry: :angry:
              سلام
              ابتدا باید کدهای خام رو بگیرید و یاد داشت کنید و اون ها را با استفاده از جدول لوکاپ کدها رو تبدیل کنید
              توی اون جدول لوکاپ باید مقدار صفر ها رو تغییر دهید تا کدها رو بدست آورید
              اگر به زبان سی کار میکنید از لینک زیر کمک بگیرید
              http://www.eca.ir/forum2/index.php?topic=93142.0
              http://www.eca.ir/forum2/index.php?topic=92782.msg580592#msg580592

              موفق باشید
              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
              معرفی نرم افزار Codewizard PWM
              با من بیشتر آشنا شوید

              دیدگاه


                #8
                پاسخ : اتصال کیبرد عدد PS2 به AVR

                نوشته اصلی توسط Saman.Asadi
                سلام
                ابتدا باید کدهای خام رو بگیرید و یاد داشت کنید و اون ها را با استفاده از جدول لوکاپ کدها رو تبدیل کنید
                توی اون جدول لوکاپ باید مقدار صفر ها رو تغییر دهید تا کدها رو بدست آورید
                اگر به زبان سی کار میکنید از لینک زیر کمک بگیرید
                http://www.eca.ir/forum2/index.php?topic=93142.0
                http://www.eca.ir/forum2/index.php?topic=92782.msg580592#msg580592

                موفق باشید
                ممنون از پاسخ شما
                میدونم که این کدها کدهای اسکی هستن
                من در مورد ترتیب و چیدمان این کدها سوال دارم
                می خوام بدونم بر چه اساسی این کدها تو جدول چیده شدن ؟؟؟ :question:
                مثلا کد دکمه enter که برابر 13 هست چرا در خانه نودو یکم قرار گرفته ؟؟؟!!!!! :eek:
                مردود شدن بهتر از با تقلب قبول شدن است

                دیدگاه


                  #9
                  پاسخ : اتصال کیبرد عدد PS2 به AVR

                  اگر اشتباه نکنم اون اعداد مربوط به Scancode هستند. یعنی میکرو اسکن کد رو از کیبرد میگیره و به اسکی تبدیل میکنه.

                  دیدگاه


                    #10
                    پاسخ : اتصال کیبرد عدد PS2 به AVR

                    نوشته اصلی توسط freedom_truth
                    اگر اشتباه نکنم اون اعداد مربوط به Scancode هستند. یعنی میکرو اسکن کد رو از کیبرد میگیره و به اسکی تبدیل میکنه.
                    فکر می کنم شما دارید اشتباه می کنید
                    کد اسکی enter برابر 13 هست
                    مردود شدن بهتر از با تقلب قبول شدن است

                    دیدگاه


                      #11
                      پاسخ : اتصال کیبرد عدد PS2 به AVR

                      نوشته اصلی توسط masoud58
                      میدونم که این کدها کدهای اسکی هستن
                      من در مورد ترتیب و چیدمان این کدها سوال دارم
                      می خوام بدونم بر چه اساسی این کدها تو جدول چیده شدن ؟؟؟ :question:
                      مثلا کد دکمه enter که برابر 13 هست چرا در خانه نودو یکم قرار گرفته ؟؟؟!!!!! :eek:
                      خیر جانم
                      اینطور نیست ...
                      کدی که از کیبرد خارج میشه با کد اسکی زمین تا آسمون فرق میکنه ...

                      نوشته اصلی توسط masoud58
                      فکر می کنم شما دارید اشتباه می کنید
                      کد اسکی enter برابر 13 هست
                      عزیز دل برادر
                      چرا لینکی که دادم رو نمیخونی؟؟؟ :NO:
                      http://www.eca.ir/forum2/index.php?topic=92782.msg580592#msg580592
                      کتاب با ارزشی هست ...
                      این ها را خواهشا" بخوانید ...

                      موفق باشید
                      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                      معرفی نرم افزار Codewizard PWM
                      با من بیشتر آشنا شوید

                      دیدگاه


                        #12
                        پاسخ : اتصال کیبرد عدد PS2 به AVR

                        نوشته اصلی توسط Saman.Asadi
                        خیر جانم
                        اینطور نیست ...
                        کدی که از کیبرد خارج میشه با کد اسکی زمین تا آسمون فرق میکنه ...
                        تا حدودی درست می گویید ...
                        ولی درست تر اینه که از اسمهای زیر استفاده کنیم ...
                        عزیز دل برادر
                        چرا لینکی که دادم رو نمیخونی؟؟؟ :NO:
                        http://www.eca.ir/forum2/index.php?topic=92782.msg580592#msg580592
                        کتاب با ارزشی هست ...
                        این ها را خواهشا" بخوانید ...

                        موفق باشید
                        دوست عزیز ممنون از اینکه این مطلب رو به چالش می کشید این باعث میشه مطلب برای من حداقل باز شده و درک و فهمش راحت تر باشه
                        ضمنناً اون کتابی رو که لطف کردید مطالعه کردم
                        چند سوال برام پیش اومده که هنوز به جوابش نرسیدم :
                        1. از اونجایی که من با بیسیک کار کردم هر جایی حتی در help نرم افزار کدهای جدول کیبرد رو کدهای اسکی معرفی کرده من که پاک گیج شدم از اینکه شما می گید اینها کدهای اسکی نیس
                        2. در کتاب مدار واسط مزیدی عنوان شده که کیبرد هر دونوع کد اسکی و کد اسکن رو تولید و به پردازنده ارسال می کنه
                        منتها کد اسکن شامل کد اسکن فشار دادن کلید و رها شدن کلید هست
                        در کتابی که شما قرار دادید کد اسکن کلید enter برابر 5c قرار داده شده (صفحه 125) که خیلی برام عجیبه که من تو کتاب مزیدی همچین چیزی نمیبینم
                        اگر اشتباه می کنم لطفاً شما اصلاح کنید
                        3. توی کتاب شما در مورد چیدمان کدها در جدول کیبرد صحبتی نشده یا حداقل من پیدا نکردم
                        اگه امکان داره راهنمایی بفرمایید ممنون میشم
                        مردود شدن بهتر از با تقلب قبول شدن است

                        دیدگاه


                          #13
                          پاسخ : اتصال کیبرد عدد PS2 به AVR

                          نوشته اصلی توسط masoud58
                          1. از اونجایی که من با بیسیک کار کردم هر جایی حتی در help نرم افزار کدهای جدول کیبرد رو کدهای اسکی معرفی کرده من که پاک گیج شدم از اینکه شما می گید اینها کدهای اسکی نیس
                          منظورشون این بوده که این کدهایی که تبدیل میشه کدهای اسکی هستند نه خود کدهایی که از کیبرد خارج میشود ...
                          در ضمن
                          بعضی از کلیدها کد اسکی یک بایتی ندارند ...
                          مثل Enter که تشکیل شده از دو بایت 13 و 10 میباشد ... که یکی به عنوان مفهوم پرش به ابتدای همان خط و دیگری به عنوان پرش به خط بعدی ....(دقیقا نمیدونم کدومش)
                          این هم Help بسکام :


                          نوشته اصلی توسط masoud58
                          2. در کتاب مدار واسط مزیدی عنوان شده که کیبرد هر دونوع کد اسکی و کد اسکن رو تولید و به پردازنده ارسال می کنه
                          منتها کد اسکن شامل کد اسکن فشار دادن کلید و رها شدن کلید هست
                          در کتابی که شما قرار دادید کد اسکن کلید enter برابر 5c قرار داده شده (صفحه 125) که خیلی برام عجیبه که من تو کتاب مزیدی همچین چیزی نمیبینم
                          اگر اشتباه می کنم لطفاً شما اصلاح کنید
                          :eek: :eek: :eek: :eek:
                          میشه خواهشا" عکس بگیرید و پلود کنید ....
                          ممنون

                          نوشته اصلی توسط masoud58
                          3. توی کتاب شما در مورد چیدمان کدها در جدول کیبرد صحبتی نشده یا حداقل من پیدا نکردم
                          اگه امکان داره راهنمایی بفرمایید ممنون میشم
                          بله بحث شده در فصل 22
                          فصل 22 :
                          اتصال کیبرد PS/2 به صورت کامل با LCD
                          http://s5.picofile.com/file/8121181942/DSC00018.gif
                          http://s5.picofile.com/file/8121181926/DSC00019.gif
                          http://s5.picofile.com/file/8121181918/DSC00020.gif
                          http://s5.picofile.com/file/8121182084/DSC00021.gif
                          http://s5.picofile.com/file/8121182076/DSC00022.gif
                          کد:
                          #include <mega16.h> 
                          #include <delay.h> 
                          #include <lcd.h>
                          // External Interrupt 0 service routine
                          interrupt [EXT_INT0] void ext_int0_isr(void)
                          {
                            DDRB = 0x01; 
                            while(PIND.2 == 0)PORTB.0 = 0;  
                            DDRB = 0x00;
                          }
                          #asm
                           .equ __lcd_port=0x1B ;PORTA
                          #endasm
                          unsigned char keyb_r (void);
                          void keyb_w (unsigned char);
                          void keyb_on (void);
                          unsigned char b;
                          
                          void main(void)  
                          { 
                            unsigned char s,ch;
                            unsigned char lo[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, '~',
                                      0, 0, 0, 0, 0, 0, 'q', '1', 0, 0, 0, 'z', 's', 'a', 'w', '2',
                                      0, 0, 'c', 'x', 'd', 'e', '4', '3', 0, 0, ' ', 'v', 'f', 't', 'r',
                                      '5', 0, 0, 'n', 'b', 'h', 'g', 'y', '6', 0, 0, 0, 'm', 'j', 'u', '7',
                                      '8', 0, 0, ',', 'k', 'i', 'o', '0', '9', 0, 0, '.', '/', 'l', ';', 'p',
                                      '-', 0, 0, 0, '"', 0, '[', '=', 0, 0, 0, 0, 0, ']', 0, 0,
                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '1', 0, '4', '7', 0, 0, 0, '0',
                                      '.', '2', '5', '6', '8', 0, 0, 0, '+', '3', '-', '*', '9', 0};
                            unsigned char up[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, '`',
                                      0, 0, 0, 0, 0, 0, 'Q', '!', 0, 0, 0, 'Z', 'S', 'A', 'W', '@',
                                      0, 0, 'C', 'X', 'D', 'E', '$', '#', 0, 0, ' ' ,'V' ,'F' ,'T' ,'R',
                                      '%',0, 0, 'N','B','H','G','Y','^',0, 0, 0, 'M','J','U', '&',
                                      '*', 0, 0, '<', 'K','I', 'O', ')', '(', 0, 0, '>', '?', 'L', ':','P',
                                      '_', 0, 0, 0, '"', 0, '{', '+', 0, 0, 0, 0, 0, '}', 0, '|',
                                      0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, '1', 0, '4', '7', 0, 0, 0, '0',
                                      '.', '2', '5', '6', '8', 0, 0, 0, '+', '3', '-', '*', '9', 0}; 
                            PORTA = 0x00;
                            DDRA = 0x00;
                            PORTB = 0x00;
                            DDRB = 0x00;
                            DDRC = 0x00;
                            PORTC = 0x00;
                            PORTD = 0x00;
                            DDRD = 0x00;
                            // External Interrupt(s) initialization
                            // INT0: On
                            // INT0 Mode: Low level
                            // INT1: Off
                            // INT2: Off
                            GICR |= 0x40;
                            MCUCR = 0x00;
                            MCUCSR = 0x00;
                            GIFR = 0x40;
                            // LCD module initialization 
                            lcd_init(16);
                            // Global enable interrupts
                            #asm("sei")
                            keyb_on();
                            lcd_clear();
                            ch = b;
                            while (1)  
                            {
                              //input data      
                              s = keyb_r();
                              switch (s)  
                              {
                                case 0xF0:
                                  s = keyb_r();
                                  if (s == 0x12 | s == 0x59)  ch = b;
                                  break; 
                                case 0x58:
                                  keyb_w(0xED); 
                                  s = keyb_r();
                                  b = b ^ 0x04;
                                  ch = b;
                                  keyb_w(b); 
                                  s = keyb_r();
                                  break; 
                                case 0x77:
                                  keyb_w(0xED); 
                                  s = keyb_r();
                                  b = b ^ 0x02;
                                  keyb_w(b); 
                                  s = keyb_r();
                                  break; 
                                case 0x7E:
                                  keyb_w(0xED); 
                                  s = keyb_r();
                                  b = b ^ 0x01;
                                  keyb_w(b); 
                                  s = keyb_r();
                                  break;
                                case 0x76:
                                  keyb_on();
                                  lcd_clear();
                                  break; 
                                case 0x12:
                                  ch = 0x04;
                                  break; 
                                case 0x59:
                                  ch = 0x04;
                                  break; 
                                  default:
                                  if (ch <= 3)  s = lo[s];
                                  else  s = up[s];
                                  lcd_putchar(s);
                              };
                            }
                          }
                          unsigned char keyb_r (void)  
                          {   
                            unsigned char c, a, i = 0;
                            DDRB = 0x00;
                            while (PINB.0 == 0 | PINB.1 == 0); 
                            while (PINB.0 == 1 & PINB.1 == 1); 
                            while (PINB.0 == 0); 
                            while (PINB.0 == 1);
                            for (i=0; i<8; i++)
                            { 
                              c = PINB;
                              c = c << 6;
                              c = c & 0x80;
                              a = a >> 1;
                              a = a ^ c;
                              while (PINB.0 == 0); 
                              while (PINB.0 == 1);
                            }        
                            while (PINB.0 == 0 & PINB.1 == 0); 
                            return a;
                          }
                          void keyb_w (unsigned char x)  
                          {   
                            unsigned char i, c, p = 0;
                            PORTB = 0x03;
                            DDRB = 0x03;
                            while (PINB.0 == 0 |& PINB.1 == 0);
                            PORTB.0 = 0;
                            delay_us(100);
                            PORTB.1 = 0;
                            PORTB.0 = 1;
                            DDRB = 0x02;
                            while (PINB.0 == 1); 
                            for (i=0; i<8; i++)  
                            {
                              c = x;
                              c = c & 0x01;
                              x = x >> 1;
                              PORTB.1 = c;
                              if (c == 1)  p += 1;
                              while (PINB.0 == 0); 
                              while (PINB.0 == 1);
                            }; 
                            p = p % 2;
                            if (p == 0)  PORTB.1 = 1; 
                            else  PORTB.1 = 0;
                            while (PINB.0 == 0); 
                            while (PINB.0 == 1);
                            PORTB.1 = 1; 
                            DDRB = 0x00;
                            while (PINB.0 == 1 & PINB.1 == 1);
                            while (PINB.0 == 0 & PINB.1 == 0); 
                          }
                          void keyb_on ()  
                          {   
                            unsigned char y;
                            keyb_w(0xFF);
                            y = keyb_r();
                            y = keyb_r();
                            keyb_w(0xED); 
                            y = keyb_r();
                            b = 0x02;      
                            keyb_w(b); 
                            y = keyb_r();
                          }
                          سوالی بود در خدمتم
                          موفق باشید



                          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                          معرفی نرم افزار Codewizard PWM
                          با من بیشتر آشنا شوید

                          دیدگاه


                            #14
                            پاسخ : اتصال کیبرد عدد PS2 به AVR

                            ایناهاش
                            پیداش کردم :nerd:
                            http://www.theasciicode.com.ar/ascii-control-characters/carriage-return-ascii-code-13.html
                            کد اسکی 10 تعویض خط
                            کد اسکی 13 پرش به ابتدای خط
                            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                            معرفی نرم افزار Codewizard PWM
                            با من بیشتر آشنا شوید

                            دیدگاه


                              #15
                              پاسخ : اتصال کیبرد عدد PS2 به AVR

                              نوشته اصلی توسط Saman.Asadi
                              ایناهاش
                              پیداش کردم :nerd:
                              http://www.theasciicode.com.ar/ascii-control-characters/carriage-return-ascii-code-13.html
                              کد اسکی 10 تعویض خط
                              کد اسکی 13 پرش به ابتدای خط
                              من فکر کنم شاید سوالم رو خوب بیان نکردم
                              می خوام بدونم با علم به اینکه کد اسکی enter برابر 13 هست (همونطور که خودتون هم نوشته اید ) چرا در خانه نودویکم هست ؟ این برام جای سواله چرا خانه نودویکم ؟ :eek:
                              یه سوال دیگه اینکه از بین make و brake کدومش تو جدول کیبرد استفاده شده ؟؟؟
                              من هنوز گیجم :angry:
                              ببخشید کمی دیر می گیرم

                              اینم عکس کتاب مدار واسط مزیدی که گفته بودم :
                              مردود شدن بهتر از با تقلب قبول شدن است

                              دیدگاه

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