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

📄 matrix_key.lst

📁 C51操作5767收音机芯片(内置杭州的几个台)
💻 LST
字号:
C51 COMPILER V7.09   MATRIX_KEY                                                            07/05/2007 19:59:42 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE MATRIX_KEY
OBJECT MODULE PLACED IN Matrix_Key.obj
COMPILER INVOKED BY: D:\A\KEIL\C51\BIN\C51.EXE MATRIX_KEY\Matrix_Key.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Matrix_Key.lst)
                    - OBJECT(Matrix_Key.obj)

line level    source

   1          #include "Matrix_Key.h"
   2          /*
   3           * 矩阵键盘通用程序(引脚输入输出方向不切换)
   4           */
   5          
   6          //KEY_PINS 低4位为ROW(监听) 高4位为COL(输出,低电平)
   7          //      7       6       5       4       3       2       1       0    
   8          // Co4 Co3 Co2 Co1 Ro4 Ro3 Ro2 Ro1
   9          
  10          /*      COL 4 3 2 1
  11                  ROW     4
  12                          3
  13                          2
  14                          1
  15          */
  16          
  17          unsigned char row=0,col=0;
  18          
  19          
  20          //<返回其列号(col) 需要事先准备其行号掩码>
  21          static unsigned char Matrix_Key_Scan_Col(const unsigned char rowbitmask)
  22          {
  23   1              unsigned char i=0;
  24   1              unsigned char colmask;
  25   1              KEY_PINS = 0x0f;
  26   1              colmask=0x0f;
  27   1              while ( (KEY_PINS & rowbitmask)==0)
  28   1              {
  29   2                      colmask = colmask<<1;
  30   2                      KEY_PINS = colmask | 0x0f;
  31   2                      i++;
  32   2              }
  33   1              return i;
  34   1      }
  35          
  36          
  37          //<检测是否有按键按下,并返回其行号(row)>
  38          static unsigned char Matrix_Key_Scan_Row()
  39          {
  40   1              KEY_PINS = 0x0f;
  41   1              
  42   1              if (ROW1 == 0)
  43   1              {
  44   2                      return 1;
  45   2              }
  46   1              else if (ROW2 == 0)
  47   1              {
  48   2                      return 2;
  49   2              }
  50   1              else if (ROW3 == 0)
  51   1              {
  52   2                      return 3;
  53   2              }
  54   1              else if (ROW4 == 0)
C51 COMPILER V7.09   MATRIX_KEY                                                            07/05/2007 19:59:42 PAGE 2   

  55   1              {
  56   2                      return 4;
  57   2              }
  58   1              return 0;
  59   1      }
  60          
  61          unsigned char Matrix_Key_Detect()       //行/列
  62          {
  63   1              static unsigned char keep_time;
  64   1              static unsigned char keep_row;
  65   1              static unsigned char keep_col;
  66   1              static unsigned char state              = 0;
  67   1              unsigned char uScanReturn;
  68   1      
  69   1              switch (state)
  70   1              {
  71   2                      case 0: //检测是否有按钮按下
  72   2                              if (Matrix_Key_Scan_Row() != 0 )
  73   2                              {       //<初始化>
  74   3                                      keep_time       = 0;
  75   3                                      keep_row        = 0;
  76   3                                      keep_col        = 0;
  77   3                                      state++;
  78   3                              }
  79   2                              break;
  80   2                      case 1:
  81   2                              uScanReturn = Matrix_Key_Scan_Row();
  82   2                              if (uScanReturn != 0 )  //按键按下姿态
  83   2                              {
  84   3                                      if (keep_time<250) keep_time++;
  85   3                                      if (keep_row == 0) 
  86   3                                      {
  87   4                                              keep_row = uScanReturn;
  88   4                                      }
  89   3                                      if (keep_row != 0 && keep_col == 0)
  90   3                                      {
  91   4                                              keep_col = Matrix_Key_Scan_Col( 0x01<<(keep_row-1) );
  92   4                                      }
  93   3                              }
  94   2                              else                                    //按键松起姿态
  95   2                              {
  96   3                                      if (keep_time>5)        //检测到有效按键
  97   3                                      {
  98   4                                              keep_time = 0;
  99   4                                              state++;
 100   4                                      }
 101   3                                      else                            //按键无效
 102   3                                      {
 103   4                                              state = 0;
 104   4                                      }
 105   3                              }
 106   2                              break;
 107   2                      case 2:
 108   2                              if (Matrix_Key_Scan_Row() == 0 )                //按键松起姿态(保持)
 109   2                              {
 110   3                                      if (keep_time<250) keep_time++;
 111   3                                      if (keep_time>5)        //检测到有效松起
 112   3                                      {
 113   4                                              /* 返回信息:检测到有效按键,并可以执行对应操作 */
 114   4                                              state = 0;
 115   4                                              row = keep_row;
 116   4                                              col = keep_col;
C51 COMPILER V7.09   MATRIX_KEY                                                            07/05/2007 19:59:42 PAGE 3   

 117   4                                              return 1;
 118   4                                      }
 119   3                              }
 120   2                              else    //按键被重新按下
 121   2                              {
 122   3                                              keep_time=0;    //重新计时
 123   3                              }
 124   2                              break;
 125   2              }
 126   1              return 0;
 127   1      
 128   1      }
 129          
 130          
 131          


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