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

📄 key_scan.lst

📁 硬件平台:C8051F314 包括键盘扫描程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   KEY_SCAN                                                              09/17/2008 10:45:02 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 DB OE

line level    source

   1          // 现在由本机判断按下-〉释放为一个完整的击键后报告给MAIN MCU
   2          
   3          //------------------------------------------------------------------------------------
   4          //
   5          // FILE NAME      : KEY_SCAN.c
   6          // TARGET DEVICE  : C8051F314
   7          // CREATED ON     : 07/14/06
   8          // CREATED BY     : Jzp
   9          //
  10          // Revision 1.0  
  11          //
  12          //------------------------------------------------------------------------------------
  13          
  14          // 键盘扫描程序
  15          // - Pinout:
  16          //    P1.0 -> 键盘矩阵列选线0
  17          //    P1.1 -> 键盘矩阵列选线1
  18          //    P1.2 -> 键盘矩阵列选线2
  19          //    P1.3 -> 键盘矩阵列选线3
  20          //    P1.4 -> 键盘矩阵行选线0
  21          //    P1.5 -> 键盘矩阵行选线1
  22          //    P1.6 -> 键盘矩阵行选线2
  23          //    P1.7 -> 键盘矩阵行选线3
  24          //    P2.0 -> 键盘矩阵行选线4
  25          //    P2.1 -> 键盘矩阵行选线5
  26          //    P2.2 -> 键盘矩阵行选线6
  27          //    P2.3 -> 键盘矩阵行选线7
  28          //    P2.4 -> 键盘矩阵行选线8
  29          //    P2.5 -> 键盘矩阵行选线9
  30          //    P2.6 -> 键盘矩阵行选线10
  31          //    P2.7 -> alpha LED
  32          //    P0.6 -> 键盘中断请求线
  33          //
  34          //------------------------------------------------------------------------------------
  35          // Includes
  36          //------------------------------------------------------------------------------------
  37          #include <c8051f310.h>                       // SFR declarations
  38          #include <math.h>
  39          #include "..\\inc\\DEFINE.H"
  40          #define KEY_SCAN_GLOBALS
  41          #include "..\\inc\\key_scan.h"
  42          
  43          //------------------------------------------------------------------------------------
  44          // 全局变量
  45          //------------------------------------------------------------------------------------
  46          UCHAR KbIsPressed;        //=0 表示有键值MAIN MCU未读取
  47          UCHAR PreKeyValue;      //当次扫描前的按键键值
  48                                  //=0x00 表示无按键
  49                                  //=0xff 表示为无效值 
  50          // 键盘状态变量
  51          UCHAR AltKeyOn;            //=1 表示当前ALT键切换为ON状态,键值转义
  52          UCHAR AlfaKeyOn;           //=1 表示当前alpha键切换为ON状态,键值转义
  53          UCHAR CtlKeyOn;            //=1 表示当前ctrl键切换为ON状态,键值转义
  54          UCHAR CapsKeyOn;           //=1 表示当前Caps键切换为ON状态,键值转义
  55          UCHAR ShiftKeyOn;          //=1 表示当前Caps键切换为ON状态,键值转义
C51 COMPILER V8.02   KEY_SCAN                                                              09/17/2008 10:45:02 PAGE 2   

  56          UCHAR KbIsValid;           //=1 表示缓冲当前为有效值
  57          
  58          UCHAR xdata KeyBlOn_Count;       //键盘背光打开计时
  59          UCHAR xdata second;              // 秒计时
  60          UCHAR xdata intcount;            // 10ms interrupt counter
  61          UCHAR xdata KeyDelayCount;
  62          //UCHAR KeyBuffer[8];        //记录按键扫描码,当按键为通码时,第二个字节放扫描码,第一个
  63                                     //字节放0xd0,该字节是内部标识符,iic发送程序通过它判断需发送机个字节
  64          
  65          extern UINT Tmr0Reload;
  66          extern UCHAR Tmr0High;
  67          extern UCHAR Tmr0Low;
  68          
  69          //------------------------------------------------------------------------------------
  70          // 函数原型声明
  71          //------------------------------------------------------------------------------------
  72          UCHAR GetKeyMatrix(void);
  73          void KEY_ROW_LOW(UCHAR index);
  74          
  75          //SCHAR OutputPortBit(char PortNum, char Bit, char Value);
  76          //------------------------------------------------------------------------------------
  77          // 常量定义
  78          //------------------------------------------------------------------------------------
  79          #define COLNUM 4
  80          #define ROWNUM 11
  81          //------------------------------------------------------------------------------------
  82          // 键码表 
  83          //------------------------------------------------------------------------------------
  84          UCHAR code key_table[][2] = {
  85                  0x01, '1',//0x31,
  86                  0x02, '2',//0x32,
  87                  0x04, '3',//0x33,
  88                  0x08, '4',//0x34,
  89                  0x11, '5',//0x35,
  90                  0x12, '6',//0x36,
  91                  0x13, '7',//0x37,
  92                  0x14, '8',//0x38,
  93                  0x21, '9',//0x39,
  94                  0x22, ':',//0x3a,
  95                  0x24, ';',//0x3b,
  96                  0x28, '<',//0x3c,
  97                  0x31, '=',//0x3d,
  98                  0x32, '>',//0x3e,
  99                  0x34, '?',//0x3f,
 100                  0x38, '@',//0x40,
 101                  0x41, 'A',//0x41,
 102                  0x42, 'B',//0x42,
 103                  0x44, 'C',//0x43,
 104                  0x48, 'D',//0x44,
 105                  0x51, 'E',//0x45,
 106                  0x52, 'F',//0x46,
 107                  0x54, 'G',//0x47,
 108                  0x58, 'H',//0x48,
 109                  0x61, 'I',//0x49,
 110                  0x62, 'J',//0x4a,
 111                  0x64, 'K',//0x4b,
 112                  0x68, 'L',//0x4c,
 113                  0x71, 'M',//0x4d,
 114                  0x72, 'N',//0x4e,
 115                  0x74, 'O',//0x4f,
 116                  0x78, 'P',//0x50,
 117                  0x81, 'Q',//0x51,
C51 COMPILER V8.02   KEY_SCAN                                                              09/17/2008 10:45:02 PAGE 3   

 118                  0x82, 'R',//0x52,
 119                  0x84, 'S',//0x53,
 120                  0x88, 'T',//0x54,
 121                  0x91, 'U',//0x55,
 122                  0x92, 'V',//0x56,
 123                  0x94, 'W',//0x57,
 124                  0x98, 'X',//0x58,
 125                  0xa1, 'Y',//0x59,
 126                  0xa2, 'Z',//0x5a,
 127                  0xa4, '[',//0x5b,
 128                  0xa8, '\\',//0x5c,
 129                  0xff, 0
 130                  };
 131          
 132          //UCHAR code key_table[][2] = {
 133          //      0x01, 1,
 134          //      0x02, 2,
 135          //      0x04, 3,
 136          //      0x08, 4,
 137          //      0x11, 5,
 138          //      0x12, 6,
 139          //      0x13, 7,
 140          //      0x14, 8,
 141          //      0x21, 9,
 142          //      0x22, 10,
 143          //      0x24, 11,
 144          //      0x28, 12,
 145          //      0x31, 13,
 146          //      0x32, 14,
 147          //      0x34, 15,
 148          //      0x38, 16,
 149          //      0x41, 17,
 150          //      0x42, 18,
 151          //      0x44, 19,
 152          //      0x48, 20,
 153          //      0x51, 21,
 154          //      0x52, 22,
 155          //      0x54, 23,
 156          //      0x58, 24,
 157          //      0x61, 25,
 158          //      0x62, 26,
 159          //      0x64, 27,
 160          //      0x68, 28,
 161          //      0x71, 29,
 162          //      0x72, 30,
 163          //      0x74, 31,
 164          //      0x78, 32,
 165          //      0x81, 33,
 166          //      0x82, 34,
 167          //      0x84, 35,
 168          //      0x88, 36,
 169          //      0x91, 37,
 170          //      0x92, 38,
 171          //      0x94, 39,
 172          //      0x98, 40,
 173          //      0xa1, 41,
 174          //      0xa2, 42,
 175          //      0xa4, 43,
 176          //      0xa8, 44,
 177          //      0xff, 0
 178          //      };
 179                  
C51 COMPILER V8.02   KEY_SCAN                                                              09/17/2008 10:45:02 PAGE 4   

 180          /************************************************************
 181          -----键盘扫描及取键值程序-----
 182          功能: 扫描键盘
 183          入口参数: 无
 184          出口参数:有按键则键值=阵列号,无按键则键值=0xff 
 185          //UCHAR GetKeyMatrix(void)
 186          *************************************************************/
 187          
 188          UCHAR GetKeyMatrix(void)
 189          {
 190   1        UCHAR i;//,j;
 191   1        UCHAR ColValue = 0;    //列线0-3的读取电平存储值
 192   1        UCHAR CurKeyValue;  //初始化无按键
 193   1        // 扫描开始
 194   1        CurKeyValue = PreKeyValue;
 195   1        KEY_ROW_ALL_LOW;           //初始行线全部行线输出低电平,试探有无按键 
 196   1        ColValue = P1&0x0f;        //读取列线电平
 197   1        if(ColValue == 0x0f)       //当前无按键
 198   1        {
 199   2          if(KbIsPressed == 0)     //之前无按键
 200   2          {
 201   3            CurKeyValue = 0xff;    //=0x00 表示无按键
 202   3            PreKeyValue = 0xff; 
 203   3            return CurKeyValue;    //返回无效键值
 204   3          }
 205   2          else                     //有按键释放 
 206   2          {
 207   3            KbIsPressed = 0;
 208   3            KbIsValid = 1;         //等待MAIN MCU读取
 209   3            return CurKeyValue;
 210   3          }
 211   2        }
 212   1        //开始逐行扫描 
 213   1        for(i = 0; i < ROWNUM; i++)
 214   1        {
 215   2          KEY_ROW_LOW(i);          //驱动第i列行线
 216   2          ColValue = P1&0x0f;      //读取列线电平
 217   2          if(ColValue != 0x0f)
 218   2          {
 219   3            KeyDelayCount = 2;     //防抖动20ms
 220   3            while(KeyDelayCount == 0);       
 221   3            ColValue = P1&0x0f;    //读取列线电平
 222   3            if(ColValue != 0x0f)   //确实有键按下
 223   3            {
 224   4              KeyBlOn_Count = 4;   // 背光延时重新计数
 225   4              KbBlCtl = 1;         // 点亮键盘背光
 226   4              CurKeyValue = ((i << 4)&0xf0) + (~ColValue&0x0f);
 227   4              KbIsPressed = 1;
 228   4              break;
 229   4            }  //end if(ColValue != 0x0f) 2
 230   3          }  //end if(ColValue != 0x0f) 1
 231   2        }  //end for
 232   1        PreKeyValue = CurKeyValue; // 替换原键值
 233   1        return CurKeyValue;
 234   1      }
 235          
 236          /************************************************************
 237          -----键值转换为扫描码处理程序-----
 238          功能:对特殊功能键作相应处理
 239          入口参数:GetKeyMatrix函数取得的键值

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -