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

📄 keyscan.lst

📁 Please carefully read the many features of your package and then write the specific function (at lea
💻 LST
字号:
C51 COMPILER V8.05a   KEYSCAN                                                              08/28/2007 12:29:09 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE KEYSCAN
OBJECT MODULE PLACED IN KeyScan.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sources\KeyScan.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\KeySc
                    -an.lst) OBJECT(KeyScan.obj)

line level    source

   1          //*************************************************************************************************
   2          //*************************************************************************************************
   3          //**<程序名>:键盘扫描子程序                                                                                                                                     **
   4          //**<功能>:当有外部中断0时调用此函数,使用列扫描的方式获取键码,键码由2位数字组成。高位为行号   **
   5          //**            低位为列号。                                                                                                                                             **
   6          //*************************************************************************************************
   7          //*************************************************************************************************
   8          
   9          
  10          //*************************************************************************************************
  11          //*                                                                                                                                                                                               *
  12          //*                      ******************************头文件及宏定义**************************                           *
  13          //*                                                                                                                                                                                               *
  14          //*************************************************************************************************
  15          #include <at89x51.h>
  16          
  17          #define SCANPORT P1                               //4×4键盘扫描端口,低4位是行线,高4位是列线。
  18                                                                            //采用逐列扫描的方法,无按键时,低4位输出1,高4位输出0。
  19                                                                            //当有按键时,高4位输出扫描电位,低4位输入扫描结果。
  20          
  21          
  22          //*************************************************************************************************
  23          //*                                                                                                                                                                                               *
  24          //*                       ********************************全局变量******************************                          *
  25          //*                                                                                                                                                                                               *
  26          //*************************************************************************************************
  27          unsigned char uca_LineScan[4]={0xEF,0xDF,0xBF,0x7F};            //列线扫描电压,分为第1,2,3,4根列线
  28                                                                                                                                  //为低电平,其他为高电平。
  29          //*************************************************************************************************
  30          //*                                                                                                                                                                                               *
  31          //*                       ********************************函数实现******************************                          *
  32          //*                                                                                                                                                                                               *
  33          //*************************************************************************************************
  34          unsigned char ucKeyScan()
  35          {
  36   1              unsigned char ucTemp=0;                         //扫描状态暂存。
  37   1              unsigned char ucRow=0,ucLine=0;     //行号,列号。
  38   1      
  39   1              EX0=0;                                                          //在键扫描处理时,关闭外部中断0,防抖动。
  40   1      
  41   1              for(ucLine=0;ucLine<4;ucLine++)         //列扫描
  42   1                      {
  43   2                              SCANPORT=uca_LineScan[ucLine];                     //输出扫描电位。
  44   2                              ucTemp=SCANPORT&0x0F;                                      //输入扫描电位,并屏蔽高4位。
  45   2                              if(ucTemp!=0x0F)                 
  46   2                                      {                                                                         //判断该列是否有按键按下。
  47   3                                      switch(ucTemp)
  48   3                                              {
  49   4                                              case 0x0E: ucRow=10;break;                //如果有,则判断行号。
  50   4                                              case 0x0D: ucRow=20;break;
  51   4                                              case 0x0B: ucRow=30;break;
  52   4                                              case 0x07: ucRow=40;break;
  53   4                                              default:   ucRow=50;break;
  54   4                                              }
C51 COMPILER V8.05a   KEYSCAN                                                              08/28/2007 12:29:09 PAGE 2   

  55   3                                      break;
  56   3                                      }
  57   2                      }
  58   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复键扫描处理前初始状态>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  59   1              SCANPORT=0x0F;                                          //恢复P2口
  60   1              EX0=1;                                                  //恢复按键中断。
  61   1      
  62   1              return ucRow+ucLine+1;                   //返回按键编码。格式为2位数,高位为行号,低位为列号。
  63   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     71    ----
   CONSTANT SIZE    =   ----    ----
   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 + -