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

📄 shuru.lst

📁 s52单片机对PS2键盘的输入解码
💻 LST
字号:
C51 COMPILER V7.06   SHURU                                                                 09/29/2006 11:19:49 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SHURU
OBJECT MODULE PLACED IN shuru.OBJ
COMPILER INVOKED BY: D:\keil 7.06\C51\BIN\C51.EXE shuru.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*========================================
   2           用PS2的小键盘采集三位数据,只能用一般的键
   3           输入时,先输入的是高位
   4           当不足三位时要用0补齐
   5           当输入的是高于三位的数据时,再从高位计起
   6           =======================================*/
   7          
   8          #include<reg51.h>
   9          #define uchar unsigned char
  10          
  11          
  12          sbit Clk=P3^2;                   //时钟线接在P32
  13          sbit Dat=P3^0;                   //数据线接在P30
  14          
  15          uchar Degree      =0;                 //中断次数
  16          uchar Data        =0;                 //句路数据
  17          uchar Data_Over   =0;                 //确定标志位
  18          uchar   i         =0;
  19          uchar Key_Data[3] =0;              //得到的键盘输入值
  20          uchar Get_Key_Data = 0;        //最后得到的数据
  21          
  22          void  Dispose(void);  
  23          
  24          /*=====================
  25           中断函数,负责采集数据
  26          =======================*/
  27          void Get_data(void) interrupt 0 using 1
  28          {
  29   1       if((Degree>11)&&(Degree<20))
  30   1              {
  31   2                      Data=Data>>1;
  32   2                      if(Dat){Data|=0x80;};           
  33   2              }                                          //只用采集到的中间11位的八位数据
  34   1      
  35   1       Degree++;
  36   1       if(Degree>=33)                       //32次后重新计数
  37   1              {
  38   2                      Degree=0;
  39   2                      Dispose();                    //进行数据处理,只在中断中得到数据,不用等待
  40   2          }
  41   1      }
  42          
  43          /*===========================
  44           数据处理函数,处理得到的数据
  45          ============================*/
  46          void  Dispose(void)
  47          {
  48   1       uchar n=0;
  49   1       
  50   1       if  (Data==0x77)                                           //收到NUM(确定)
  51   1                      {
  52   2                              Get_Key_Data=Key_Data[0]*100
  53   2                                                       +Key_Data[1]*10
  54   2                                                           +Key_Data[2];
  55   2                              for(n=0;n<3;n++)  Key_Data[n] = 0 ;             //将数组置为0
C51 COMPILER V7.06   SHURU                                                                 09/29/2006 11:19:49 PAGE 2   

  56   2                              i  =  0;                                        //将下次收到的数据放在第一      
  57   2                              Data_Over   = 1;                                //确定标志
  58   2                      }
  59   1       
  60   1       
  61   1      else
  62   1                      {
  63   2                              if(i>=3)     i = 0;                                 //可以按键多于3次
  64   2                              switch(Data)
  65   2                              {
  66   3                                      case 0x70:      Key_Data[i]=0;          break;
  67   3                                      case 0x69:      Key_Data[i]=1;          break;
  68   3                                      case 0x72:      Key_Data[i]=2;          break;
  69   3                                      case 0x7A:      Key_Data[i]=3;          break;
  70   3                                      case 0x6b:      Key_Data[i]=4;          break;
  71   3                                      case 0x73:      Key_Data[i]=5;          break;
  72   3                                      case 0x74:      Key_Data[i]=6;          break;
  73   3                                      case 0x6C:      Key_Data[i]=7;          break;
  74   3                                      case 0x75:      Key_Data[i]=8;          break;
  75   3                                      case 0x7D:      Key_Data[i]=9;          break;
  76   3                              }
  77   2                              i++;
  78   2                      }
  79   1      }
  80          
  81          
  82          void main()
  83          {
  84   1       IT0=1;
  85   1       EA=1;
  86   1       EX0=1;
  87   1       while(1)                                             //下面的写法可以直接在Dispose函数中P2=Get_Key_Data;
  88   1                      {
  89   2                              if(Data_Over)                             //这样写只是为了用在其他程序上的接口
  90   2                              {
  91   3                                              P2=Get_Key_Data;
  92   3                                      Data_Over=0;
  93   3                                       }
  94   2                      }
  95   1      
  96   1      
  97   1      }
  98          


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


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

⌨️ 快捷键说明

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