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

📄 zifu.lst

📁 s52单片机对PS2键盘的输入解码
💻 LST
字号:
C51 COMPILER V7.06   ZIFU                                                                  10/10/2006 12:00:07 PAGE 1   


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

stmt level    source

   1          #include <reg51.h>
   2          
   3          
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          
   7          #define Ese   0x76                              //清屏指令
   8          #define Bksp  0x66                              //删除一个指令
   9          #define Cplk  0x58                              //双键值区分
  10          
  11          
  12          
  13          sbit Clk=P3^2;                                  //时钟线接在P32
  14          sbit Dat=P3^0;                                  //数据线接在P30
  15          
  16          uchar BUF                 =0;                                   //中断完成标志
  17          uchar Degree      =0;                   //中断次数
  18          uchar Data        =0;                   //句路数据
  19          uchar   i         =0;                                   //采集到的数据在数组中的位置
  20          uchar Update      =0;                                   //数据更新标志
  21          uchar Caps_Lock   =0;                                   //双键值区分标志位
  22          char Key_Data[32] ;                             //得到的键盘输入值数组
  23          
  24          void  Dispose(void); 
  25          
  26          void  Get_Date(void);
  27          /*=====================
  28           中断函数,负责采集数据
  29          =======================*/
  30          void Get_data(void) interrupt 0 using 1
  31          {
  32   1       if((Degree>11)&&(Degree<20))
  33   1              {
  34   2                      Data=Data>>1;
  35   2                      if(Dat){Data|=0x80;};           
  36   2              }                                               //只用采集到的中间11位的八位数据
  37   1      
  38   1       Degree++;
  39   1       if(Degree>=33)                                         //32次后重新计数
  40   1              {
  41   2                      Degree=0;
  42   2                      BUF = 1;                                        //进行数据处理,只在中断中得到数据,不用等待
  43   2          }
  44   1      }
  45          
  46          /*=====================================
  47           数据/指令处理函数,处理得到的数据/指令
  48          ======================================*/
  49          
  50          void  Dispose(void)
  51          {
  52   1       uchar temp ;
  53   1       switch(Data)                                            //判断指令的输入
  54   1        {
  55   2              case    0x76     :
C51 COMPILER V7.06   ZIFU                                                                  10/10/2006 12:00:07 PAGE 2   

  56   2                      //Write_ZL(0x01) ;
  57   2                      for(temp=0;temp<32;temp++) Key_Data[temp] = 0 ; 
  58   2                      i=0;
  59   2                      P2=Ese ;
  60   2                      break  ;                                                                                        //清屏,数组清0
  61   2              
  62   2              case    0x66:
  63   2                      i-- ; Update=0;
  64   2                      Key_Data[i]     = 0 ;                                           //删除刚输入的数据
  65   2                      Update = 1;                                    //数据更新标志
  66   2                      break ;
  67   2              
  68   2              case    0x58 :
  69   2                      Caps_Lock^= 1 ;                                                         //双键值区分标志位改变
  70   2                      break ;   
  71   2              
  72   2              default  :Get_Date();
  73   2                                                                                                              //处理得到的字符码值
  74   2        }     
  75   1      
  76   1      }
  77          
  78          /*=================
  79           处理得到的字符数据
  80          ==================*/
  81          
  82           void Get_Date(void)
  83          {
  84   1      
  85   1       if(i>=32) i=0 ;
  86   1       
  87   1       switch(Data)                                                                                   //处理得到的字符码值,转化对应的1602码值
  88   1              {
  89   2              
  90   2                      case 0x1C: Key_Data[i]='A';break;
  91   2                      case 0x32: Key_Data[i]='B';break;
  92   2                      case 0x21: Key_Data[i]='C';break;
  93   2                      case 0x23: Key_Data[i]='D';break;
  94   2                      case 0x24: Key_Data[i]='E';break;
  95   2                      case 0x2B: Key_Data[i]='F';break;
  96   2                      case 0x34: Key_Data[i]='G';break;
  97   2                      case 0x33: Key_Data[i]='H';break;
  98   2                      case 0x43: Key_Data[i]='I';break;
  99   2                      case 0x3B: Key_Data[i]='J';break;
 100   2                      case 0x42: Key_Data[i]='K';break;       
 101   2                      case 0x4B: Key_Data[i]='L';break;
 102   2                      case 0x3A: Key_Data[i]='M';break;
 103   2                      case 0x31: Key_Data[i]='N';break;
 104   2                      case 0x44: Key_Data[i]='O';break;
 105   2                      case 0x4D: Key_Data[i]='P';break;
 106   2                      case 0x15: Key_Data[i]='Q';break;
 107   2                      case 0x2D: Key_Data[i]='R';break;
 108   2                      case 0x1B: Key_Data[i]='S';break;
 109   2                      case 0x2C: Key_Data[i]='T';break;
 110   2                      case 0x3C: Key_Data[i]='U';break;
 111   2                      case 0x2A: Key_Data[i]='V';break;
 112   2                      case 0x1D: Key_Data[i]='W';break;
 113   2                      case 0x22: Key_Data[i]='X';break;
 114   2                      case 0x35: Key_Data[i]='Y';break;
 115   2                      case 0x1A: Key_Data[i]='Z';break;
 116   2                      case 0x45: Key_Data[i]='0';break;
 117   2                      case 0x16: Key_Data[i]='1';break;
C51 COMPILER V7.06   ZIFU                                                                  10/10/2006 12:00:07 PAGE 3   

 118   2                      case 0x1E: Key_Data[i]='2';break;
 119   2                      case 0x26: Key_Data[i]='3';break;
 120   2                      case 0x25: Key_Data[i]='4';break;
 121   2                      case 0x2E: Key_Data[i]='5';break;
 122   2                      case 0x36: Key_Data[i]='6';break;
 123   2                      case 0x3D: Key_Data[i]='7';break;
 124   2                      case 0x3E: Key_Data[i]='8';break;
 125   2                      case 0x46: Key_Data[i]='9';break;
 126   2                      case 0x29: Key_Data[i]=' ';break;
 127   2                      case 0x41: Key_Data[i]=',';break;
 128   2                      case 0x49: Key_Data[i]='.';break;
 129   2                      
 130   2              }
 131   1       Update=0;
 132   1       if(!Caps_Lock)
 133   1              Key_Data[i] |= 0x20 ;                                                   //Caps_Lock未按下则小写
 134   1              
 135   1                       i++ ;                                          //计数加一
 136   1              Update=1;       
 137   1                                                                                                                      //数据更新标志
 138   1      }
 139          
 140          
 141          //长延时
 142          void Delay400Ms(void)
 143          {
 144   1              uchar d=5;
 145   1              uint j;
 146   1              while(d--)
 147   1              {
 148   2                      j=8269;
 149   2                      while(j--);
 150   2              }
 151   1      }
 152          
 153                  
 154          void main()
 155          {
 156   1       uchar m=0;
 157   1       IT0=1;
 158   1       EA=1;
 159   1       EX0=1;
 160   1       while(1)
 161   1       {
 162   2              
 163   2              if(BUF){Dispose();BUF=0;}
 164   2              if(Update)
 165   2                 {    
 166   3                              for(m=0;m<10;m++){P2=Key_Data[m];Delay400Ms();}
 167   3                              Update=0;
 168   3                 }
 169   2       }
 170   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    710    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     38       1
   IDATA SIZE       =   ----    ----
C51 COMPILER V7.06   ZIFU                                                                  10/10/2006 12:00:07 PAGE 4   

   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 + -