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

📄 main.lst

📁 这里很详细地将了怎样编写一个4*4的行列扫描式键盘(它已经通过keil编译并使用)。该程序利用P1口作为行列扫描端口,它能够识别是否有多键按下
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  07/21/2007 15:08:32 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE code\main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\main.lst) OBJECT(main.obj)

line level    source

   1          /*********************************************************************************************************
             -****
   2          **作者:云明                       
   3          **功能:行列扫描式键盘,键盘值通过串口传输给其他CPU。
   4          **说明:这是一个4*4的行列扫描式键盘,利用P1口作为行列扫描端口。
   5          **********************************************************************************************************
             -****/
   6          
   7          
   8          
   9          #include"config.h"
  10          
  11          
  12          bit is_sen;           /*是否要发送数据的标志*/
  13          int8u data sen_data;  /*所要发送的数据*/
  14          int8u bdata key,temp;
  15          sbit key0=key^0;
  16          sbit key1=key^1;
  17          sbit key2=key^2;
  18          sbit key3=key^3;
  19          sbit temp0=temp^0;
  20          sbit temp1=temp^1;
  21          sbit temp2=temp^2;
  22          sbit temp3=temp^3;
  23          
  24          
  25          void delay50()
  26          {
  27   1           int16u i=6000;
  28   1           while(i!=0)
  29   1           {
  30   2               i--;
  31   2           }
  32   1      }
  33          
  34          
  35          /*******************************************************
  36          **名称:void sen_byte()
  37          **功能:通过串口发送数据
  38          **说明:通过设置发送标志和触发发送完毕中断来通知CPU要通
  39                          过串口来发送数据。这样做的好处是可以提高CPU的工
  40                          作效率。因为要发送数据是通过串口中断来把数据写
  41                          到SBUF里,写完一个字节后就跳出。如果是发送一串
  42                          数据的话,效率更加明显。
  43          *******************************************************/
  44          void sen_byte()
  45          {
  46   1           is_sen=1;
  47   1           TI=1;
  48   1      }
  49          
  50          
  51          void sen() interrupt 4
  52          {
  53   1           if(TI)
C51 COMPILER V7.50   MAIN                                                                  07/21/2007 15:08:32 PAGE 2   

  54   1           {
  55   2               TI=0;
  56   2               if(is_sen==1)
  57   2               {
  58   3                              //  ACC=sen_data;
  59   3                      //        CY=P;
  60   3                      //       SBUF7=CY;
  61   3                                //sen_data=ACC;         
  62   3                    SBUF=sen_data;
  63   3                              //  SBUF=ACC;
  64   3                    is_sen=0;
  65   3               }
  66   2           }
  67   1      }
  68          
  69          void main()
  70          {
  71   1           is_sen=0;
  72   1           TMOD=0x20;
  73   1           SCON=0x50;
  74   1               PCON=0;
  75   1           TH1=0xfd;
  76   1           TL1=0xfd;
  77   1           TR1=1;
  78   1           ES=1;
  79   1           EA=1;
  80   1           
  81   1           /************************************************
  82   1               **以下是键盘扫描的程序。当发现有键按下时就读取键
  83   1               **的位置值,然后编码并通过串口把键号送出去
  84   1               ************************************************/
  85   1            for(; ;)
  86   1           {
  87   2               P14=0;
  88   2               P15=1;
  89   2               P16=1;
  90   2               P17=1;
  91   2               key0=P10;
  92   2               key1=P11;
  93   2               key2=P12;
  94   2               key3=P13;
  95   2               key&=0x0f;
  96   2               if(key!=0xf)
  97   2               {
  98   3                   delay50();
  99   3                   temp0=P10;
 100   3                   temp1=P11;
 101   3                   temp2=P12;
 102   3                   temp3=P13;
 103   3                   temp&=0x0f;
 104   3                   if(key==temp)
 105   3                   {
 106   4                        switch(key)
 107   4                        {
 108   5                            case 14:sen_data=1;break;
 109   5                            case 13:sen_data=5;break;
 110   5                            case 11:sen_data=9;break;
 111   5                            case 7:sen_data=13;break;
 112   5                            default:break;
 113   5                        }
 114   4                        sen_byte();
 115   4                        while(P10!=1||P11!=1||P12!=1||P13!=1);
C51 COMPILER V7.50   MAIN                                                                  07/21/2007 15:08:32 PAGE 3   

 116   4                   }
 117   3               }
 118   2      
 119   2               P14=1;
 120   2               P15=0;
 121   2               P16=1;
 122   2               P17=1;
 123   2               key0=P10;
 124   2               key1=P11;
 125   2               key2=P12;
 126   2               key3=P13;
 127   2               key&=0x0f;
 128   2      
 129   2               if(key!=0xf)
 130   2               {
 131   3                   delay50();
 132   3                   temp0=P10;
 133   3                   temp1=P11;
 134   3                   temp2=P12;
 135   3                   temp3=P13;
 136   3                   temp&=0x0f;
 137   3                   if(key==temp)
 138   3                   {
 139   4                        switch(key)
 140   4                        {
 141   5                            case 14:sen_data=2;break;
 142   5                            case 13:sen_data=6;break;
 143   5                            case 11:sen_data=10;break;
 144   5                            case 7:sen_data=14;break;
 145   5                            default:break;
 146   5                        }
 147   4                        sen_byte();
 148   4                        while(P10!=1||P11!=1||P12!=1||P13!=1);
 149   4                   }
 150   3               }
 151   2      
 152   2               P14=1;
 153   2               P15=1;
 154   2               P16=0;
 155   2               P17=1;
 156   2               key0=P10;
 157   2               key1=P11;
 158   2               key2=P12;
 159   2               key3=P13;
 160   2               key&=0x0f;
 161   2               if(key!=0xf)delay50();
 162   2               temp0=P10;
 163   2               temp1=P11;
 164   2               temp2=P12;
 165   2               temp3=P13;
 166   2               temp&=0x0f;
 167   2      
 168   2      
 169   2               if(key!=0xf)
 170   2               {
 171   3                   delay50();
 172   3                   temp0=P10;
 173   3                   temp1=P11;
 174   3                   temp2=P12;
 175   3                   temp3=P13;
 176   3                   temp&=0x0f;
 177   3                   if(key==temp)
C51 COMPILER V7.50   MAIN                                                                  07/21/2007 15:08:32 PAGE 4   

 178   3                   {
 179   4                        switch(key)
 180   4                        {
 181   5                            case 14:sen_data=3;break;
 182   5                            case 13:sen_data=7;break;
 183   5                            case 11:sen_data=11;break;
 184   5                            case 7:sen_data=15;break;
 185   5                            default:break;
 186   5                        }
 187   4                        sen_byte();
 188   4                        while(P10!=1||P11!=1||P12!=1||P13!=1);
 189   4                   }
 190   3               }
 191   2      
 192   2               P14=1;
 193   2               P15=1;
 194   2               P16=1;
 195   2               P17=0;
 196   2               key0=P10;
 197   2               key1=P11;
 198   2               key2=P12;
 199   2               key3=P13;
 200   2               key&=0x0f;
 201   2      
 202   2               if(key!=0xf)
 203   2               {
 204   3                   delay50();
 205   3                   temp0=P10;
 206   3                   temp1=P11;
 207   3                   temp2=P12;
 208   3                   temp3=P13;
 209   3                   temp&=0x0f;
 210   3                   if(key==temp)
 211   3                   {
 212   4                        switch(key)
 213   4                        {
 214   5                            case 14:sen_data=4;break;
 215   5                            case 13:sen_data=8;break;
 216   5                            case 11:sen_data=12;break;
 217   5                            case 7:sen_data=16;break;
 218   5                            default:break;
 219   5                        }
 220   4                        sen_byte();
 221   4                        while(P10!=1||P11!=1||P12!=1||P13!=1);
 222   4                   }
 223   3               }
 224   2          }  
 225   1      }
 226          
 227          
 228          
 229          
 230          
 231          
 232          
 233          
 234          
 235          
 236          
 237          
 238          
 239          
C51 COMPILER V7.50   MAIN                                                                  07/21/2007 15:08:32 PAGE 5   

 240          
 241          
 242          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    539    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   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 + -