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

📄 ps2.lst

📁 用51单片机仿真PC机键盘
💻 LST
字号:
C51 COMPILER V7.06   PS2                                                                   03/11/2009 16:59:41 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE PS2
OBJECT MODULE PLACED IN PS2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PS2.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #include "PS2.H"
   3          
   4          BYTE PS2RecChar=0xCC;
   5          BOOL KeyBoardFlag=FALSE;
   6          
   7          void OnKeyBoardOnline(BOOL i)
   8          {
   9   1              KeyBoardFlag=i;
  10   1      }       
  11          //---------------------------------------------------------------------------
  12          void OnPS2ReceiveChar(BYTE ReceChar,BOOL P)
  13          {
  14   1              BOOL ParityBit=0;
  15   1              ACC=ReceChar;
  16   1              CY=P;
  17   1              ParityBit=(BOOL)(CY?0x00:0x80);//奇校验位
  18   1              if(P==ParityBit);
  19   1              PS2RecChar=ReceChar;
  20   1      }
  21          //---------------------------------------------------------------------------
  22          void OnPS2SendChar(BYTE dat)
  23          {
  24   1              BOOL ParityBit;
  25   1              BYTE i;
  26   1              ACC=dat;
  27   1              CY=P;
  28   1              ParityBit=(BOOL)(CY?0x00:0x80);//奇校验位
  29   1              
  30   1              CLSSIGNAL();
  31   1      
  32   1              EX0=0;
  33   1      
  34   1              H_DATA=0;
  35   1          Delay10us();//start bit
  36   1              H_CLK=1;
  37   1              Delay10us();
  38   1              H_CLK=0;
  39   1              Delay30us();
  40   1              
  41   1              for(i=0;i<8;i++)
  42   1              {
  43   2                      if(dat&0x01==0x01){H_DATA=1;Delay10us();}
  44   2                      else {H_DATA=0;Delay10us();}
  45   2                      dat>>=1;
  46   2                      H_CLK=1;
  47   2                      Delay10us();
  48   2                      H_CLK=0;
  49   2                      Delay30us();
  50   2              }
  51   1      
  52   1              H_DATA=ParityBit;
  53   1          Delay10us();//parity bit
  54   1              H_CLK=1;
  55   1              Delay10us();
C51 COMPILER V7.06   PS2                                                                   03/11/2009 16:59:41 PAGE 2   

  56   1              H_CLK=0;
  57   1              Delay30us();
  58   1      
  59   1              H_DATA=1;
  60   1              Delay10us();//stop bit
  61   1              H_CLK=1;
  62   1              Delay10us();
  63   1              H_CLK=0;
  64   1              Delay30us();
  65   1              
  66   1              IE0=0;
  67   1              EX0=1;
  68   1              H_CLK=1;
  69   1              H_DATA=1;
  70   1              Delay30us();
  71   1      }
  72          //---------------------------------------------------------------------------
  73          void ExternInterrupt0(void) interrupt 0
  74          {
  75   1              BOOL ParityBit=0,CLKFlag=1;
  76   1              BYTE i=0,j=8,dat=0x00;
  77   1      
  78   1              EX0=0;
  79   1      
  80   1              while(CLKFlag)
  81   1              {
  82   2                      i++;
  83   2                      if(H_CLK==1)CLKFlag=0;
  84   2                      if(i>0xEE)
  85   2                      {
  86   3                              IE0=0;
  87   3                              EX0=1;
  88   3                              return ;
  89   3                      }
  90   2              } 
  91   1              while(j--)//延时等待大键盘的动作
  92   1              {
  93   2                      for(i=0;i<0x88;i++)//检查是否有数据处理 0x88
  94   2                      {
  95   3                              if(H_CLK==0)//有动作则是大键盘存在
  96   3                              {
  97   4                                      OnKeyBoardOnline(TRUE);//大键盘存在,开机由大键盘应答
  98   4                                      IE0=0;
  99   4                                      EX0=1;
 100   4                                      return ;//存在的话置标志位,并返回
 101   4                              }
 102   3                      }
 103   2              }
 104   1              OnKeyBoardOnline(FALSE);//大键盘不存在,由小键盘应答
 105   1              
 106   1              //转到接收
 107   1              for(i=0;i<8;i++)//read 8bit
 108   1              {
 109   2                      Delay30us();
 110   2                      H_CLK=0;            
 111   2                      Delay30us();
 112   2                      H_CLK=1;
 113   2                      dat=dat>>1;    
 114   2                      if(H_DATA)dat|=0x80;
 115   2                      
 116   2                      if(H_CLK==0){   return; }//如果时钟被拉低,则有错误发生
 117   2              }
C51 COMPILER V7.06   PS2                                                                   03/11/2009 16:59:41 PAGE 3   

 118   1                                                                                       
 119   1              Delay30us();
 120   1              H_CLK=0;            
 121   1              Delay30us();
 122   1              H_CLK=1;
 123   1              if(H_DATA)ParityBit=1;
 124   1              else ParityBit=0; 
 125   1      
 126   1              Delay30us();
 127   1              H_CLK=0;            
 128   1              Delay30us();
 129   1              H_CLK=1;//STOP BIT H_DATA 0 ERR
 130   1              
 131   1              Delay10us();
 132   1              H_DATA=0;       //ACK bit
 133   1              Delay10us();
 134   1              H_CLK=0;
 135   1              Delay30us();Delay30us();
 136   1              H_CLK=1;
 137   1              Delay30us();
 138   1              H_DATA=1;
 139   1              
 140   1              OnPS2ReceiveChar(dat,ParityBit);
 141   1      
 142   1              IE0=0;
 143   1              EX0=1;
 144   1              return ;
 145   1      }
 146          //---------------------------------------------------------------------------
 147          void ProcessPS2(void)
 148          {
 149   1              if(KeyBoardFlag==FALSE)//大键盘不存在
 150   1              {
 151   2                      if(PS2RecChar==0xF3)//1
 152   2                      {
 153   3                              OnPS2SendChar(0xFA);
 154   3                              PS2RecChar=0xCC;
 155   3                      }
 156   2                      else if(PS2RecChar==0x00)//11
 157   2                      {
 158   3                              OnPS2SendChar(0xFA);
 159   3                              PS2RecChar=0xCC;
 160   3                      }
 161   2                      else if(PS2RecChar==0x02)//111
 162   2                      {
 163   3                              OnPS2SendChar(0xFA);
 164   3                              PS2RecChar=0xCC;
 165   3                      }
 166   2                      else if(PS2RecChar==0x20)//1111
 167   2                      {
 168   3                              OnPS2SendChar(0xFA);
 169   3                              PS2RecChar=0xCC;
 170   3                      }
 171   2                      else if(PS2RecChar==0xED)//2
 172   2                      {
 173   3                              OnPS2SendChar(0xFA);
 174   3                              PS2RecChar=0xCC;
 175   3                      }
 176   2                      else if(PS2RecChar==0xF0)//3
 177   2                      {
 178   3                              OnPS2SendChar(0xFA);
 179   3                              PS2RecChar=0xCC;
C51 COMPILER V7.06   PS2                                                                   03/11/2009 16:59:41 PAGE 4   

 180   3                      }
 181   2                      else if(PS2RecChar==0xF2)//4
 182   2                      {
 183   3                              OnPS2SendChar(0xFA);
 184   3                              Delay30us();
 185   3                              OnPS2SendChar(0xAB);
 186   3                              Delay30us();
 187   3                              OnPS2SendChar(0x83);
 188   3                              PS2RecChar=0xCC;
 189   3                      }
 190   2                      else if(PS2RecChar==0xEF)//5
 191   2                      {
 192   3                              OnPS2SendChar(0xFA);
 193   3                              Delay30us();
 194   3                              OnPS2SendChar(0xBF);
 195   3                              Delay30us();
 196   3                              OnPS2SendChar(0xB0);
 197   3                              PS2RecChar=0xCC;
 198   3                      }
 199   2                      else if(PS2RecChar==0xF3)//6
 200   2                      {
 201   3                              OnPS2SendChar(0xFA);
 202   3                              PS2RecChar=0xCC;
 203   3                      }
 204   2                      else if(PS2RecChar==0xFE)//7 //resend
 205   2                      {
 206   3                              PS2RecChar=0xCC;
 207   3                      }
 208   2                      else if(PS2RecChar==0xEE)//8
 209   2                      {
 210   3                              OnPS2SendChar(0xEE);
 211   3                              PS2RecChar=0xCC;
 212   3                      }
 213   2                      else if(PS2RecChar==0xEE)//9
 214   2                      {
 215   3                              OnPS2SendChar(0xEE);
 216   3                              PS2RecChar=0xCC;
 217   3                      }
 218   2                      else if(PS2RecChar==0xF1)//10
 219   2                      {
 220   3                              OnPS2SendChar(0xFA);
 221   3                              PS2RecChar=0xCC;
 222   3                      }
 223   2                      else if(PS2RecChar==0xF4)//11
 224   2                      {
 225   3                              OnPS2SendChar(0xFA);
 226   3                              PS2RecChar=0xCC;
 227   3                      }
 228   2                      else if(PS2RecChar==0xAA)//12
 229   2                      {
 230   3                              OnPS2SendChar(0xAA);
 231   3                              PS2RecChar=0xCC;
 232   3                      }
 233   2                      else if(PS2RecChar==0xFF)//13
 234   2                      {
 235   3                              OnPS2SendChar(0xFA);
 236   3                              Delay30us();
 237   3                              OnPS2SendChar(0xAA);
 238   3                              Delay30us();
 239   3                              PS2RecChar=0xCC;
 240   3                      }
 241   2                      else ; 
C51 COMPILER V7.06   PS2                                                                   03/11/2009 16:59:41 PAGE 5   

 242   2              }
 243   1      }
 244          //---------------------------------------------------------------------------
 245          void PS2Init(void)
 246          {
 247   1              IT0=0;  //低电平触发中断
 248   1              PX0=1;  
 249   1              EX0=1;  
 250   1      }
 251          //---------------------------------------------------------------------------
 252          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    576    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       6
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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