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

📄 ps2key.lst

📁 用AT89S52单片机模拟PS2键盘时序向PC机发送指令
💻 LST
字号:
C51 COMPILER V8.05a   PS2KEY                                                               08/31/2008 21:10:01 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE PS2KEY
OBJECT MODULE PLACED IN ps2key.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE ps2key.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          
   3          sbit ps2dat=P2^0;
   4          sbit ps2clk=P2^2;
   5          sbit SPK=P3^7;
   6          sbit K1=P1^6;
   7          sbit K2=P1^7;
   8          
   9          bit parity;
  10          
  11          unsigned char sdata;
  12          
  13          void delayus(unsigned char n)
  14          {  n=n>>1;
  15   1         while(n--);
  16   1      }
  17          
  18          void delayms(unsigned char ms)  
  19          // 延时子程序
  20          {                                               
  21   1              unsigned char i;
  22   1              while(ms--)
  23   1              {
  24   2                      for(i = 0; i < 120; i++);
  25   2              }
  26   1      }
  27          
  28          void send_char(unsigned char send_data)
  29          {unsigned char i;
  30   1       parity=1;
  31   1       while(!ps2clk)
  32   1              {delayus(10);}//等待主机释放抑制
  33   1       if(!ps2dat)
  34   1              return;//主机要发送数据,传输中止
  35   1       delayus(20);
  36   1       //  发送起始位
  37   1       ps2dat=0;
  38   1       delayus(10);
  39   1       ps2clk=0;
  40   1       delayus(20);
  41   1       ps2clk=1;
  42   1       delayus(10);
  43   1       ps2dat=1;
  44   1      
  45   1       //发送数据
  46   1       for(i=0;i<8;i++)
  47   1         {ps2dat=send_data&0x01;
  48   2          parity=parity^(ps2dat^0);
  49   2          send_data=send_data>>1;
  50   2              delayus(10);
  51   2              ps2clk=0;
  52   2              SPK=0;
  53   2              delayus(20);
  54   2              ps2clk=1;
  55   2              SPK=1;
C51 COMPILER V8.05a   PS2KEY                                                               08/31/2008 21:10:01 PAGE 2   

  56   2              delayus(10);
  57   2      
  58   2         }
  59   1       //发送校验位
  60   1       ps2dat=parity;
  61   1       delayus(10);
  62   1       ps2clk=0;
  63   1       delayus(20);
  64   1       ps2clk=1;
  65   1       delayus(10);
  66   1       ps2dat=1;
  67   1       //发送停止位
  68   1       ps2dat=1;
  69   1       delayus(10);
  70   1       ps2clk=0;
  71   1       delayus(20);
  72   1       ps2clk=1;
  73   1       
  74   1      }
  75          
  76          main()
  77          {unsigned char kk1,kk2;
  78   1       kk1=1;
  79   1       kk2=1;
  80   1       while(1)
  81   1          {/*if(K1==0)
  82   2                 { delayms(50);
  83   2                   if(K1==0)
  84   2                          {send_char(0x11);
  85   2                               delayms(10);
  86   2                               send_char(0x0d);
  87   2                               delayms(10);
  88   2                               send_char(0xf0);
  89   2                               delayms(10);
  90   2                               send_char(0x0d);
  91   2                               delayms(10);
  92   2                               send_char(0xf0);
  93   2                               delayms(10);
  94   2                               send_char(0x11);
  95   2                               delayms(100);
  96   2                              }
  97   2      
  98   2                  }
  99   2               if(K2==0)       
 100   2                 { delayms(50);
 101   2                   if(K2==0)
 102   2                          {send_char(0x2e);
 103   2                               delayms(10);
 104   2                               send_char(0xf0);
 105   2                               delayms(10);
 106   2                               send_char(0x2e);
 107   2                               delayms(100);
 108   2                              }
 109   2      
 110   2                  } */
 111   2            if(K1==0&&kk1==1)  //K1按下
 112   2                    {kk1=0;
 113   3                         send_char(0x11);
 114   3                               delayms(10);
 115   3                        }
 116   2                if(K1==1&&kk1==0)      //K1弹起
 117   2                    {kk1=1;
C51 COMPILER V8.05a   PS2KEY                                                               08/31/2008 21:10:01 PAGE 3   

 118   3                         send_char(0xf0);
 119   3                               delayms(10);
 120   3                         send_char(0x11);
 121   3                               delayms(10);
 122   3                        }
 123   2                if(K2==0&&kk2==1)      //K2按下
 124   2                    {kk2=0;
 125   3                         send_char(0x0d);
 126   3                               delayms(10);
 127   3                        }
 128   2                if(K2==1&&kk2==0)      //K2按下
 129   2                    {kk2=1;
 130   3                         send_char(0xf0);
 131   3                               delayms(10);
 132   3                         send_char(0x0d);
 133   3                               delayms(10);
 134   3                        }
 135   2              }
 136   1      }
 137          
 138          /*
 139          
 140          #include <intrins.h>
 141          
 142          sbit ps2data = P2^0;
 143          sbit ps2clock = P2^2;
 144          sbit speak = P3^7;
 145          unsigned char bdata ps2char;
 146          unsigned char bdata status;
 147          sbit ps2lsb = ps2char^0;
 148          sbit pverify = status^0;
 149          
 150          unsigned char bdata keystatus;
 151          sbit key1_up=keystatus^0;
 152          
 153          
 154          sbit    AN1 = P1^6;
 155          sbit    AN2 = P1^7;
 156          sbit  LED1 = P0^2;
 157          sbit irt = P0^0;
 158          sbit gdt = P0^1;
 159          void delayus(unsigned char us)  
 160          {       us=us*2;
 161              while(--us) ;
 162          }
 163          
 164          void send_char()
 165          {
 166              unsigned char cnt = 9;
 167              while(!ps2clock)
 168                  delayus(10);
 169              if(!ps2data)
 170                  return;
 171              //起始位
 172              ps2data = 0;
 173              delayus(10);
 174              ps2clock = 0;
 175              delayus(20);
 176              ps2clock = 1;
 177              delayus(10);
 178          
 179              ACC = ps2char;
C51 COMPILER V8.05a   PS2KEY                                                               08/31/2008 21:10:01 PAGE 4   

 180              pverify = ~P;
 181              
 182              while(--cnt)
 183              {
 184                  ps2data = ps2lsb;
 185                  ps2char = _cror_(ps2char,1);
 186                  delayus(10);
 187                  ps2clock = 0;
 188                  speak = 0;
 189                  delayus(20);
 190                  ps2clock = 1;
 191                  speak = 1;
 192                  delayus(10);
 193              }
 194          
 195              ps2data = ps2lsb;
 196              delayus(10);
 197              ps2clock = 0;
 198              delayus(20);
 199              ps2clock = 1;
 200              delayus(10);
 201          
 202              ps2data = 1;
 203              delayus(10);
 204              ps2clock = 0;
 205              delayus(20);
 206              ps2clock = 1;
 207          }
 208          
 209          void delayms(unsigned char ms)  
 210          // 延时子程序
 211          {                                               
 212                  unsigned char i;
 213                  while(ms--)
 214                  {
 215                          for(i = 0; i < 120; i++);
 216                  }
 217          }
 218          
 219          void main(void)
 220          {
 221              P0=0xFF;
 222              keystatus = 0xFF;
 223              gdt = 0;
 224              while(1)
 225              {
 226                          LED1 = irt;
 227                  speak = irt;
 228                  if(AN1==0)              // 扫描按键
 229                          {
 230                                  delayms(100);                   // 延时去抖动
 231                                  if(AN1==0)                      // 再次扫描
 232                                  {
 233                          key1_up = AN1;
 234                          //if(!key1_up)
 235                          {
 236                              LED1 = 0;
 237                              ps2char = 0x1c;
 238                              send_char();
 239                                                  delayms(10);
 240                          }
 241                          //else
C51 COMPILER V8.05a   PS2KEY                                                               08/31/2008 21:10:01 PAGE 5   

 242                          {
 243                              LED1 = 1;
 244                              ps2char = 0xF0;
 245                              send_char();
 246                              delayms(10);
 247                              ps2char = 0x1c;
 248                              send_char();
 249                          }
 250                                  }
 251                          }
 252              }    
 253          }
 254                   */
 255            


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


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

⌨️ 快捷键说明

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