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

📄 矩阵式键盘.lst

📁 矩阵键盘程序及仿真
💻 LST
字号:
C51 COMPILER V8.05a   __阵式键盘                                                           08/03/2011 20:04:50 PAGE 1   


C51 COMPILER V8.05a, 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          #include<reg52.h>
   2          #define uint unsigned int
   3          #define uchar unsigned char
   4          sbit dula=P2^6;
   5          sbit wela=P2^7;
   6          uchar code table[]={
   7          0x3f,0x06,0x5b,0x4f,
   8          0x66,0x6d,0x7d,0x07,
   9          0x7f,0x6f,0x77,0x7c,
  10          0x39,0x5e,0x79,0x71,0};
  11          uchar num,temp;
  12          void display(uchar bb);
  13          uchar keyscan();
  14          
  15          void delay(uint z)
  16          {
  17   1              uint x,y;
  18   1              for(x=z;x>0;x--)
  19   1                      for(y=110;y>0;y--);
  20   1      }
  21          void main()
  22          {
  23   1          num=17;
  24   1          dula=1;
  25   1          P0=0;
  26   1          dula=0;
  27   1          wela=1;
  28   1          P0=0xc0;
  29   1          wela=0;
  30   1          
  31   1          while(1)
  32   1          {
  33   2              
  34   2              display(keyscan());
  35   2         
  36   2          }
  37   1      
  38   1      }
  39          void display(uchar bb)
  40          {
  41   1          dula=1;
  42   1          P0=table[bb-1];
  43   1          dula=0;
  44   1      }
  45          uchar keyscan()
  46          {
  47   1        P3=0xfe;//检测第一行
  48   1              temp=P3;//外部键盘输入
  49   1              temp=temp&0xf0;//检测那个键被按下
  50   1              if(temp!=0xf0)
  51   1              {
  52   2                  
  53   2                  delay(5);
  54   2                  temp=P3;
  55   2                  temp=temp&0xf0;
C51 COMPILER V8.05a   __阵式键盘                                                           08/03/2011 20:04:50 PAGE 2   

  56   2                 if(temp!=0xf0)//消抖确认时候按键
  57   2                  {
  58   3                       temp=P3;
  59   3                       switch(temp)
  60   3                              {
  61   4                                      case  0xee:num=1;
  62   4                                              break;
  63   4                          case  0xde:num=2;
  64   4                                              break;
  65   4                          case  0xbe:num=3;
  66   4                                              break;
  67   4                          case  0x7e:num=4;
  68   4                                              break;
  69   4                          
  70   4                              }
  71   3                      while(temp!=0xf0)
  72   3                      {
  73   4                          temp=P3;
  74   4                          temp=temp&0xf0;//松手检测
  75   4                      }
  76   3                      
  77   3                  }
  78   2                }
  79   1      
  80   1              P3=0xfd;//检测第2行
  81   1              temp=P3;//外部键盘输入
  82   1              temp=temp&0xf0;//检测那个键被按下
  83   1              if(temp!=0xf0)
  84   1              {
  85   2                  
  86   2                  delay(5);
  87   2                  temp=P3;
  88   2                  temp=temp&0xf0;
  89   2                 if(temp!=0xf0)//消抖确认时候按键
  90   2                  {
  91   3                       temp=P3;
  92   3                       switch(temp)
  93   3                              {
  94   4                                      case  0xed:num=5;
  95   4                                              break;
  96   4                          case  0xdd:num=6;
  97   4                                              break;
  98   4                          case  0xbd:num=7;
  99   4                                              break;
 100   4                          case  0x7d:num=8;
 101   4                                              break;
 102   4                          
 103   4                              }
 104   3                      while(temp!=0xf0)
 105   3                      {
 106   4                          temp=P3;
 107   4                          temp=temp&0xf0;//松手检测
 108   4                      }
 109   3                      
 110   3                  }
 111   2                }
 112   1              P3=0xfb;//检测第3行
 113   1              temp=P3;//外部键盘输入
 114   1              temp=temp&0xf0;//检测那个键被按下
 115   1              if(temp!=0xf0)
 116   1              {
 117   2                  
C51 COMPILER V8.05a   __阵式键盘                                                           08/03/2011 20:04:50 PAGE 3   

 118   2                  delay(5);
 119   2                  temp=P3;
 120   2                  temp=temp&0xf0;
 121   2                 if(temp!=0xf0)//消抖确认时候按键
 122   2                  {
 123   3                       temp=P3;
 124   3                       switch(temp)
 125   3                              {
 126   4                                      case  0xeb:num=9;
 127   4                                              break;
 128   4                          case  0xdb:num=10;
 129   4                                              break;
 130   4                          case  0xbb:num=11;
 131   4                                              break;
 132   4                          case  0x7b:num=12;
 133   4                                              break;
 134   4                          
 135   4                              }
 136   3                      while(temp!=0xf0)
 137   3                      {
 138   4                          temp=P3;
 139   4                          temp=temp&0xf0;//松手检测
 140   4                      }
 141   3                      
 142   3                  }
 143   2                }
 144   1              P3=0xf7;//检测第4行
 145   1              temp=P3;//外部键盘输入
 146   1              temp=temp&0xf0;//检测那个键被按下
 147   1              if(temp!=0xf0)
 148   1              {
 149   2                  
 150   2                  delay(5);
 151   2                  temp=P3;
 152   2                  temp=temp&0xf0;
 153   2                 if(temp!=0xf0)//消抖确认时候按键
 154   2                  {
 155   3                       temp=P3;
 156   3                       switch(temp)
 157   3                              {
 158   4                                      case  0xe7:num=13;
 159   4                                              break;
 160   4                          case  0xd7:num=14;
 161   4                                              break;
 162   4                          case  0xb7:num=15;
 163   4                                              break;
 164   4                          case  0x77:num=16;
 165   4                                              break;
 166   4                          
 167   4                              }
 168   3                      while(temp!=0xf0)
 169   3                      {
 170   4                          temp=P3;
 171   4                          temp=temp&0xf0;//松手检测
 172   4                      }
 173   3                      
 174   3                  }
 175   2                }  
 176   1      return num;
 177   1      }


C51 COMPILER V8.05a   __阵式键盘                                                           08/03/2011 20:04:50 PAGE 4   

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