Thông báo

Collapse
No announcement yet.

Bàn phím tự động ... để đánh game , điều khiển ! ( Dành cho anh em thích Game )

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Nguyên văn bởi nhatnguyenht Xem bài viết

    Chào bác Dương!

    Từ lần nhờ trước em nghĩ chắc chẳng bao giờ dám làm phiền bác thêm nữa nhưng thực sự em tẩu hỏa nhập ma rồi. Thiếu căn bản nên làm cứ báo lỗi này lỗi nọ, em cứ nghĩ thay vô đoạn có chữ tương ứng là xong nhưng không phải thế....!

    Không biết cái gì về code nên khó wa.

    Chắc giờ các bạn mua auto của bác cũng đang mong muốn nhờ kỹ thuật của bác để fix cái chiêu mới chặn auto keyboard của Dzo game. Hiện 1 thông báo mà không ấn enter thì không ấn được phím nào khác.
    Nhờ bác bớt chút thời gian hoàn thiện cái code giúp các mem thích game nhưng không chuyên về điện tử. vì bác không chơi game nên em nêu rõ mong bác dễ xử lý:

    - Thách thức: Cứ 1p55s phút hiện lên 1 cái thông báo, không bấm enter tắt đi không làm j được.
    - Giải pháp:cứ khoảng 2p nhấn enter 1 cái là đâu lại vào đó.^^
    -Em dùng Pic8f4550

    Cảm ơn bác Dương rất nhiều nhiều!
    edit lại code ... ( nhớ khai báo unsigned char i ; trên đầu chương trình )
    Code:
    while(1)
    
    {
      for(i=0; i<3; i++)    // gửi phím 1234  - 3 lần 
     { 
       hid_keyboard_send(0x00,one,0x00,0x00,0x00,0x00, 0x00);   // 1
       hid_keyboard_send_BLANK();
       hid_keyboard_send(0x00,two,0x00,0x00,0x00,0x00, 0x00);   // 2
       hid_keyboard_send_BLANK();
       hid_keyboard_send(0x00,three,0x00,0x00,0x00,0x00, 0x00); // 3
       hid_keyboard_send_BLANK();
       hid_keyboard_send(0x00,four,0x00,0x00,0x00,0x00, 0x00);   // 4
      hid_keyboard_send_BLANK();
     } 
     
     for (i=0; i< 115; i++)   //  Trễ  1 phút 55 giây  .   
       {
            Delay_ms(1000);     // 1 giây
       }
    
    hid_keyboard_send(0x00,0x28,0x00,0x00,0x00,0x00, 0x00);  //  Enter
    hid_keyboard_send_BLANK();
    
    count_skill++;
    if(count_skill >= 40) // match value
    {
    count_skill=0; // reset count
    hid_keyboard_send(0x00,p,0x00,0x00,0x00,0x00, 0x00);
    hid_keyboard_send_BLANK();
    }
    
    }
    Last edited by queduong; 04-03-2013, 10:06.
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • Nguyên văn bởi queduong Xem bài viết
      edit lại code ... ( nhớ khai báo unsigned char i ; trên đầu chương trình )
      Code:
      while(1)
      
      {
        for(i=0; i<3; i++)    // gửi phím 1234  - 3 lần 
       { 
         hid_keyboard_send(0x00,one,0x00,0x00,0x00,0x00, 0x00);   // 1
         hid_keyboard_send_BLANK();
         hid_keyboard_send(0x00,two,0x00,0x00,0x00,0x00, 0x00);   // 2
         hid_keyboard_send_BLANK();
         hid_keyboard_send(0x00,three,0x00,0x00,0x00,0x00, 0x00); // 3
         hid_keyboard_send_BLANK();
         hid_keyboard_send(0x00,four,0x00,0x00,0x00,0x00, 0x00);   // 4
        hid_keyboard_send_BLANK();
       } 
       
       for (i=0; i< 115; i++)   //  Trễ  1 phút 55 giây  .   
         {
              Delay_ms(1000);     // 1 giây
         }
      
      hid_keyboard_send(0x00,0x28,0x00,0x00,0x00,0x00, 0x00);  //  Enter
      hid_keyboard_send_BLANK();
      
      count_skill++;
      if(count_skill >= 40) // match value
      {
      count_skill=0; // reset count
      hid_keyboard_send(0x00,p,0x00,0x00,0x00,0x00, 0x00);
      hid_keyboard_send_BLANK();
      }
      
      }

      Cảm ơn bác giúp!
      Mà em thay vô vẫn lỗi là sao nhi??
      Bác xem dùm em với:
      Khi Build báo đỏ ở dong unsigned char i ( dòng 94) báo lỗi
      không biết còn cần làm j nữa không bác chỉnh hộ em tý nha:;;

      // Modifier bytes
      #define None 0b00000000
      #define LeftCtrl 0b00000001
      #define LeftShift 0b00000010
      #define LeftAlt 0b00000100
      #define LeftGUI 0b00001000
      #define RightCtrl 0b00010000
      #define RightShift 0b00100000
      #define RightAlt 0b01000000
      #define RightGUI 0b10000000
      /////////////////////////////////
      // Key code byte
      #define a 4
      #define b 5
      #define c 6
      #define d 7
      #define e 8
      #define f 9
      #define g 10
      #define h 11
      #define i 12
      #define j 13
      #define k 14
      #define l 15
      #define m 16
      #define n 17
      #define o 18
      #define p 19
      #define q 20
      #define r 21
      #define s 22
      #define t 23
      #define u 24
      #define v 25
      #define w 26
      #define x 27
      #define y 28
      #define z 29
      #define one 30
      #define two 31
      #define three 32
      #define four 33
      #define five 34
      #define six 35
      #define seven 36
      #define eight 37
      #define nine 38
      #define zero 39
      #define enter 40
      #define escape 41
      #define backspace 42
      #define tab 43
      #define spacebar 44
      #define underscore 45
      #define equals 46
      #define leftbrace 47
      #define rightbrace 48
      #define backslash 49
      #define hash 50
      #define semicolon 51

      #define comma 54
      #define period 55
      #define slash 56
      #define capslock 57
      #define f1 58
      #define f2 59
      #define f3 60
      #define f4 61
      #define f5 62
      #define f6 63
      #define f7 64
      #define f8 65
      #define f9 66
      #define f10 67
      #define f11 68
      #define f12 69

      #define home 74
      #define pageup 75
      #define delete 76
      #define pagedown 78
      #define rightarrow 79
      #define leftarrow 80
      #define downarrow 81
      #define uparrow 82
      ////////////////////

      #define start_butt PORTD.F3
      bit start;

      unsigned char key0time, key1time,key2time,key3time,key4time,key5time,key6t ime,key7time,key8time, key9time, keyPtime, P_loop;

      unsigned char i;
      unsigned char count_skill;
      unsigned char stt_cnt, value;
      unsigned long time_buff;
      unsigned char usbreadbuff[8] absolute 0x500; // Buffers should be in USB RAM
      unsigned char usbwritebuff[8] absolute 0x540;
      unsigned char usbwriteblank[8] absolute 0x580;


      void butt_check();
      void key_delay(unsigned long value);
      void stroke0();
      void stroke1();
      void stroke2();
      void stroke3();
      void stroke4();
      void stroke5();
      void stroke6();
      void stroke7();
      void stroke8();
      void stroke9();
      void strokeP();


      /* SUBROUTINE HEADER */
      char hid_keyboard_send(char special,char key1,char key2,char key3,char key4,char key5, char key6);
      char hid_keyboard_send_EXECUTE();
      char hid_keyboard_send_DESKTOP();
      char hid_keyboard_send_BLANK();
      /* END SUBROUTINE HEADER */

      void interrupt(){
      USB_Interrupt_Proc(); // USB servicing is done inside the interrupt
      }

      void main(void){
      start=0;
      count_skill=0;
      ADCON1 |= 0x0A; // analog AN0 --> AN4 ( RA0, RA1, RA2, RA3 , RA5 )
      CMCON |= 7; // Disable comparators
      PORTA =0x00;
      TRISA=0b11101111; // RA4 output
      TRISB=0x03;
      PORTB=0x00;
      PORTC=0x00;
      TRISC=0b10111001; // RC7 in for UART RX , RC6 out for UART TX , RC0 in for Freq Cnt , RC1,RC2 out for attenuator
      PORTD=0x00;
      TRISD=0b00001111;
      PORTE=0x00;
      TRISE=0b000;
      HID_Enable(&usbreadbuff,&usbwritebuff); // Enable HID communication
      Delay_ms(2000); // delay 2 sec for usb already

      ////// Setup for Key Timer !!!
      key0time=1;
      key1time=1;
      key2time=1;
      key3time=1;
      key4time=1;
      key5time=1;
      key6time=1;
      key7time=1;
      key8time=1;
      key9time=1;
      keyPtime=1; // 1sec
      P_loop=3;
      ///////////////


      while(1)
      {
      for(i=0; i<3; i++) // gu+?i phím 1234 - 3 la^`n
      {
      hid_keyboard_send(0x00,one,0x00,0x00,0x00,0x00, 0x00); // 1
      hid_keyboard_send_BLANK();
      hid_keyboard_send(0x00,two,0x00,0x00,0x00,0x00, 0x00); // 2
      hid_keyboard_send_BLANK();
      hid_keyboard_send(0x00,three,0x00,0x00,0x00,0x00, 0x00); // 3
      hid_keyboard_send_BLANK();
      hid_keyboard_send(0x00,four,0x00,0x00,0x00,0x00, 0x00); // 4
      hid_keyboard_send_BLANK();
      }

      for (i=0; i< 115; i++) // Tre^~ 1 phút 55 giây .
      {
      Delay_ms(1000); // 1 giây
      }

      hid_keyboard_send(0x00,0x28,0x00,0x00,0x00,0x00, 0x00); // Enter
      hid_keyboard_send_BLANK();

      count_skill++;
      if(count_skill >= 40) // match value
      {
      count_skill=0; // reset count
      hid_keyboard_send(0x00,p,0x00,0x00,0x00,0x00, 0x00);
      hid_keyboard_send_BLANK();
      }

      }

      ////////////////// FUNCTIONS ///////////////////////
      void butt_check()
      {
      if(start_butt)
      {
      start =!start;
      if(start==0) {count_skill=0;}
      while(start_butt);
      Delay_ms(50);

      }
      }
      /////////////////
      void key_delay(unsigned long value)
      {
      while(value--)
      {
      Delay_ms(1);
      butt_check();
      if(start==0){value=0;} // exit while
      }
      }
      /* SUBROUTINE */
      char hid_keyboard_send(char special,char key1,char key2,char key3,char key4,char key5, char key6)
      {
      usbwritebuff[0]=special;
      usbwritebuff[1]=0x00;
      usbwritebuff[2]=key1;
      usbwritebuff[3]=key2;
      usbwritebuff[4]=key3;
      usbwritebuff[5]=key4;
      usbwritebuff[6]=key5;
      usbwritebuff[7]=key6;
      return HID_Write(&usbwritebuff,8);

      }

      char hid_keyboard_send_EXECUTE() // left windows key + r
      {
      return hid_keyboard_send(0b00001000,0x15,0x00,0x00,0x00,0 x00,0x00);
      }

      char hid_keyboard_send_DESKTOP() // left windows key + d
      {
      return hid_keyboard_send(0b00001000,0x07,0x00,0x00,0x00,0 x00,0x00);
      }

      char hid_keyboard_send_BLANK()
      {

      usbwriteblank[0] = 0x00;
      usbwriteblank[1] = 0x00;
      usbwriteblank[2] = 0x00;
      usbwriteblank[3] = 0x00;
      usbwriteblank[4] = 0x00;
      usbwriteblank[5] = 0x00;
      usbwriteblank[6] = 0x00;
      usbwriteblank[7] = 0x00;
      return HID_Write(&usbwriteblank,8);

      }
      ///////////////////////////////////////////////////////////
      void stroke0()
      {
      hid_keyboard_send(0x00,zero,0x00,0x00,0x00,0x00,0x 00);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key0time*1000;
      key_delay(time_buff);
      }
      ///////
      void stroke1()
      {
      hid_keyboard_send(0x00,one,0x00,0x00,0x00,0x00,0x0 0);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key1time*1000;
      key_delay(time_buff);
      }
      ///////
      void stroke2()
      {
      hid_keyboard_send(0x00,two,0x00,0x00,0x00,0x00,0x0 0);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key2time*1000;
      key_delay(time_buff);
      }
      ///////
      void stroke3()
      {
      hid_keyboard_send(0x00,three,0x00,0x00,0x00,0x00,0 x00);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key3time*1000;
      key_delay(time_buff);
      }
      ///////
      void stroke4()
      {
      hid_keyboard_send(0x00,four,0x00,0x00,0x00,0x00,0x 00);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key4time*1000;
      key_delay(time_buff);
      }
      ///////
      void stroke5()
      {
      hid_keyboard_send(0x00,five,0x00,0x00,0x00,0x00,0x 00);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key5time*1000;
      key_delay(time_buff);
      }
      ///////
      void stroke6()
      {
      hid_keyboard_send(0x00,six,0x00,0x00,0x00,0x00,0x0 0);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key6time*1000;
      key_delay(time_buff);
      }
      ///////
      void stroke7()
      {
      hid_keyboard_send(0x00,seven,0x00,0x00,0x00,0x00,0 x00);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key7time*1000;
      key_delay(time_buff);
      }
      ///////
      void stroke8()
      {
      hid_keyboard_send(0x00,eight,0x00,0x00,0x00,0x00,0 x00);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key8time*1000;
      key_delay(time_buff);
      }
      ///////
      void stroke9()
      {
      hid_keyboard_send(0x00,nine,0x00,0x00,0x00,0x00,0x 00);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = key9time*1000;
      key_delay(time_buff);
      }
      ///////
      void strokeP()
      {
      hid_keyboard_send(LeftShift,p,0x00,0x00,0x00,0x00, 0x00);
      hid_keyboard_send_BLANK();
      // delay here ( check butt allways in Delay )
      time_buff = keyPtime*1000;
      key_delay(time_buff);
      }
      ///////


      /* END SUBROUTINE */

      Comment


      • bạn sửa thành unsigned char ii; ở dưới for (ii = 0; ii........ ) là chạy

        Code của bạn soạn thảo sai tứ tung !!!

        code đã sửa
        Code:
        // Modifier bytes
        #define None 0b00000000
        #define LeftCtrl 0b00000001
        #define LeftShift 0b00000010
        #define LeftAlt 0b00000100
        #define LeftGUI 0b00001000
        #define RightCtrl 0b00010000
        #define RightShift 0b00100000
        #define RightAlt 0b01000000
        #define RightGUI 0b10000000
        /////////////////////////////////
        // Key code byte
        #define a 4
        #define b 5
        #define c 6
        #define d 7
        #define e 8
        #define f 9
        #define g 10
        #define h 11
        #define i 12
        #define j 13
        #define k 14
        #define l 15
        #define m 16
        #define n 17
        #define o 18
        #define p 19
        #define q 20
        #define r 21
        #define s 22
        #define t 23
        #define u 24
        #define v 25
        #define w 26
        #define x 27
        #define y 28
        #define z 29
        #define one 30
        #define two 31
        #define three 32
        #define four 33
        #define five 34
        #define six 35
        #define seven 36
        #define eight 37
        #define nine 38
        #define zero 39
        #define enter 40
        #define escape 41
        #define backspace 42
        #define tab 43
        #define spacebar 44
        #define underscore 45
        #define equals 46
        #define leftbrace 47
        #define rightbrace 48
        #define backslash 49
        #define hash 50
        #define semicolon 51
        
        #define comma 54
        #define period 55
        #define slash 56
        #define capslock 57
        #define f1 58
        #define f2 59
        #define f3 60
        #define f4 61
        #define f5 62
        #define f6 63
        #define f7 64
        #define f8 65
        #define f9 66
        #define f10 67
        #define f11 68
        #define f12 69
        
        #define home 74
        #define pageup 75
        #define delete 76
        #define pagedown 78
        #define rightarrow 79
        #define leftarrow 80
        #define downarrow 81
        #define uparrow 82
        ////////////////////
        
        #define start_butt PORTD.F3
        bit start;
        
        unsigned char key0time, key1time,key2time,key3time,key4time,key5time,key6time,key7time,key8time, key9time, keyPtime, P_loop;
        
        unsigned char ii;
        unsigned char count_skill;
        unsigned char stt_cnt, value;
        unsigned long time_buff;
        unsigned char usbreadbuff[8] absolute 0x500; // Buffers should be in USB RAM
        unsigned char usbwritebuff[8] absolute 0x540;
        unsigned char usbwriteblank[8] absolute 0x580;
        
        
        void butt_check();
        void key_delay(unsigned long value);
        void stroke0();
        void stroke1();
        void stroke2();
        void stroke3();
        void stroke4();
        void stroke5();
        void stroke6();
        void stroke7();
        void stroke8();
        void stroke9();
        void strokeP();
        
        
        /* SUBROUTINE HEADER */
        char hid_keyboard_send(char special,char key1,char key2,char key3,char key4,char key5, char key6);
        char hid_keyboard_send_EXECUTE();
        char hid_keyboard_send_DESKTOP();
        char hid_keyboard_send_BLANK();
        /* END SUBROUTINE HEADER */
        
        void interrupt(){
        USB_Interrupt_Proc(); // USB servicing is done inside the interrupt
        }
        
        void main(void){
        start=0;
        count_skill=0;
        ADCON1 |= 0x0A; // analog AN0 --> AN4 ( RA0, RA1, RA2, RA3 , RA5 )
        CMCON |= 7; // Disable comparators
        PORTA =0x00;
        TRISA=0b11101111; // RA4 output
        TRISB=0x03;
        PORTB=0x00;
        PORTC=0x00;
        TRISC=0b10111001; // RC7 in for UART RX , RC6 out for UART TX , RC0 in for Freq Cnt , RC1,RC2 out for attenuator
        PORTD=0x00;
        TRISD=0b00001111;
        PORTE=0x00;
        TRISE=0b000;
        HID_Enable(&usbreadbuff,&usbwritebuff); // Enable HID communication
        Delay_ms(2000); // delay 2 sec for usb already
        
        ////// Setup for Key Timer !!!
        key0time=1;
        key1time=1;
        key2time=1;
        key3time=1;
        key4time=1;
        key5time=1;
        key6time=1;
        key7time=1;
        key8time=1;
        key9time=1;
        keyPtime=1; // 1sec
        P_loop=3;
        ///////////////
        
        
        while(1)
        {
        for(ii=0; ii<3; ii++) // gu+?i phím 1234 - 3 la^`n
        {
        hid_keyboard_send(0x00,one,0x00,0x00,0x00,0x00, 0x00); // 1
        hid_keyboard_send_BLANK();
        hid_keyboard_send(0x00,two,0x00,0x00,0x00,0x00, 0x00); // 2
        hid_keyboard_send_BLANK();
        hid_keyboard_send(0x00,three,0x00,0x00,0x00,0x00, 0x00); // 3
        hid_keyboard_send_BLANK();
        hid_keyboard_send(0x00,four,0x00,0x00,0x00,0x00, 0x00); // 4
        hid_keyboard_send_BLANK();
        }
        
        for (ii=0; ii< 115; ii++) // Tre^~ 1 phút 55 giây .
        {
        Delay_ms(1000); // 1 giây
        }
        
        hid_keyboard_send(0x00,0x28,0x00,0x00,0x00,0x00, 0x00); // Enter
        hid_keyboard_send_BLANK();
        
        count_skill++;
        if(count_skill >= 40) // match value
        {
        count_skill=0; // reset count
        hid_keyboard_send(0x00,p,0x00,0x00,0x00,0x00, 0x00);
        hid_keyboard_send_BLANK();
        }
        
        }
        }
        
        
        ////////////////// FUNCTIONS ///////////////////////
        void butt_check()
        {
        if(start_butt)
        {
        start =!start;
        if(start==0) {count_skill=0;}
        while(start_butt);
        Delay_ms(50);
        
        }
        }
        /////////////////
        void key_delay(unsigned long value)
        {
        while(value--)
        {
        Delay_ms(1);
        butt_check();
        if(start==0){value=0;} // exit while
        }
        }
        
        
        /* SUBROUTINE */
        
        char hid_keyboard_send(char special,char key1,char key2,char key3,char key4,char key5, char key6)
        {
        usbwritebuff[0]=special;
        usbwritebuff[1]=0x00;
        usbwritebuff[2]=key1;
        usbwritebuff[3]=key2;
        usbwritebuff[4]=key3;
        usbwritebuff[5]=key4;
        usbwritebuff[6]=key5;
        usbwritebuff[7]=key6;
        return HID_Write(&usbwritebuff,8);
        
        }
        
        char hid_keyboard_send_EXECUTE() // left windows key + r
        {
        return hid_keyboard_send(0b00001000,0x15,0x00,0x00,0x00,0x00,0x00);
        }
        
        char hid_keyboard_send_DESKTOP() // left windows key + d
        {
        return hid_keyboard_send(0b00001000,0x07,0x00,0x00,0x00,0x00,0x00);
        }
        
        char hid_keyboard_send_BLANK()
        {
        
        usbwriteblank[0] = 0x00;
        usbwriteblank[1] = 0x00;
        usbwriteblank[2] = 0x00;
        usbwriteblank[3] = 0x00;
        usbwriteblank[4] = 0x00;
        usbwriteblank[5] = 0x00;
        usbwriteblank[6] = 0x00;
        usbwriteblank[7] = 0x00;
        return HID_Write(&usbwriteblank,8);
        
        }
        ///////////////////////////////////////////////////////////
        void stroke0()
        {
        hid_keyboard_send(0x00,zero,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key0time*1000;
        key_delay(time_buff);
        }
        ///////
        void stroke1()
        {
        hid_keyboard_send(0x00,one,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key1time*1000;
        key_delay(time_buff);
        }
        ///////
        void stroke2()
        {
        hid_keyboard_send(0x00,two,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key2time*1000;
        key_delay(time_buff);
        }
        ///////
        void stroke3()
        {
        hid_keyboard_send(0x00,three,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key3time*1000;
        key_delay(time_buff);
        }
        ///////
        void stroke4()
        {
        hid_keyboard_send(0x00,four,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key4time*1000;
        key_delay(time_buff);
        }
        ///////
        void stroke5()
        {
        hid_keyboard_send(0x00,five,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key5time*1000;
        key_delay(time_buff);
        }
        ///////
        void stroke6()
        {
        hid_keyboard_send(0x00,six,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key6time*1000;
        key_delay(time_buff);
        }
        ///////
        void stroke7()
        {
        hid_keyboard_send(0x00,seven,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key7time*1000;
        key_delay(time_buff);
        }
        ///////
        void stroke8()
        {
        hid_keyboard_send(0x00,eight,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key8time*1000;
        key_delay(time_buff);
        }
        ///////
        void stroke9()
        {
        hid_keyboard_send(0x00,nine,0x00,0x00,0x00,0x00,0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = key9time*1000;
        key_delay(time_buff);
        }
        ///////
        void strokeP()
        {
        hid_keyboard_send(LeftShift,p,0x00,0x00,0x00,0x00, 0x00);
        hid_keyboard_send_BLANK();
        // delay here ( check butt allways in Delay )
        time_buff = keyPtime*1000;
        key_delay(time_buff);
        }
        ///////
        
        
        /* END SUBROUTINE */
        Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

        Comment


        • Chào Bác Dương!

          Sau khi mày mò, em có chỉnh lại cái code của bác 1 chút và phù hợp với yêu cầu của game...Chạy kha ổn.

          Cảm ơn bác rẩt nhiều!

          Comment


          • Mình có thắc mắc là cái code để win nhận đây là 1 USB thì mình phải làm sao, copy vào chung với code kia ròi build hay làm sao, thanks

            Comment


            • và đây là sản phẩm của mình. có thể tùy ý bấm các phím lên tối đa 200 ký tự. có phần mềm để nạp thay đổi. Mã phím tự lưu lại cho mỗi lần nạp. Phần mềm dễ dàng sử dụng: Video Youtube

              Thanks ý tưởng và sự chia sẻ của anh Quế Dương

              Comment


              • Nguyên văn bởi vuhapassall Xem bài viết
                và đây là sản phẩm của mình. có thể tùy ý bấm các phím lên tối đa 200 ký tự. có phần mềm để nạp thay đổi. Mã phím tự lưu lại cho mỗi lần nạp. Phần mềm dễ dàng sử dụng: Video Youtube

                Thanks ý tưởng và sự chia sẻ của anh Quế Dương
                thanks ! Mong bạn tiếp tục phát huy, phát triển thêm phần mềm, tính năng hoàn hảo hơn ( có thể loop nhiều lần , vòng , nhiều khe thời gian , thời gian mili giây .v.v và nhiều options khác . Để sản phẩm phục vụ được anh em, phục vụ nhiều đối tượng khác nhau.

                ( Mình thấy cũng có nhiều anh em hỏi ( mình có bán cả sang Đức ) nhưng lâu rồi mình cũng không phát triển thêm ... vì mình không khoái game ... cũng không hào hứng làm mấy cái USB lắm )
                Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                Comment


                • Nguyên văn bởi queduong Xem bài viết
                  Một khách hàng đã nhờ tôi làm thiết bị này ... Một bàn phím tự động " Bấm phím" tương tự như ta gõ trên bàn phím PC, laptop v.v. vậy.

                  Bàn phím tự động thường được sử dụng cho mục đích : Điều khiển tương tác với máy tính , chơi game ( bấm phím tuần tự)... ( Như là luyện Lever trong Cửu Long Tranh bá ... chẳng hạn )
                  Không sợ bị các phần mềm Game chặn như là đối với bàn phím được lập trình bằng phần mềm ( còn gọi là phần mềm thứ 3 hỗ trợ game) ,
                  tốc độ bàn phím cứng này nhanh, chính xác ... phần cứng nhỏ gọn .

                  --- Sau khi hoàn thành hoàn toàn sản phẩm ( cả phần cứng và phần mềm ) ... do 1 tai nạn giao thông khá nghiêm trọng ... ( suýt thì tôi đã ra đi cùng mỏ hàn,nhựa thông ... to vít --- Rất may mắn là hiện giờ cái đầu và đôi tay vẫn còn hoạt động được) !
                  hiện tại sản phẩm chưa thể đến tay khách hàng do sự cố trên... Khi tôi nằm đây để điều trị " thương tích " của vụ tai nạn ... mới thấy rằng ...

                  Mình có rất nhiều đề tài có cái dễ, có cái khó tại sao cứ để 1 chỗ rồi có khi 1 lúc nào đó mang xuống mồ luôn ... Cho không thì không thể ( vì đó là mồ hôi nước mắt, công sức, tiền bạc vào đó nữa .v.v ) .

                  1 ý nghĩ là tại sao mình không làm theo những cty nước ngoài ? Với ý nghĩ đó ... tôi viết bài này ( Định bụng viết vào luồng tâm tình kỹ thuật ... nhưng thấy không hợp lắm .. đành cho ra đây ).

                  --- Mỗi đề tài hiện tại, về sau này ( nếu là sản phẩm thương mại mình sản xuất)... tôi sẽ cố gắng có 2 phiên bản :
                  1) Phiên bản miễn phí : Có 1 số tính năng cơ bản , đủ dùng cơ bản ... mục đích dành cho các đối tượng học sinh, sinh viên... cá nhân nghiên cứu ... tự làm hoặc dựa vào đó để tự phát triển ( nếu thích ) ... và sử dụng cho mục đích cá nhân .
                  Không dùng cho các đối tượng lấy về nhân bản ... bán hàng chợ ( như 1 số người chỉ biết ngồi , hớt của người khác về rồi đem bán ).
                  2) Phiên bản thương mại : ĐƯơng nhiên tôi sẽ quản lý , ở bản thương mại sẽ đầy đủ chức năng hơn , chuyên nghiệp hơn ... và có đầy đủ sự hỗ trợ hơn. Ngoài ra, gần đây tôi bắt đầu tham gia phản công. Trong game mình có sở thích là sưu tập skin vũ khí, để có được những thứ tốt nhất mình mở các hòm trên nền tảng Trao đổi skin CS2. Thật là vui.

                  -QUAY TRỞ LẠI VẤN ĐỀ :

                  Tôi chọn PIC18F4550 ( vì tôi sẵn có nó ở trong thùng linh kiện ) ... 1 số chip khác cũng hỗ trợ USB tốt (ARM , PSOC , ST7 ... ) tuy nhiên ở mức độ phổ thông nên dùng PIC cho các bạn dễ kiếm !

                  Bạn nào yêu thích có thể làm thử :
                  Đây là sơ đồ của nó :
                  [ATTACH=CONFIG]51460[/ATTACH]

                  --- Mã nguồn :
                  Mã nguồn được viết trên MikroC PRO ( Đơn giản vì MikroC phần mềm khá chuyên nghiệp, dễ sử dụng , thân thiện ... nhiều thư viện ... Nói chung là 1 trong TOP các trình dịch đầu bảng cho những dòng MCU nhỏ nhỏ kiểu này ! )

                  [MAIN CODE]
                  Code:
                  // Modifier bytes
                  #define None 0b00000000
                  #define LeftCtrl 0b00000001
                  #define LeftShift 0b00000010
                  #define LeftAlt 0b00000100
                  #define LeftGUI 0b00001000
                  #define RightCtrl 0b00010000
                  #define RightShift 0b00100000
                  #define RightAlt 0b01000000
                  #define RightGUI 0b10000000
                  /////////////////////////////////
                  // Key code byte
                  #define a 4
                  #define b 5
                  #define c 6
                  #define d 7
                  #define e 8
                  #define f 9
                  #define g 10
                  #define h 11
                  #define i 12
                  #define j 13
                  #define k 14
                  #define l 15
                  #define m 16
                  #define n 17
                  #define o 18
                  #define p 19
                  #define q 20
                  #define r 21
                  #define s 22
                  #define t 23
                  #define u 24
                  #define v 25
                  #define w 26
                  #define x 27
                  #define y 28
                  #define z 29
                  #define one 30
                  #define two 31
                  #define three 32
                  #define four 33
                  #define five 34
                  #define six 35
                  #define seven 36
                  #define eight 37
                  #define nine 38
                  #define zero 39
                  #define enter 40
                  #define escape 41
                  #define backspace 42
                  #define tab 43
                  #define spacebar 44
                  #define underscore 45
                  #define equals 46
                  #define leftbrace 47
                  #define rightbrace 48
                  #define backslash 49
                  #define hash 50
                  #define semicolon 51
                  
                  #define comma 54
                  #define period 55
                  #define slash 56
                  #define capslock 57
                  #define f1 58
                  #define f2 59
                  #define f3 60
                  #define f4 61
                  #define f5 62
                  #define f6 63
                  #define f7 64
                  #define f8 65
                  #define f9 66
                  #define f10 67
                  #define f11 68
                  #define f12 69
                  
                  #define home 74
                  #define pageup 75
                  #define delete 76
                  #define pagedown 78
                  #define rightarrow 79
                  #define leftarrow 80
                  #define downarrow 81
                  #define uparrow 82
                  ////////////////////
                  
                  #define start_butt PORTD.F3
                  bit start;
                  
                  unsigned char key0time, key1time,key2time,key3time,key4time,key5time,key6time,key7time,key8time, key9time, keyPtime, P_loop;
                  
                  unsigned char count_skill;
                  unsigned char stt_cnt, value;
                  unsigned long time_buff;
                  unsigned char usbreadbuff[8] absolute 0x500; // Buffers should be in USB RAM
                  unsigned char usbwritebuff[8] absolute 0x540;
                  unsigned char usbwriteblank[8] absolute 0x580;
                  
                  
                  void butt_check();
                  void key_delay(unsigned long value);
                  void stroke0();
                  void stroke1();
                  void stroke2();
                  void stroke3();
                  void stroke4();
                  void stroke5();
                  void stroke6();
                  void stroke7();
                  void stroke8();
                  void stroke9();
                  void strokeP();
                  
                  
                  /* SUBROUTINE HEADER */
                  char hid_keyboard_send(char special,char key1,char key2,char key3,char key4,char key5, char key6);
                  char hid_keyboard_send_EXECUTE();
                  char hid_keyboard_send_DESKTOP();
                  char hid_keyboard_send_BLANK();
                  /* END SUBROUTINE HEADER */
                  
                  void interrupt(){
                  USB_Interrupt_Proc(); // USB servicing is done inside the interrupt
                  }
                  
                  void main(void){
                  start=0;
                  count_skill=0;
                  ADCON1 |= 0x0A; // analog AN0 --> AN4 ( RA0, RA1, RA2, RA3 , RA5 )
                  CMCON |= 7; // Disable comparators
                  PORTA =0x00;
                  TRISA=0b11101111; // RA4 output
                  TRISB=0x03;
                  PORTB=0x00;
                  PORTC=0x00;
                  TRISC=0b10111001; // RC7 in for UART RX , RC6 out for UART TX , RC0 in for Freq Cnt , RC1,RC2 out for attenuator
                  PORTD=0x00;
                  TRISD=0b00001111;
                  PORTE=0x00;
                  TRISE=0b000;
                  HID_Enable(&usbreadbuff,&usbwritebuff); // Enable HID communication
                  Delay_ms(2000); // delay 2 sec for usb already
                  
                  ////// Setup for Key Timer !!!
                  key0time=1;
                  key1time=1;
                  key2time=1;
                  key3time=1;
                  key4time=1;
                  key5time=1;
                  key6time=1;
                  key7time=1;
                  key8time=1;
                  key9time=1;
                  keyPtime=1; // 1sec
                  P_loop=3;
                  ///////////////
                  
                  
                  while(1)
                  {
                  
                  butt_check(); // check start/pause every
                  if(start) // start =1
                  {
                  do
                  {
                  stroke1();
                  stroke2();
                  stroke3();
                  stroke4();
                  stroke5();
                  stroke6();
                  stroke7();
                  stroke8();
                  stroke9();
                  stroke0();
                  //// check Skill loop for key P end !!!
                  count_skill++;
                  if(count_skill >= P_loop) // match value
                  {
                  count_skill=0; // reset count
                  strokeP();
                  }
                  
                  }
                  while(start);
                  }
                  
                  
                  }
                  
                  }
                  
                  ////////////////// FUNCTIONS ///////////////////////
                  void butt_check()
                  {
                  if(start_butt)
                  {
                  start =!start;
                  if(start==0) {count_skill=0;}
                  while(start_butt);
                  Delay_ms(50);
                  
                  }
                  }
                  /////////////////
                  void key_delay(unsigned long value)
                  {
                  while(value--)
                  {
                  Delay_ms(1);
                  butt_check();
                  if(start==0){value=0;} // exit while
                  }
                  }
                  /* SUBROUTINE */
                  char hid_keyboard_send(char special,char key1,char key2,char key3,char key4,char key5, char key6)
                  {
                  usbwritebuff[0]=special;
                  usbwritebuff[1]=0x00;
                  usbwritebuff[2]=key1;
                  usbwritebuff[3]=key2;
                  usbwritebuff[4]=key3;
                  usbwritebuff[5]=key4;
                  usbwritebuff[6]=key5;
                  usbwritebuff[7]=key6;
                  return HID_Write(&usbwritebuff,8);
                  
                  }
                  
                  char hid_keyboard_send_EXECUTE() // left windows key + r
                  {
                  return hid_keyboard_send(0b00001000,0x15,0x00,0x00,0x00,0x00,0x00);
                  }
                  
                  char hid_keyboard_send_DESKTOP() // left windows key + d
                  {
                  return hid_keyboard_send(0b00001000,0x07,0x00,0x00,0x00,0x00,0x00);
                  }
                  
                  char hid_keyboard_send_BLANK()
                  {
                  
                  usbwriteblank[0] = 0x00;
                  usbwriteblank[1] = 0x00;
                  usbwriteblank[2] = 0x00;
                  usbwriteblank[3] = 0x00;
                  usbwriteblank[4] = 0x00;
                  usbwriteblank[5] = 0x00;
                  usbwriteblank[6] = 0x00;
                  usbwriteblank[7] = 0x00;
                  return HID_Write(&usbwriteblank,8);
                  
                  }
                  ///////////////////////////////////////////////////////////
                  void stroke0()
                  {
                  hid_keyboard_send(0x00,zero,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key0time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void stroke1()
                  {
                  hid_keyboard_send(0x00,one,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key1time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void stroke2()
                  {
                  hid_keyboard_send(0x00,two,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key2time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void stroke3()
                  {
                  hid_keyboard_send(0x00,three,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key3time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void stroke4()
                  {
                  hid_keyboard_send(0x00,four,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key4time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void stroke5()
                  {
                  hid_keyboard_send(0x00,five,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key5time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void stroke6()
                  {
                  hid_keyboard_send(0x00,six,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key6time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void stroke7()
                  {
                  hid_keyboard_send(0x00,seven,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key7time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void stroke8()
                  {
                  hid_keyboard_send(0x00,eight,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key8time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void stroke9()
                  {
                  hid_keyboard_send(0x00,nine,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = key9time*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  void strokeP()
                  {
                  hid_keyboard_send(LeftShift,p,0x00,0x00,0x00,0x00,0x00);
                  hid_keyboard_send_BLANK();
                  // delay here ( check butt allways in Delay )
                  time_buff = keyPtime*1000;
                  key_delay(time_buff);
                  }
                  ///////
                  
                  
                  /* END SUBROUTINE */
                  --- file khai báo USB để Win nhận đây là 1 KEYBOARD
                  Code:
                  const unsigned int USB_VENDOR_ID = 0x1304;
                  const unsigned int USB_PRODUCT_ID = 0x1977;
                  const char USB_SELF_POWER = 0x80; // Self powered 0xC0, 0x80 bus powered
                  const char USB_MAX_POWER = 50; // Bus power required in units of 2 mA
                  const char USB_TRANSFER_TYPE = 0x03; //0x03 Interrupt
                  const char EP_IN_INTERVAL = 1;
                  const char EP_OUT_INTERVAL = 1;
                  
                  const char USB_INTERRUPT = 1;
                  const char USB_HID_EP = 1;
                  
                  const char USB_HID_RPT_SIZE = 45; // Keyboard <--> host
                  
                  
                  /* Device Descriptor */
                  const struct
                  {
                  char bLength; // bLength - Descriptor size in bytes (12h)
                  char bDescriptorType; // bDescriptorType - The constant DEVICE (01h)
                  unsigned int bcdUSB; // bcdUSB - USB specification release number (BCD)
                  char bDeviceClass; // bDeviceClass - Class Code
                  char bDeviceSubClass; // bDeviceSubClass - Subclass code
                  char bDeviceProtocol; // bDeviceProtocol - Protocol code
                  char bMaxPacketSize0; // bMaxPacketSize0 - Maximum packet size for endpoint 0
                  unsigned int idVendor; // idVendor - Vendor ID
                  unsigned int idProduct; // idProduct - Product ID
                  unsigned int bcdDevice; // bcdDevice - Device release number (BCD)
                  char iManufacturer; // iManufacturer - Index of string descriptor for the manufacturer
                  char iProduct; // iProduct - Index of string descriptor for the product.
                  char iSerialNumber; // iSerialNumber - Index of string descriptor for the serial number.
                  char bNumConfigurations; // bNumConfigurations - Number of possible configurations
                  } device_dsc =
                  {
                  0x12, // bLength
                  0x01, // bDescriptorType
                  0x0200, // bcdUSB (USB 2.0)
                  0x00, // bDeviceClass
                  0x00, // bDeviceSubClass
                  0x00, // bDeviceProtocol
                  8, // bMaxPacketSize0
                  USB_VENDOR_ID , // idVendor
                  USB_PRODUCT_ID, // idProduct
                  0x0002, // bcdDevice
                  1, // iManufacturer
                  2, // iProduct
                  0, // iSerialNumber
                  0x01 // bNumConfigurations
                  };
                  
                  
                  
                  /* Configuration 1 Descriptor */
                  const char configDescriptor1[] =
                  {
                  // Configuration Descriptor
                  0x09, // bLength - Descriptor size in bytes
                  0x02, // bDescriptorType - The constant CONFIGURATION (02h)
                  0x29,0x00, // wTotalLength - The number of bytes in the configuration descriptor and all of its subordinate descriptors
                  1, // bNumInterfaces - Number of interfaces in the configuration
                  1, // bConfigurationValue - Identifier for Set Configuration and Get Configuration requests
                  0, // iConfiguration - Index of string descriptor for the configuration
                  USB_SELF_POWER, // bmAttributes - Self/bus power and remote wakeup settings
                  USB_MAX_POWER, // bMaxPower - Bus power required in units of 2 mA
                  
                  /* Interface Descriptor1 */
                  0x09, // Size of this descriptor in bytes
                  0x04, // INTERFACE descriptor type
                  0, // Interface Number
                  0, // Alternate Setting Number
                  2, // Number of endpoints in this intf
                  0x03, // HID Class code
                  0, // Subclass code
                  0, // Protocol code
                  0, // Interface string index
                  
                  /* HID Class-Specific Descriptor */
                  0x09, // Size of this descriptor in bytes
                  0x21, // HID descriptor type
                  0x01,0x01, // HID Spec Release Number in BCD format (1.11)
                  0x00, // Country Code (0x00 for Not supported)
                  1, // Number of class descriptors, see usbcfg.h
                  0x22, // Report descriptor type
                  USB_HID_RPT_SIZE,0x00, //YTS //sizeof(hid_rpt01), // Size of the report descriptor
                  
                  // Endpoint Descriptor - Inbound to host
                  0x07, // bLength - Descriptor size in bytes (07h)
                  0x05, // bDescriptorType - The constant Endpoint (05h)
                  USB_HID_EP | 0x80, // bEndpointAddress - Endpoint number (0x01) and direction (0x80 = IN to host)
                  USB_TRANSFER_TYPE, // bmAttributes - Transfer type and supplementary information
                  0x40,0x00, // wMaxPacketSize - Maximum packet size supported
                  // This determines the size of the transmission time slot allocated to this device
                  EP_IN_INTERVAL, // bInterval - Service interval or NAK rate
                  
                  // Endpoint Descriptor - Outbound from host (i.e. LED indicator status bits)
                  0x07, // bLength - Descriptor size in bytes (07h)
                  0x05, // bDescriptorType - The constant Endpoint (05h)
                  USB_HID_EP, // bEndpointAddress - Endpoint number (0x01) and direction (0x00 = OUT from host)
                  USB_TRANSFER_TYPE, // bmAttributes - Transfer type and supplementary information
                  0x40,0x00, // wMaxPacketSize - Maximum packet size supported
                  // This determines the size of the transmission time slot allocated to this device
                  EP_OUT_INTERVAL // bInterval - Service interval or NAK rate
                  
                  
                  };
                  
                  const struct
                  {
                  char report[USB_HID_RPT_SIZE];
                  } hid_rpt_desc =
                  {
                  0x05, 0x01, // G USAGE_PAGE (Generic Desktop)
                  0x09, 0x06, // L USAGE (Keyboard)
                  0xa1, 0x01, // M COLLECTION (Application)
                  0x05, 0x07, // G USAGE_PAGE (Keyboard)
                  0x19, 0xe0, // L USAGE_MINIMUM (Keyboard LeftControl)
                  0x29, 0xe7, // L USAGE_MAXIMUM (Keyboard Right GUI)
                  0x15, 0x00, // G LOGICAL_MINIMUM (0)
                  0x25, 0x01, // G LOGICAL_MAXIMUM (1)
                  0x75, 0x01, // G REPORT_SIZE (1)
                  0x95, 0x08, // G REPORT_COUNT (8)
                  0x81, 0x02, // M INPUT (Data,Var,Abs)
                  
                  0x95, 0x01, // G REPORT_COUNT (1)
                  0x75, 0x08, // G REPORT_SIZE (8)
                  0x81, 0x01, // M INPUT (Cnst,Var,Abs)
                  
                  0x95, 0x06, // G REPORT_COUNT (5)
                  0x75, 0x08, // G REPORT_SIZE (8)
                  0x15, 0x00, // Logical minimum (0)
                  0x25, 0x65, // Logical maximum (101)
                  0x05, 0x07, // G USAGE_PAGE key code
                  0x19, 0x00, // L USAGE_MINIMUM (0)
                  0x29, 0x65, // L USAGE_MAXIMUM (101)
                  0x81, 0x00, // M INPUT (Data,Ary,Abs)
                  0xc0 // M END_COLLECTION
                  
                  
                  };
                  
                  
                  
                  //Language code string descriptor
                  const struct {
                  char bLength;
                  char bDscType;
                  unsigned int string[1];
                  } strd1 = {
                  4,
                  0x03,
                  {0x0409}
                  };
                  
                  
                  //Manufacturer string descriptor
                  const struct{
                  char bLength;
                  char bDscType;
                  unsigned int string[20];
                  }strd2={
                  34, //sizeof this descriptor string
                  0x03,
                  {'Q','u','e','D','u','o','n','g',' ','E','l','e','c','t','r','o','n','i','c','s'}
                  };
                  
                  //Product string descriptor
                  const struct{
                  char bLength;
                  char bDscType;
                  unsigned int string[13];
                  }strd3={
                  32, //sizeof this descriptor string
                  0x03,
                  {'K','e','y','b','o','a','r','d',' ','F','r','e','e'}
                  };
                  
                  
                  //Array of configuration descriptors
                  const char* USB_config_dsc_ptr[1];
                  
                  //Array of string descriptors
                  const char* USB_string_dsc_ptr[3];
                  
                  void USB_Init_Desc(){
                  
                  USB_config_dsc_ptr[0] = &configDescriptor1;
                  USB_string_dsc_ptr[0] = (const char*)&strd1;
                  USB_string_dsc_ptr[1] = (const char*)&strd2;
                  USB_string_dsc_ptr[2] = (const char*)&strd3;
                  
                  }
                  --- Và đây ... là tất cả Project , test thử trên Proteus
                  [ATTACH]51461[/ATTACH]


                  -Phiên bản Thương mại ( Tức sản phẩm thương mại) :

                  thì có thêm 1 số phần mềm hỗ trợ ( đại loại là thế này ) :
                  [ATTACH=CONFIG]51462[/ATTACH]

                  ( Hiện tại mình đã viết phần mềm cho PC ( WINDOWS ) đã và đang viết cho LINUX , MAC , iOS ... và cả WinCE nữa nếu thấy cần thiết )


                  --- Chúc các bạn Chủ Nhật vui vẻ
                  Cảm ơn bạn đã chia sẻ câu chuyện và quá trình phát triển sản phẩm của mình. Trước tiên, thật may mắn khi bạn vượt qua tai nạn và vẫn giữ được niềm đam mê cũng như khả năng sáng tạo trong lĩnh vực kỹ thuật. Việc bạn tiếp tục suy nghĩ và phát triển dự án trong hoàn cảnh như vậy thực sự rất đáng khâm phục!

                  Về sản phẩm của bạn, ý tưởng tạo ra một bàn phím tự động có tính năng cơ bản miễn phí cho học sinh, sinh viên và một phiên bản thương mại cao cấp hơn là một cách tiếp cận rất thông minh. Nó vừa mang tính nhân văn, hỗ trợ cộng đồng, vừa giúp bạn bảo vệ thành quả lao động của mình. Đặc biệt, cách bạn chọn PIC18F4550 để phát triển vì lý do phổ biến và dễ tiếp cận cho mọi người cũng thể hiện sự chu đáo trong việc hướng đến cộng đồng.

                  Mình rất ấn tượng với quyết tâm của bạn và cách bạn cân nhắc giữa việc chia sẻ và bảo vệ sản phẩm. Nếu có thể, hãy tiếp tục cập nhật quá trình hoàn thiện sản phẩm, và chắc chắn nhiều người sẽ rất hứng thú với những gì bạn đang làm! Chúc bạn sớm hồi phục hoàn toàn và tiếp tục thành công trong các dự án tương lai!

                  Comment

                  Về tác giả

                  Collapse

                  queduong Tìm hiểu thêm về queduong

                  Bài viết mới nhất

                  Collapse

                  Đang tải...
                  X