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

📄 ps2.lst

📁 ps2 pc 键盘 o
💻 LST
字号:
C51 COMPILER V7.50   PS2                                                                   05/22/2008 08:53:59 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE PS2
OBJECT MODULE PLACED IN PS2.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil2\C51\BIN\C51.EXE PS2.C BROWSE DEBUG OBJECTEXTEND

line 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              CT_KB=OFF;
  33   1              EX0=0;
  34   1      
  35   1              H_DATA=0;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;Delay10us();//parity bit
  53   1              H_CLK=1;
  54   1              Delay10us();
  55   1              H_CLK=0;
C51 COMPILER V7.50   PS2                                                                   05/22/2008 08:53:59 PAGE 2   

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

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

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

 242   1      }
 243          //---------------------------------------------------------------------------
 244          void PS2Init(void)
 245          {
 246   1              IT0=0;  //低电平触发中断
 247   1              PX0=1;  
 248   1              EX0=1;  
 249   1      }
 250          //---------------------------------------------------------------------------
 251          /*
 252          //用法-以下文件在main.c--------------------------------------------------------------------------
 253          //把PS2.C Delay.asm加入工程
 254          extern void ProcessPS2(void);
 255          extern void PS2Init(void)
 256          void main(void)
 257          {
 258                  //晶振为18.432 其他的频率需要修改延时程序
 259                  //往PC上发按键使用OnPS2SendChar();
 260                  //OnPS2SendChar(0x15);//Q//发送通码
 261          
 262                  //OnPS2SendChar(0xF0);
 263                  //OnPS2SendChar(0x15);//Q//发送断码
 264                  PS2Init();
 265                  while(1)
 266                  {
 267                          ProcessPS2();//开机应答,使电脑能识别到键盘
 268                          //other code
 269                  }
 270          }
 271          
 272           */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    580    ----
   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 + -