⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2_bin.lst

📁 ps2的驱动
💻 LST
📖 第 1 页 / 共 3 页
字号:
 237          //输入:无
 238          //输出:无
 239          //描述:
 240          /*********************************************************/
C51 COMPILER V7.07   PS2_BIN                                                               05/26/2005 16:04:50 PAGE 5   

 241          void uart() interrupt 4 using 2
 242          {
 243   1      ES=0;
 244   1      TH1=0xfa; //装入初值,22.1184MHZ 的晶振,9600 的波特率
 245   1      TL1=0xfa;
 246   1      
 247   1      if(RI == 1)       //接收中断
 248   1      {
 249   2        RI= 0;
 250   2      
 251   2      }
 252   1      else if(TI == 1)  //发送中断
 253   1      {
 254   2        if(KeyCodeSum >1)
 255   2        {
 256   3       //  SBUF = KeyCodeBuff[--KeyCodeSum];  
 257   3      //   SBUF = 0x00;
 258   3        }
 259   2                      else
 260   2                      {
 261   3                              KeyCodeSum = 0;                        
 262   3                      }
 263   2        TI = 0;
 264   2      }
 265   1      ES=1;
 266   1      }
 267          
 268          unsigned char findcode(unsigned char dat,unsigned char sort)
 269          {
 270   1              unsigned char conter=0x00;
 271   1              switch (sort)
 272   1              {
 273   2              case 0xE0:
 274   2              {
 275   3              for(conter=0x00;conter<22;conter++)
 276   3              {
 277   4              if(dat==e0_keyval[conter])return conter; 
 278   4              }
 279   3          return nodefinedkey;
 280   3              //break;
 281   3              }
 282   2              case 0xE1:
 283   2              {
 284   3              for(conter=0x00;conter<2;conter++)
 285   3              {
 286   4              if(dat==pausekey[conter])return conter; 
 287   4              }
 288   3          return nodefinedkey;
 289   3              //break;
 290   3      
 291   3              }
 292   2              default:
 293   2              for(conter=0x00;conter<86;conter++)
 294   2              {
 295   3              if(dat==keyval[conter])return conter; 
 296   3              }
 297   2          return nodefinedkey;        
 298   2              //break;
 299   2              }
 300   1      
 301   1      }
 302          /*********************************************************/
C51 COMPILER V7.07   PS2_BIN                                                               05/26/2005 16:04:50 PAGE 6   

 303          //函数:KeyTransmit()
 304          //功能:串口中断
 305          //输入:
 306          //输出:
 307          //描述:
 308          /*********************************************************/
 309          void KeyTransmit(void)
 310          {      
 311   1                      EA=0;
 312   1              
 313   1              if((KeyCodeBuff[0x00]==0xE0)&(KeyCodeBuff[0x01]==0x12)&(KeyCodeBuff[0x02]!=0x00))
 314   1                      {
 315   2                      OUTPORT=findcode(KeyCodeBuff[0x02],0xE0)+80;//是扩展建?
 316   2                      }
 317   1                      else if((KeyCodeBuff[0x00]==0xE0)&(KeyCodeBuff[0x02]==0x00))
 318   1                      {
 319   2                      OUTPORT=findcode(KeyCodeBuff[0x01],0xE0)+58;//是普通扩展键?
 320   2                      }
 321   1                      if(KeyCodeBuff[0x00]==0xE1)OUTPORT=200; //pause的键显示200
 322   1                      else
 323   1                      {
 324   2                      if((KeyCodeBuff[0x00]!=0xE0)&(KeyCodeBuff[0x00]!=0x00))
 325   2                  {
 326   3                      OUTPORT=findcode(KeyCodeBuff[0x00],0x12);//是普通键吗?
 327   3                      }
 328   2                      }
 329   1                      //KeyCodeSum -= 0x01;  
 330   1                      SBUF = KeyCodeBuff[0x00];//发送键值
 331   1              //      KeyCodeSum += 0x01;
 332   1              //KeyCodeSum = 0;                   //
 333   1      //              KeyExtendFlag = 0;
 334   1      EA=1;
 335   1      }
 336          /*********************************************************/
 337          //函数:timer0()
 338          //功能:定时器0中断
 339          //输入:
 340          //输出:
 341          //描述:
 342          /*********************************************************/
 343          void timer0(void) interrupt 1 using 3
 344          {
 345   1      unsigned char compare=0x00;
 346   1      switch(dat[0x00])
 347   1      
 348   1      case 0xe0:  //是扩展键吗?
 349   1                      for(compare=0x00;compare<100;compare++)
 350   1                      {
 351   2                      if(dat[0x01]==e0_keyval[compare])break;
 352   2                      }
 353   1      }
 354          /*********************************************************/
 355          //函数:ex0()
 356          //功能:外部中断0服务程序
 357          //输入:
 358          //输出:
 359          //描述:
 360          /*********************************************************/
 361          void ex0() interrupt 0 using 3
 362          {        //时钟线变低
 363   1               unsigned char bitCount;
 364   1               unsigned char KeyCode = 0;
C51 COMPILER V7.07   PS2_BIN                                                               05/26/2005 16:04:50 PAGE 7   

 365   1               if(KeyCodeSum < MAXBUFFER) KeyCodeBuff[KeyCodeSum] = 0;
 366   1              for(bitCount = 8; bitCount != 0; bitCount --)   // 把起始位算入
 367   1         {
 368   2          WAITFORKEYBOARDPULSE;     // 等待一个有效的下跳沿
 369   2          KeyCode  >>= 1;      // 按照PS2格式,数据低位在前
 370   2          scl  = 1;
 371   2          sda  = 1;
 372   2          if(sda == 1)
 373   2        {
 374   3            KeyCode |= 0x80; // 得到有效的数据位
 375   3           }
 376   2         }
 377   1         WAITFORKEYBOARDPULSE;     // 等待按键发送效验位
 378   1         WAITFORKEYBOARDPULSE;     // 等待按键发送终止位
 379   1         while(!scl);         // 等待键盘把时钟线拉高
 380   1              switch(KeyCode)
 381   1              {
 382   2      
 383   2              case CODE_POST:
 384   2                     KeyBoardConnectFlag = 1;
 385   2                     break;
 386   2              case CODE_ACK:    //键盘应答
 387   2                 //    Order(LedStatus);
 388   2                     break;
 389   2              case CODE_ECHO:   //键盘的echo回应码 
 390   2                     break;
 391   2              case 0xFE:
 392   2                     break;             
 393   2              case CODE_BREAK:  //键盘发送的是断码
 394   2                     KeyUpFlag = 1;                                             
 395   2                     break;
 396   2                                 
 397   2              case CODE_EXTEND: //键盘发送的是扩展码
 398   2                    if(KeyExtendFlag == 0)//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 399   2                     {       // KeyFlag = 1; 
 400   3                             KeyExtendFlag = 1;
 401   3                                                 KeyCodeSum=0x00;
 402   3                              KeyCodeBuff[KeyCodeSum] = KeyCode;
 403   3                              KeyCodeSum+=1;
 404   3                                              
 405   3                     }         
 406   2                     break;
 407   2      
 408   2              case CODE_PAUSE:  //键盘发送的是Pause键的键码
 409   2                     KeyPauseFlag = 1;
 410   2                                 //KeyFlag = 1;
 411   2                                KeyCodeSum=0x00;
 412   2                     KeyCodeBuff[KeyCodeSum] = KeyCode;
 413   2                     if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
 414   2                                 
 415   2                     break;  
 416   2                         /*
 417   2              case CODE_NUMLOCK:
 418   2                     if(KeyPauseFlag == 1 || (KeyMakeCodeFlag == 0 && KeyUpFlag))
 419   2                     {
 420   2                              //KeyFlag = 1; //如果是Pause键的键码(E1+14+77)则77代表键码结束直接发送
 421   2                                                      
 422   2                              if(KeyMakeCodeFlag == 0) //Pause键发送的键码是(F0+77)
 423   2                              {
 424   2                                      KeyCodeBuff[KeyCodeSum] = CODE_PAUSE;
 425   2                                      if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
 426   2                                      KeyCodeBuff[KeyCodeSum] = 0x14;
C51 COMPILER V7.07   PS2_BIN                                                               05/26/2005 16:04:50 PAGE 8   

 427   2                                      if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
 428   2                              }
 429   2                                                      
 430   2                                                      KeyCodeBuff[KeyCodeSum] = KeyCode;
 431   2                              KeyUpFlag = 0;
 432   2                              KeyMakeCodeFlag = 0;
 433   2                              KeyPauseFlag = 0;
 434   2                              break;
 435   2                     } 
 436   2                     
 437   2              case CODE_CAPSLOCK:
 438   2                      //KeyFlag = 1;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 439   2              //      KeyCodeSum=0x00;
 440   2                      KeyCodeBuff[KeyCodeSum] = KeyCode;
 441   2                      if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
 442   2                      break;
 443   2                           
 444   2              case CODE_SCROLLLOCK:     //发送的是三个LED控制键通码
 445   2                            // KeyFlag = 1;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 446   2                     KeyLedLockFlag = 1;
 447   2                                 //KeyCodeSum=0x00;
 448   2                                 KeyCodeBuff[KeyCodeSum] = KeyCode;
 449   2                                 if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
 450   2                                 break;
 451   2        */                                                 
 452   2              default:          //键盘发送的是通码
 453   2                      
 454   2                     if(KeyUpFlag ==1)//KeyUpFlag ==
 455   2                     {                  //发送的是断码之后的通码
 456   3                               
 457   3                              KeyFlag = 1;             //有正常键被按下
 458   3                              KeyUpFlag = 0;           //键弹起标志
 459   3                              KeyMakeCodeFlag = 0;     //键通码标志
 460   3                                                      KeyExtendFlag = 0;
 461   3                                                      if(KeyCode==0x12)KeyCodeBuff[0x03]= 0x00; //断码之后的通码为0X12说明按键码全部接收完毕/
 462   3                                                      else
 463   3                                                      {
 464   4                                              //      KeyCodeBuff[0x02]= 0x00; //断码之后的通码不为0X12就是普通扩展键清无用的字节
 465   4                                                      }
 466   3                                                      KeyCodeSum=0x00;
 467   3                                                      
 468   3                                                        /*
 469   3                              if(KeyPauseFlag == 1)    //Pause键被按下发送的键码是(E1+F0+14)                    
             -                
 470   3                              {
 471   3                                      KeyPauseFlag = 0;
 472   3                                      KeyCodeBuff[KeyCodeSum] = KeyCode;
 473   3                                      if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
 474   3                                                                      else
 475   3                                                                      {
 476   3                                                                      KeyCodeSum=0x00;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 477   3                                                                          }
 478   3                                      break;
 479   3                              }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -