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

📄 testkey.lst

📁 4*4键盘扫描 参数以定义 直接使用
💻 LST
字号:
C51 COMPILER V6.12  TESTKEY                                                                07/25/2005 18:56:22 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE TESTKEY
OBJECT MODULE PLACED IN E:\C51\P1\TESTKEY.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\C51\P1\TESTKEY.C DB SB OE

stmt level    source

   1          #include<reg51.h>
   2          #include<math.h>
   3          static const char tab[16]={0x01,0x02,0x03,0x0c,	/*键盘码00,01,02,03,*/
   4                               0x04,0x05,0x06,0x0d,	/*键盘码04,05,06,07,*/
   5                               0x07,0x08,0x09,0x0e,	/*键盘码08,09,0a,0b,*/
   6                               0x0a,0x00,0x0b,0x0f};/*键盘码0c,0d,0e,0f*/
   7          
   8           unsigned char scan(void);
   9           void delay1ms();
  10          
  11          void main()
  12           {
  13   1           unsigned 	char data a1  ,a2 ,m,k,falg_dian;  //k as a flag of num end
  14   1           unsigned int i;
  15   1          
  16   1       /*  a1=4;
  17   1         a2=a1;
  18   1         a1=2;
  19   1       //a1=0xf7;
  20   1      
  21   1         a1=0x40;
  22   1          m=0x00;
  23   1      
  24   1      
  25   1          P0=0x22;
  26   1          P0=0x33;
  27   1          P0=0x44;
  28   1           P0=0x55;
  29   1      
  30   1        */
  31   1           i=0;
  32   1           k=1;
  33   1           falg_dian=0;
  34   1          while(k!=0)
  35   1          {
  36   2           // a1=scan();
  37   2            if(tab[a1]==0x0b)
  38   2                k=0;
  39   2              else if(tab[a1]>=0&& tab[a1]<=9)
  40   2               {
  41   3                 if(falg_dian==0)
  42   3                   i=i*10+tab[a1]*100;
  43   3                 else
  44   3                   i=i*10+tab[a1];
  45   3                   i=100;
  46   3                P0= ( unsigned char )(i%10);
  47   3                P0= ( unsigned char )(0x10+((i/10)%10));
  48   3                P0= ( unsigned char )(0x20+((i/100)%10));
  49   3                P0= ( unsigned char )(0x30+((i/1000)%10));
  50   3               }
  51   2                else if(tab[a1]==10 )
  52   2                 falg_dian=1;
  53   2             }
  54   1      
  55   1          while(1);
C51 COMPILER V6.12  TESTKEY                                                                07/25/2005 18:56:22 PAGE 2   

  56   1      
  57   1      
  58   1      }
*** WARNING C280 IN LINE 13 OF E:\C51\P1\TESTKEY.C: 'a2': unreferenced local variable
*** WARNING C280 IN LINE 13 OF E:\C51\P1\TESTKEY.C: 'm': unreferenced local variable
  59          
  60           unsigned char scan(void)				/*扫描键盘副程式*/
  61           {
  62   1            unsigned	char data a1,i;			/*A1=0XF7列扫描初值,I行*/
  63   1            unsigned	char data m;
  64   1            unsigned	char  FLAG0;			/*设按键回应旗号为0,键盘扫描计数指标为0*/
  65   1            unsigned    char data ptr;
  66   1             a1=0xf0 ;
  67   1             FLAG0=0;
  68   1             ptr=0;
  69   1              m=0xf0 ;
  70   1             while(m==0xf0)
  71   1             {
  72   2                P1=0xff;
  73   2                a1=0xf0;
  74   2               P1=a1;			/*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
  75   2                m=P1;
  76   2             }
  77   1             for(i=0;i<4;i++)
  78   1                delay1ms();
  79   1              a1=0xf0;
  80   1              m=0xf0 ;
  81   1             while(m==0xf0)
  82   1             {
  83   2                 P1=0xff;
  84   2                a1=0xf0;
  85   2                P1=a1;			/*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
  86   2                 m=P1;
  87   2             }
  88   1                a1=0xf7;
  89   1              for(i=0;i<4;i++)		/*键盘4个扫描列*/
  90   1            {
  91   2                    P1=a1;			/*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
  92   2                     m=P1;
  93   2                      switch(m&0xf0)		/*取行的高4位元,侦测那一行被按*/
  94   2                  {
  95   3                  	case 0x70: ptr=i*4;	/*第一行被按否?是则扫描指标=列X4*/
  96   3                                FLAG0=1;	/*是则设FLAG0=1表有按键输入*/
  97   3                                 break;	/*跳出此循环*/
  98   3                      case 0xb0: ptr=i*4+1;	/*第二行被按否?是则扫描指标=列X4+1*/
  99   3                                 FLAG0=1;	/*是则设FLAG0=1表有按键输入*/
 100   3                                 break;	/*跳出此循环*/
 101   3                      case 0xd0: ptr=i*4+2;	/*第三行被按否?是则扫描指标=列X4+2*/
 102   3                                 FLAG0=1;	/*是则设FLAG0=1表有按键输入*/
 103   3                                 break;	/*跳出此循环*/
 104   3                      case 0xe0: ptr=i*4+3;	/*第四行被按否?是则扫描指标=列X4+3*/
 105   3                                 FLAG0=1;	/*是则设FLAG0=1表有按键输入*/
 106   3                       default:  break;	/*跳出此循环*/
 107   3                  }
 108   2               if(FLAG0==1)break;		/*不为1,则扫描列右移,扫描下一列*/
 109   2               a1=a1>>1|0x80;
 110   2               		/*高位补1,由于P1.7~P1.4未接+5V,而是由指令加载高电平*/
 111   2             }
 112   1             a1=0xf0;
 113   1          while(m!=0xf0)
 114   1             {
 115   2               P1 =0xff;
C51 COMPILER V6.12  TESTKEY                                                                07/25/2005 18:56:22 PAGE 3   

 116   2               a1=0xf0;
 117   2               P1=a1;			/*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
 118   2                m=P1;
 119   2             }
 120   1      
 121   1             if(FLAG0==1)
 122   1               return ptr;
 123   1             else return 0x40;
 124   1       }					/*返回主程式*/
 125          void delay1ms()
 126          {
 127   1       IE=00;
 128   1       TMOD=0x10;
 129   1       TH1=0xfc;
 130   1       TL1=0x23;
 131   1       TR1=1;
 132   1      
 133   1       while(!TF1);
 134   1       TF1=0;
 135   1      }
C51 COMPILER V6.12  TESTKEY                                                                07/25/2005 18:56:22 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


P0 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0080H  1
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
T0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B4H  1
AC . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D6H  1
T1 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B5H  1
EA . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AFH  1
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
RD . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B7H  1
ES . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ACH  1
RI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0098H  1
INT0 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B2H  1
CY . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D7H  1
TI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0099H  1
INT1 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B3H  1
PS . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BCH  1
delay1ms . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
OV . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D2H  1
main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  a1 . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  a2 . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
  m. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0002H  1
  k. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0003H  1
  falg_dian. . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0004H  1
  i. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_INT    0005H  2
scan . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  a1 . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  i. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
  m. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0002H  1
  FLAG0. . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0003H  1
  ptr. . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0004H  1
WR . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B6H  1
TMOD . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0089H  1
tab. . . . . . . . . . . . . . . . . .  STATIC   DATA   ARRAY    0000H  16
IE0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0089H  1
IE1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008BH  1
ET0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A9H  1
ET1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ABH  1
TF0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008DH  1
TF1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008FH  1
RB8. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009AH  1
EX0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A8H  1
IT0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0088H  1
TH1. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   008DH  1
TB8. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009BH  1
EX1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AAH  1
IT1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008AH  1
P. . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D0H  1
SM0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009FH  1
SM1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009EH  1
TL1. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   008BH  1
SM2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009DH  1
PT0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B9H  1
PT1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BBH  1
RS0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D3H  1
TR0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008CH  1
RS1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D4H  1
TR1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008EH  1
C51 COMPILER V6.12  TESTKEY                                                                07/25/2005 18:56:22 PAGE 5   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


PX0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B8H  1
PX1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BAH  1
REN. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009CH  1
RXD. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B0H  1
TXD. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B1H  1
F0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D5H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    462    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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