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

📄 test.lst

📁 16*16键盘51单片机C语言扫描程序
💻 LST
字号:
C51 COMPILER V8.02   TEST                                                                  03/05/2009 15:26:54 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE test.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*=======================================================
   2                           键盘显示程序
   3                                                          武汉世纪久华科技有限公司
   4          
   5          ========================================================*/
   6          #include <reg51.h>
   7          #include <intrins.h>    
   8          #define uchar unsigned char
   9          #define uint unsigned int
  10                  
  11          sbit  PL1=P1^0;   //数码管选通最低位的端口
  12          sbit  LCD_E = P1^7;
  13          uint num,temp;
  14          
  15          uchar code dis_7[]={0XC0, 0XF9,0XA4,0XB0,0X99,0X92,0X83, 0XF8,0X80,0X98,0xa0,0x83,0xa7,0xa1,0x84,0x8e,0xbf
             -,0x7f };
  16                                                //数码管显示编码"0"       ——————“9”,“a"-----"f"
  17          void delay(uint z)        //延时程序,约7.6us
  18          {
  19   1              uint x,y;
  20   1              for(x=z;x>0;x--)
  21   1                      for(y=110;y>0;y--);
  22   1      }
  23          
  24          uchar keyscan()
  25          {
  26   1                              P2=0xfe;        //1111 1110,P2.0置"0"扫描第四列(K4--K16),P2口高位4位置“1”,准备接受数据
  27   1                              temp=P2;
  28   1                              temp=temp&0xf0;
  29   1                              while(temp!=0xf0) //如果P2口高四位不为1111,说明有键按下
  30   1                                      {
  31   2                                              delay(5);               //延时去抖动
  32   2                                              temp=P2;
  33   2                                              temp=temp&0xf0; 
  34   2                                              while(temp!=0xf0)        //进一步确定是否有键按下
  35   2                                              {
  36   3                                                      temp=P2;
  37   3                                              switch(temp)                     //进一步确定是第四列的哪一行键按下
  38   3                                                      {
  39   4                                                              case 0xee:num=0;           //如果是第一个行(第四列)
  40   4                                                                      break;
  41   4                                                              case 0xde:num=12;         //如果是第二行(第四列)
  42   4                                                                      break;
  43   4                                                              case 0xbe:num=8;
  44   4                                                                      break;
  45   4                                                              case 0x7e:num=4;
  46   4                                                                      break;
  47   4                                                      }
  48   3                                              while(temp!=0xf0)
  49   3                                                      {
  50   4                                                              temp=P2;
  51   4                                                              temp=temp&0xf0;
  52   4                                                      }  
  53   3                                              }
  54   2                                      }
C51 COMPILER V8.02   TEST                                                                  03/05/2009 15:26:54 PAGE 2   

  55   1      
  56   1                              P2=0xfd;          //扫描第三列
  57   1                              temp=P2;
  58   1                              temp=temp&0xf0;
  59   1                              while(temp!=0xf0)
  60   1                                      {
  61   2                                              delay(5);
  62   2                                              temp=P2;
  63   2                                              temp=temp&0xf0;
  64   2                                              while(temp!=0xf0)
  65   2                                              {
  66   3                                                      temp=P2;
  67   3                                              switch(temp)
  68   3                                                      {
  69   4                                                              case 0xed:num=15;  //如果是第一个行(第三列)
  70   4                                                                      break;
  71   4                                                              case 0xdd:num=11;   //如果是第二行(第三列)
  72   4                                                                      break;
  73   4                                                              case 0xbd:num=7;
  74   4                                                                      break;
  75   4                                                              case 0x7d:num=3;
  76   4                                                                      break;
  77   4                                                      }
  78   3                                              while(temp!=0xf0)
  79   3                                                      {
  80   4                                                              temp=P2;
  81   4                                                              temp=temp&0xf0;
  82   4                                                      }
  83   3                                              }
  84   2                                      }
  85   1      
  86   1      
  87   1                              P2=0xfb;         //扫描第二列
  88   1                              temp=P2;
  89   1                              temp=temp&0xf0;
  90   1                              while(temp!=0xf0)
  91   1                                      {
  92   2                                              delay(5);
  93   2                                              temp=P2;
  94   2                                              temp=temp&0xf0;
  95   2                                              while(temp!=0xf0)
  96   2                                              {
  97   3                                                      temp=P2;
  98   3                                              switch(temp)
  99   3                                                      {
 100   4                                                              case 0xeb:num=14;
 101   4                                                                      break;
 102   4                                                              case 0xdb:num=10;
 103   4                                                                      break;
 104   4                                                              case 0xbb:num=6;
 105   4                                                                      break;
 106   4                                                              case 0x7b:num=2;
 107   4                                                                      break;
 108   4                                                      }
 109   3                                              while(temp!=0xf0)
 110   3                                                      {
 111   4                                                              temp=P2;
 112   4                                                              temp=temp&0xf0;
 113   4                                                      }
 114   3                                              }
 115   2                                      }
 116   1      
C51 COMPILER V8.02   TEST                                                                  03/05/2009 15:26:54 PAGE 3   

 117   1      
 118   1                              P2=0xf7;                 //扫描第一列
 119   1                              temp=P2;
 120   1                              temp=temp&0xf0;
 121   1                              while(temp!=0xf0)
 122   1                                      {
 123   2                                              delay(5);
 124   2                                              temp=P2;
 125   2                                              temp=temp&0xf0;
 126   2                                              while(temp!=0xf0)
 127   2                                              {
 128   3                                                      temp=P2;
 129   3                                              switch(temp)
 130   3                                                      {
 131   4                                                              case 0xe7:num=13;
 132   4                                                                      break;
 133   4                                                              case 0xd7:num=9;
 134   4                                                                      break;
 135   4                                                              case 0xb7:num=5;
 136   4                                                                      break;
 137   4                                                              case 0x77:num=1;
 138   4                                                                      break;
 139   4                                                      }
 140   3                                              while(temp!=0xf0)
 141   3                                                      {
 142   4                                                              temp=P2;
 143   4                                                              temp=temp&0xf0;
 144   4                                                      }
 145   3                                              }
 146   2                                      }
 147   1      return num;                     //返回扫描的键值
 148   1      
 149   1      }
 150          
 151          main()
 152          {
 153   1              while(1)
 154   1              {
 155   2                      LCD_E = 0;
 156   2                      keyscan();        // 调用键盘扫描程序
 157   2                      PL1=0;            // 只选通数码管的最低位
 158   2                      P0=dis_7[num]; //查找数组中(扫描键值对应的)编码,并赋给P0口(数码管的数据端口)
 159   2                      delay(1);       
 160   2              }
 161   1      }


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