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

📄 矩阵键盘扫描程序.lst

📁 这是本人花了200元买的51开发板上的所有程序资料
💻 LST
字号:
C51 COMPILER V8.02   __阵键盘扫描程序                                                      05/14/2008 18:45:38 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE __阵键盘扫描程序
OBJECT MODULE PLACED IN 矩阵键盘扫描程序.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE 矩阵键盘扫描程序.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //MCU:AT89S51
   2          //晶振:12M
   3          #include"AT89X51.H"
   4          unsigned char code numcode[]={0xc0,0xf9,0xa4,0xb0,0x99,
   5                                        0x92,0x82,0xf8,0x80,0x90,
   6                                        0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF
   7                                                                    };//数字0~9及ABCDEF共阳数码管代码 
   8          unsigned char code charcode[]={0xc0,0xc7,0xc7,0x86,0x89};
   9                                         // HELLO  字样共阳数码管代码 
  10                                 
  11          unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,
  12                                        0xef,0xdf,0xbf,0x7f}; //数码管位选代码
  13          unsigned char dispbuf[8]={16,16,16,0,1,2,3,4};
  14          unsigned char disp_bit_count;
  15          
  16          unsigned char disp_count;
  17          unsigned char temp;
  18          unsigned char key;
  19          
  20          unsigned char i,j;
  21          
  22          
  23          /********1ms延时子程序***********/
  24          delay_nms(unsigned int n)
  25          {
  26   1       unsigned int i;
  27   1       unsigned char j;
  28   1      
  29   1       for(i=0;i<n;i++)
  30   1          for(j=0;j<120;j++)
  31   1                ;     //空操作
  32   1      }
  33          
  34          unsigned char keyscan(void)
  35          {    
  36   1            P2=0xff;
  37   1            P2_4=0;
  38   1            temp=P2;
  39   1            temp=temp&0x0f;
  40   1            if (temp!=0x0f)
  41   1              {
  42   2                delay_nms(10);
  43   2                temp=P2;
  44   2                temp=temp&0x0f;
  45   2                if (temp!=0x0f)
  46   2                  {
  47   3                    temp=P2;
  48   3                    temp=temp&0x0f;              
  49   3                    switch(temp)
  50   3                      {
  51   4                        case 0x0e:
  52   4                          key=7;
  53   4                          break;
  54   4                        case 0x0d:
  55   4                          key=8;
C51 COMPILER V8.02   __阵键盘扫描程序                                                      05/14/2008 18:45:38 PAGE 2   

  56   4                          break;
  57   4                        case 0x0b:
  58   4                          key=9;
  59   4                          break;
  60   4                        case 0x07:
  61   4                          key=10;
  62   4                          break;
  63   4                      }
  64   3                    temp=P2;
  65   3                    temp=temp & 0x0f;              
  66   3                    while(temp!=0x0f)
  67   3                      {
  68   4                        temp=P2;
  69   4                        temp=temp&0x0f;              
  70   4                      }
  71   3                  }
  72   2              }
  73   1       
  74   1            P2=0xff;
  75   1            P2_5=0;
  76   1            temp=P2;
  77   1            temp=temp&0x0f;
  78   1            if (temp!=0x0f)
  79   1              {
  80   2                delay_nms(10);
  81   2                temp=P2;
  82   2                temp=temp&0x0f;
  83   2                if (temp!=0x0f)
  84   2                  {
  85   3                    temp=P2;
  86   3                    temp=temp&0x0f;              
  87   3                    switch(temp)
  88   3                      {
  89   4                        case 0x0e:
  90   4                          key=4;
  91   4                          break;
  92   4                        case 0x0d:
  93   4                          key=5;
  94   4                          break;
  95   4                        case 0x0b:
  96   4                          key=6;
  97   4                          break;
  98   4                        case 0x07:
  99   4                          key=11;
 100   4                          break;
 101   4                      }
 102   3                    temp=P2;
 103   3                    temp=temp & 0x0f;              
 104   3                    while(temp!=0x0f)
 105   3                      {
 106   4                        temp=P2;
 107   4                        temp=temp&0x0f;              
 108   4                      }
 109   3                  }
 110   2              }
 111   1       
 112   1            P2=0xff;
 113   1            P2_6=0;
 114   1            temp=P2;
 115   1            temp=temp&0x0f;
 116   1            if (temp!=0x0f)
 117   1              {
C51 COMPILER V8.02   __阵键盘扫描程序                                                      05/14/2008 18:45:38 PAGE 3   

 118   2                delay_nms(10);
 119   2                temp=P2;
 120   2                temp=temp&0x0f;
 121   2                if(temp!=0x0f)
 122   2                  {
 123   3                    temp=P2;
 124   3                    temp=temp&0x0f;              
 125   3                    switch(temp)
 126   3                      {
 127   4                        case 0x0e:
 128   4                          key=1;
 129   4                          break;
 130   4                        case 0x0d:
 131   4                          key=2;
 132   4                          break;
 133   4                        case 0x0b:
 134   4                          key=3;
 135   4                          break;
 136   4                        case 0x07:
 137   4                          key=12;
 138   4                          break;
 139   4                      }
 140   3                    temp=P2;
 141   3                    temp=temp&0x0f;              
 142   3                    while(temp!=0x0f)
 143   3                      {
 144   4                        temp=P2;
 145   4                        temp=temp&0x0f;              
 146   4                      }
 147   3                  }
 148   2              }
 149   1       
 150   1            P2=0xff;
 151   1            P2_7=0;
 152   1            temp=P2;
 153   1            temp=temp & 0x0f;
 154   1            if (temp!=0x0f)
 155   1              {
 156   2                delay_nms(10);
 157   2                temp=P2;
 158   2                temp=temp&0x0f;
 159   2                if (temp!=0x0f)
 160   2                  {
 161   3                    temp=P2;
 162   3                    temp=temp & 0x0f;              
 163   3                    switch(temp)
 164   3                      {
 165   4                        case 0x0e:
 166   4                          key=0;
 167   4                          break;
 168   4                        case 0x0d:
 169   4                          key=13;
 170   4                          break;
 171   4                        case 0x0b:
 172   4                          key=14;
 173   4                          break;
 174   4                        case 0x07:
 175   4                          key=15;
 176   4                          break;
 177   4                      }
 178   3                    temp=P2;
 179   3                    temp=temp & 0x0f;              
C51 COMPILER V8.02   __阵键盘扫描程序                                                      05/14/2008 18:45:38 PAGE 4   

 180   3                    while(temp!=0x0f)
 181   3                      {
 182   4                        temp=P2;
 183   4                        temp=temp & 0x0f;              
 184   4                      }
 185   3                  }  
 186   2              }
 187   1          return (key);
 188   1      }
 189           
 190           
 191          void main(void)
 192          {
 193   1         TMOD=0x02;  //使用定时器0,选择方式2(常数自动重装的8位定时器)
 194   1        TH0=0x06;   //保存数值,用于自动重装
 195   1        TL0=0x06;  //定时250uS初值
 196   1        TR0=1;    //开定时器0
 197   1        ET0=1;   //开定时器0溢出中断
 198   1        EA=1;    //开总中断
 199   1       while(1)
 200   1        {
 201   2         dispbuf[0]=keyscan();
 202   2       
 203   2        }
 204   1      }
 205          
 206          /**********T0250uS中断服务程序***************/
 207          void t0(void) interrupt 1 using 0
 208          {
 209   1        disp_count++;
 210   1        if(disp_count==8)
 211   1          {
 212   2            disp_count=0;
 213   2                if(disp_bit_count>=3)
 214   2                 P0=charcode[dispbuf[disp_bit_count]];
 215   2                else
 216   2             P0=numcode[dispbuf[disp_bit_count]];
 217   2            P1=bitcode[disp_bit_count];
 218   2                disp_count=0;
 219   2            disp_bit_count++;
 220   2            if(disp_bit_count==8)
 221   2              {
 222   3                disp_bit_count=0;
 223   3              }
 224   2      
 225   2           }
 226   1      
 227   1       
 228   1      }


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