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

📄 ps2_bin.lst

📁 ps2的驱动
💻 LST
📖 第 1 页 / 共 3 页
字号:
 480   3                                                      
 481   3                                                      
 482   3                                                      if(KeyExtendFlag == 1)
 483   3                                 {
 484   3                                      
 485   3                          
 486   3                          if((KeyCodeSum > 0x02)) 
 487   3                                              {
C51 COMPILER V7.07   PS2_BIN                                                               05/26/2005 16:04:50 PAGE 9   

 488   3                                              KeyCodeSum=0x00;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 489   3                                              KeyExtendFlag = 0;
 490   3                                              }
 491   3                                              else
 492   3                                              {
 493   3                                              //KeyCodeSum+=1;
 494   3                                              KeyCodeBuff[KeyCodeSum] = KeyCode;
 495   3                                              KeyCodeSum++;
 496   3                                              }
 497   3                         
 498   3                                 
 499   3                                 }
 500   3              /*
 501   3                              if(KeyLedLockFlag == 1)
 502   3                              {
 503   3                                      KeyLedLockFlag = 0;
 504   3                                      switch(KeyCode)
 505   3                                      {
 506   3                                      case CODE_CAPSLOCK:
 507   3                                              if(LedStatus & CAPSLOCK_EN)
 508   3                                              {
 509   3                                                      LedStatus &= CAPSLOCK_DIS;
 510   3                                              }
 511   3                                              else
 512   3                                              {
 513   3                                                      LedStatus |= CAPSLOCK_EN;
 514   3                                              }        
 515   3                                              break;
 516   3                                      case CODE_NUMLOCK:
 517   3                                              if(LedStatus & NUMLOCK_EN)
 518   3                                              {
 519   3                                                      LedStatus &= NUMLOCK_DIS;
 520   3                                              }
 521   3                                              else
 522   3                                              {
 523   3                                                      LedStatus |= NUMLOCK_EN;
 524   3                                              }
 525   3                                              break;
 526   3                                      case CODE_SCROLLLOCK:
 527   3                                              if(LedStatus & SCROLLLOCK_EN)
 528   3                                              {
 529   3                                                      LedStatus &= SCROLLLOCK_DIS;
 530   3                                              }
 531   3                                              else
 532   3                                              {
 533   3                                                      LedStatus |= SCROLLLOCK_EN;
 534   3                                              }   
 535   3                                                              //          KeyCodeBuff[KeyCodeSum] = KeyCode;
 536   3                                              break;
 537   3                                      }
 538   3                                      Order(0xED); //设置Led
 539   3                                      
 540   3                                      //Order(LedStatus);
 541   3                                      //LedLock(LedStatus);
 542   3                              }  */             
 543   3                     }
 544   2                                 
 545   2                                 
 546   2                     else               //通码
 547   2                     {        
 548   3                                              //      KeyCodeSum=0x00;
 549   3                              KeyCodeBuff[KeyCodeSum] = KeyCode;
C51 COMPILER V7.07   PS2_BIN                                                               05/26/2005 16:04:50 PAGE 10  

 550   3                              if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
 551   3                           //   KeyMakeCodeFlag  = 1;
 552   3                     }                         
 553   2              }
 554   1                                      
 555   1      }
 556          /*********************************************************/
 557          //函数:KeyScan()
 558          //功能:扫描键盘
 559          //输入:
 560          //输出:键值
 561          //描述:
 562          /*********************************************************/
 563          /*
 564          void KeyScan()
 565          {
 566          unsigned char KeyCode;
 567          KeyCode = ReadPS2();
 568          if(KeyCode == CODE_BREAK)
 569          {
 570          
 571            KeyFlag = 1;
 572          }
 573          else
 574          {
 575            KeyCodeBuff[KeyCodeSum] = KeyCode;
 576                          KeyCodeSum++;
 577          }
 578          }
 579          */
 580          /*********************************************************/
 581          //函数:ReadPS2()
 582          //功能:扫描键盘
 583          //输入:
 584          //输出:键值
 585          //描述:
 586          /*********************************************************/\
 587          
 588          unsigned char ReadPS2()
 589          {
 590   1      unsigned char KeyCode;  //键盘键值
 591   1      unsigned char bitCount; //位数
 592   1      while(scl);   // 等待键盘把时钟第一次拉低
 593   1      
 594   1         for(bitCount = 8; bitCount != 0; bitCount --)   // 把起始位算入
 595   1         {
 596   2          WAITFORKEYBOARDPULSE;     // 等待一个有效的下跳沿
 597   2          KeyCode  >>= 1;      // 按照PS2格式,数据低位在前
 598   2          scl  = 1;
 599   2          sda  = 1;
 600   2          if(sda == 1)
 601   2        {
 602   3            KeyCode |= 0x80; // 得到有效的数据位
 603   3           }
 604   2         }
 605   1         WAITFORKEYBOARDPULSE;     // 等待按键发送效验位
 606   1         WAITFORKEYBOARDPULSE;     // 等待按键发送终止位
 607   1         while(!scl);         // 等待键盘把时钟线拉高
 608   1              if(KeyCode == CODE_POST)
 609   1                      KeyBoardConnectFlag = 1;
 610   1          return(KeyCode);         // 返回按键扫描
 611   1      }
C51 COMPILER V7.07   PS2_BIN                                                               05/26/2005 16:04:50 PAGE 11  

 612          
 613          /*********************************************************/
 614          //函数:Order()
 615          //功能:向键盘发送命令
 616          //输入:命令
 617          //输出:?
 618          //描述:
 619          /*********************************************************/
 620          void Order(unsigned char orderByte)
 621          {
 622   1      unsigned char cnt;
 623   1         unsigned char check;
 624   1      
 625   1              //DINT;   //关闭总中断,发送命令到键盘
 626   1              
 627   1         scl = 0;
 628   1         sda = 1;
 629   1         for(cnt = 0xff; cnt != 0; cnt --);  // 拉低时钟与数据并延时
 630   1      
 631   1         sda = 0;
 632   1         scl = 1;
 633   1         for(cnt = 8; cnt != 0; cnt --)
 634   1      {   // 发送八位数据,循环八次
 635   2      
 636   2          while(scl);
 637   2                   if(orderByte & 0x01)
 638   2        {
 639   3            sda  = 1;      // 根据低位设定输出数据
 640   3            check ++;       // 如果输出一个1,效验记录数据加一
 641   3           }
 642   2           else
 643   2           {
 644   3            sda  = 0;
 645   3           }
 646   2          orderByte >>= 1;       // 命令字调整
 647   2          while(!scl);       // 输出脉冲
 648   2         }
 649   1         while(scl);
 650   1         if(check % 2)
 651   1      {       // 如果输出过偶数个脉冲
 652   2           sda = 0;       // 效验数据位置1
 653   2          }
 654   1      else
 655   1      {
 656   2           sda = 1;       // 否则数据位置0
 657   2          }
 658   1         while(!scl);
 659   1         while(scl);
 660   1         sda  = 1;
 661   1         while(!scl);       // 发送终止位
 662   1         sda  = 1;
 663   1         scl  = 1;
 664   1         while((scl) | (sda));     // 等待ACK握手信号
 665   1              while(!scl);              //等待scl变高
 666   1              //EINT;  //开总中断
 667   1      }
 668          /*********************************************************/
 669          //函数:void LedLock()
 670          //功能:三个键盘的控制
 671          //输入:三个键盘灯的控制
 672          //输出:三个灯的状态
 673          //描述:
C51 COMPILER V7.07   PS2_BIN                                                               05/26/2005 16:04:50 PAGE 12  

 674          /*********************************************************/
 675          /*
 676          void LedLock(unsigned char LedLock)
 677          {
 678                  Order(0xED);  //控制命令字
 679                  Order(LedLock);
 680          }
 681          /*********************************************************/
 682          //函数:KickDog()
 683          //功能:喂狗
 684          //输入:
 685          //输出:?
 686          //描述:
 687          /*********************************************************/
 688          
 689          /*********************************************************/
 690          //函数:Delay()
 691          //功能:延时
 692          //输入:延时时间设定值
 693          //输出:?
 694          //描述:
 695          /*********************************************************/
 696          void Delay(unsigned char Times)
 697          {
 698   1      unsigned char n;
 699   1      n = 120;
 700   1      for(;Times>0;Times--)
 701   1      {
 702   2        for(;n>0;n--)
 703   2         ;
 704   2      }
 705   1      }
 706          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    896    ----
   CONSTANT SIZE    =    110    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     31       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      7    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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