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

📄 ps2.lst

📁 QH_MCU_V1.1单片机C源码. 内含实验程序 这是修改版.
💻 LST
字号:
C51 COMPILER V7.06   PS2                                                                   12/06/2007 14:42:02 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           // PS2 相关口线
   2          #include <REG51.H>
   3           #define Key_Data  P3_0//定义Keyboard引脚
   4           #define Key_CLK  P3_2
   5          
   6          
   7           unsigned char Keyboard_out(void) ;      // 读 PS2 键盘
   8           unsigned char Decode(unsigned char ScanCode) ;   // 解码
   9           void Delay5Ms();
  10           void Delay400Ms();
  11          
  12           void main(void)
  13           {
  14   1       unsigned char TempCyc;
  15   1       unsigned char KEY=0;
  16   1                                                                    
  17   1       Delay5Ms();  //  延时片刻(可不要)
  18   1      
  19   1       for (TempCyc=0; TempCyc<10; TempCyc++);
  20   1       Delay400Ms();  //  
  21   1       DisplayListChar(0, 1, Cls); 
*** WARNING C206 IN LINE 21 OF PS2.C: 'DisplayListChar': missing function-prototype
*** ERROR C267 IN LINE 21 OF PS2.C: 'DisplayListChar': requires ANSI-style prototype
*** ERROR C202 IN LINE 21 OF PS2.C: 'Cls': undefined identifier
  22   1       IT0 = 0;   //  设外部中0?为低电平触发
  23   1       IT1 = 0;   //  设外部中断1为低电平触发
  24   1      
  25   1      
  26   1       do
  27   1       {
  28   2           KEY=Keyboard_out();  // 读键盘
  29   2          if(KEY)
  30   2              {
  31   3               CW_char(KEY);
  32   3               ROCK(0,KEY);
  33   3               KEY=0;
  34   3              }
  35   2       
  36   2       }
  37   1      while(1);
  38   1      }
  39          
  40          
  41          unsigned char Keyboard_out(void)
  42          {
  43   1      unsigned char KeyV=0;
  44   1      unsigned char IntNum = 0;
  45   1      Key_CLK=1;
  46   1      EA=0;
  47   1      if(!Key_CLK)
  48   1      {
  49   2      do  {
  50   3          if ((IntNum >0) && (IntNum < 9))
  51   3          { 
  52   4             KeyV = KeyV >> 1;     //因键盘数据是低>>高,结合上一句所以右移一位
C51 COMPILER V7.06   PS2                                                                   12/06/2007 14:42:02 PAGE 2   

  53   4          if (Key_Data) 
  54   4              KeyV = KeyV | 0x80;    //当键盘数据线为1时为1到最高位
  55   4          }
  56   3          Key_CLK=1;
  57   3          IntNum++;
  58   3          while (!Key_CLK);      //等待PS/2CLK拉高
  59   3           while (Key_CLK);      //等待PS/2CLK拉低  51fuzi添加
  60   3          } while (IntNum<11);      //51fuzi更正 原为 while Num<12);      
  61   2         return (Decode(KeyV));    // 键盘解码
  62   2      }
  63   1      return 0;
  64   1      }
  65          
  66          
  67          unsigned char  Decode(unsigned char ScanCode)
  68          //注意:如SHIFT+G为12H 34H F0H 34H F0H 12H?
  69          //也就是说shift的通码+G的通码+shift的断码+G的断码
  70          {
  71   1      unsigned char TempCyc; 
  72   1      unsigned char KeyChar=0;
  73   1      if (!Key_UP) //当键盘松开时
  74   1      {
  75   2      switch (ScanCode)
  76   2        {
  77   3        case 0xF0 : // 当收到0xF0,Key_UP置1表示断码开始
  78   3               Key_UP = 1;
  79   3            break;
  80   3      
  81   3        case 0x12 : // 左 SHIFT
  82   3            Shift = 1;
  83   3               break;
  84   3      
  85   3        case 0x59 : // 右 SHIFT
  86   3               Shift = 1;
  87   3                  break;
  88   3      
  89   3        default: 
  90   3            if (DisNum > 15) DisNum = 0; 
  91   3               if(!Shift) //如果SHIFT没按下
  92   3               {
  93   4             for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
  94   4                if (UnShifted[TempCyc][0] == ScanCode) 
  95   4                          KeyChar=UnShifted[TempCyc][1];
  96   4                DisNum++;
  97   4               } 
  98   3            else //按下SHIFT
  99   3                {
 100   4               for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
 101   4             if (Shifted[TempCyc][0] == ScanCode) 
 102   4                          KeyChar=Shifted[TempCyc][1];
 103   4              DisNum++;
 104   4             }
 105   3      
 106   3            break;
 107   3           }
 108   2      }
 109   1      else
 110   1      { 
 111   2      Key_UP = 0;
 112   2      switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处理
 113   2        {
 114   3        case 0x12 : // 左 SHIFT
C51 COMPILER V7.06   PS2                                                                   12/06/2007 14:42:02 PAGE 3   

 115   3            Shift = 0;
 116   3               break;
 117   3        case 0x59 : // 右 SHIFT
 118   3            Shift = 0;
 119   3               break;
 120   3        }
 121   2      }
 122   1      return KeyChar;
 123   1      } 
 124          
 125          void Delay5Ms();
 126           {
 127             unsigned char i,j;
 128             for(i=0;i++;i<5) 
 129               for (j=0;j++;j<i)
 130                      ;
 131           }
 132          
 133          void Delay400Ms(); {
 134              unsigned char i,j;
 135             for(i=0;i++;i<400) 
 136               for (j=0;j++;j<i)
 137                      ;
 138           }

C51 COMPILATION COMPLETE.  1 WARNING(S),  2 ERROR(S)

⌨️ 快捷键说明

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