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

📄 key_scan.lst

📁 4X4键盘的扫描程序
💻 LST
字号:
C51 COMPILER V8.02   KEY_SCAN                                                              01/19/2009 21:56:44 PAGE 1   


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

line level    source

   1          //该函数只完成一次扫描任务,需在循环内调用
   2          //row列,hor横
   3          
   4          #include <reg52.h>
   5          #define uchar unsigned char
   6          
   7          void delay(uchar time)
   8          {
   9   1          uchar i,j;
  10   1          for(i=time;i>0;i--)
  11   1              for(j=110;j>0;j--);
  12   1      }
  13          
  14          uchar key_scan()
  15          {
  16   1          uchar temp,hor,row;
  17   1          
  18   1          P2 = 0xf0;
  19   1          temp = P2;
  20   1          temp &= 0xf0;
  21   1          if(temp != 0xf0)//扫描到按键动作
  22   1          {
  23   2              delay(5);
  24   2              
  25   2              //开始进行列检查
  26   2              P2 = 0xf0;
  27   2              temp = P2;
  28   2              temp &= 0xf0;
  29   2              if(temp != 0xf0)//确认有按键动作
  30   2              {
  31   3                  temp = ~temp;
  32   3                  temp >>= 4; //列值在temp的低四位
  33   3                  switch(temp)//列值转换,并保存在row中
  34   3                  {
  35   4                      case 1 : row = 1; break;
  36   4                      case 2 : row = 2; break;
  37   4                      case 4 : row = 3; break;
  38   4                      case 8 : row = 4; break;
  39   4                      default: break;
  40   4                  }
  41   3                  //列检查结束
  42   3      
  43   3                  //开始进行行检查
  44   3                  P2 = 0x0f;
  45   3                  temp = P2;
  46   3                  temp = ~temp;
  47   3                  temp &= 0x0f;//行值在temp的低四位
  48   3                  switch(temp)//行值转换,并保存在hor中
  49   3                  {
  50   4                      case 1 : hor = 1; break;
  51   4                      case 2 : hor = 2; break;
  52   4                      case 4 : hor = 3; break;
  53   4                      case 8 : hor = 4; break;
  54   4                      default: break;
  55   4                  }
C51 COMPILER V8.02   KEY_SCAN                                                              01/19/2009 21:56:44 PAGE 2   

  56   3                  //行检查结束
  57   3      
  58   3                  //检查按键动作是否结束,否则程序在此等待
  59   3                  P2 = 0xf0;
  60   3                  temp = P2;
  61   3                  temp &= 0xf0;
  62   3                  while(temp != 0xf0)
  63   3                  {
  64   4                      P2 = 0xf0;
  65   4                      temp = P2;
  66   4                      temp &= 0xf0;
  67   4                  }
  68   3                  //按键动作结束,程序往下进行
  69   3                  
  70   3                  //计算键值并返回
  71   3                  return ((hor-1)*4 + row);
  72   3      
  73   3              }
  74   2          }
  75   1          //没有按键动作,返回0;
  76   1          return 0;   
  77   1      }
  78          
  79          //测试开始
  80          void display(uchar seat_data,seg_data)  //seat_data位值,seg_data管值
  81          {
  82   1          P0 = (seat_data<<4)|seg_data;
  83   1      }
  84          
  85          void main()
  86          {
  87   1          uchar key,shi,ge;
  88   1          P2 = 0xff;
  89   1          while(1)
  90   1          {
  91   2              key = key_scan();
  92   2              if(key != 0)
  93   2              {
  94   3                  shi = key/10;
  95   3                  ge = key%10;
  96   3              }
  97   2              display(6,shi);
  98   2              display(7,ge);
  99   2          }
 100   1      }
 101          //测试结束


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