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

📄 rd_usekey.lis

📁 LCD1602键盘显示模块实例
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0002           ; /********************
 0002           ; *   函 数 引 用 区  *
 0002           ; ********************/
 0002           ; #ifndef _USE_KEY_PRESS_SCAN_FUNC_INTERFACE
 0002           ;     # error Need for _USE_KEY_PRESS_SCAN_FUNC_INTERFACE
 0002           ; #else
 0002           ;     extern unsigned char _USE_KEY_PRESS_SCAN_FUNC_INTERFACE(void);
 0002           ; #endif
 0002           ; 
 0002           ; /********************
 0002           ; *   全局变量声明区  *
 0002           ; ********************/
 0002           ; unsigned char g_cReturnKeyNum = KEY_NULL;
 0002           ; unsigned char g_cReturnLongPressKeyNum = KEY_NULL;
 0002           ; unsigned int g_wKeyPressTimeCounter = 0;
 0002           ; unsigned int g_wKeyPressDelayCounter = 0;
 0002           ; 
 0002           ; /********************
 0002           ; *   模块变量声明区  *
 0002           ; ********************/
 0002           ; static unsigned char s_cKeyBUFF[KEY_BUFF_SIZE][2];
 0002           ; static unsigned char s_cKeyBUFFCounter = 0;
 0002           ; static unsigned char s_cKeyBUFFHeadPoint = 0;
 0002           ; static unsigned char s_cKeyBUFFTailPoint = 0;
 0002           ; 
 0002           ; static unsigned char s_cLongKeyPressNum = KEY_NULL;
 0002           ; static unsigned char s_cKeyNum = KEY_NULL;
 0002           ; 
 0002           ; 
 0002           ; /***********************************************************
 0002           ; *   函数说明:按键扫描码处理函数                           *
 0002           ; *   输入:    无                                           *
 0002           ; *   输出:    无                                           *
 0002           ; *   调用函数:_USE_KEY_PRESS_SCAN_FUNC_INTERFACE()         *
 0002           ; * -------------------------------------------------------- *
 0002           ; *   [说    明]                                             *
 0002           ; *            按下一个键以后,1s以内松开返回短按键键值      *
 0002           ; *            1s以上返回长按键键值。键值只保存一个周期      *
 0002           ; ***********************************************************/
 0002           ; static void _Key_Scan(void)
 0002           ; {
 0002                   .dbline 184
 0002           ;     static unsigned char OldKeyCode = KEY_NULL;
 0002           ;     static unsigned char IfLongKeyPress = FALSE;
 0002           ;     static unsigned int  LongPressAcceleration = 0;
 0002           ;        
 0002           ;     unsigned char NowKeyCode = _USE_KEY_PRESS_SCAN_FUNC_INTERFACE();
 0002 0E940000          xcall _Key_Press_Scan
 0006 402F              mov R20,R16
 0008                   .dbline 185
 0008           ;     s_cKeyNum = KEY_NULL;
 0008 8FEF              ldi R24,255
 000A 80930A00          sts _s_cKeyNum,R24
 000E                   .dbline 187
 000E           ;       
 000E           ;     if ((OldKeyCode != NowKeyCode) && (g_wKeyPressDelayCounter == 0))
 000E 20900B00          lds R2,L2
 0012 2016              cp R2,R16
 0014 49F1              breq L5
 0016           X0:
 0016 20900400          lds R2,_g_wKeyPressDelayCounter
 001A 30900500          lds R3,_g_wKeyPressDelayCounter+1
 001E 2220              tst R2
 0020 19F5              brne L5
 0022 3320              tst R3
 0024 09F5              brne L5
 0026           X1:
 0026                   .dbline 188
 0026           ;     {
 0026                   .dbline 189
 0026           ;         g_wKeyPressTimeCounter = 0;
 0026 2224              clr R2
 0028 3324              clr R3
 002A 30920300          sts _g_wKeyPressTimeCounter+1,R3
 002E 20920200          sts _g_wKeyPressTimeCounter,R2
 0032                   .dbline 190
 0032           ;         LongPressAcceleration = 0x03ff;
 0032 93E0              ldi R25,3
 0034 90930E00          sts L4+1,R25
 0038 80930D00          sts L4,R24
 003C                   .dbline 192
 003C           ;           
 003C           ;         if ((NowKeyCode == KEY_NULL) && (IfLongKeyPress == FALSE))
 003C 0F3F              cpi R16,255
 003E 41F4              brne L7
 0040           X2:
 0040 20900C00          lds R2,L3
 0044 2220              tst R2
 0046 21F4              brne L7
 0048           X3:
 0048                   .dbline 193
 0048           ;         {
 0048                   .dbline 194
 0048           ;             s_cKeyNum = OldKeyCode;
 0048 20900B00          lds R2,L2
 004C 20920A00          sts _s_cKeyNum,R2
 0050                   .dbline 195
 0050           ;         }
 0050           L7:
 0050                   .dbline 197
 0050           ;                 
 0050           ;         g_wKeyPressDelayCounter = KEY_PRESS_DELAY;
 0050 82E3              ldi R24,50
 0052 90E0              ldi R25,0
 0054 90930500          sts _g_wKeyPressDelayCounter+1,R25
 0058 80930400          sts _g_wKeyPressDelayCounter,R24
 005C                   .dbline 199
 005C           ;                 
 005C           ;         OldKeyCode = NowKeyCode;
 005C 40930B00          sts L2,R20
 0060                   .dbline 200
 0060           ;         IfLongKeyPress = FALSE;
 0060 2224              clr R2
 0062 20920C00          sts L3,R2
 0066                   .dbline 201
 0066           ;     }
 0066 3AC0              xjmp L6
 0068           L5:
 0068                   .dbline 203
 0068           ;     else
 0068           ;     {
 0068                   .dbline 204
 0068           ;         s_cKeyNum = KEY_NULL;
 0068 8FEF              ldi R24,255
 006A 80930A00          sts _s_cKeyNum,R24
 006E                   .dbline 205
 006E           ;         if ((g_wKeyPressTimeCounter > _USE_KEY_LONG_PRESS_DELAY_TIME) && (IfLongKeyPress == FALSE))
 006E 80E0              ldi R24,1024
 0070 94E0              ldi R25,4
 0072 20900200          lds R2,_g_wKeyPressTimeCounter
 0076 30900300          lds R3,_g_wKeyPressTimeCounter+1
 007A 8215              cp R24,R2
 007C 9305              cpc R25,R3
 007E C8F4              brsh L9
 0080           X4:
 0080 20900C00          lds R2,L3
 0084 2220              tst R2
 0086 A9F4              brne L9
 0088           X5:
 0088                   .dbline 206
 0088           ;         {
 0088                   .dbline 208
 0088           ;             #ifdef _USE_KEY_LONG_PRESS_REPEAT
 0088           ;             if (LongPressAcceleration > _USE_KEY_LONG_PRESS_FASTEST_SPEED)
 0088 8FE7              ldi R24,127
 008A 90E0              ldi R25,0
 008C 20900D00          lds R2,L4
 0090 30900E00          lds R3,L4+1
 0094 8215              cp R24,R2
 0096 9305              cpc R25,R3
 0098 30F4              brsh L11
 009A           X6:
 009A                   .dbline 209
 009A           ;             {
 009A                   .dbline 210
 009A           ;                 LongPressAcceleration >>= 1;
 009A 3694              lsr R3
 009C 2794              ror R2
 009E 30920E00          sts L4+1,R3
 00A2 20920D00          sts L4,R2
 00A6                   .dbline 211
 00A6           ;             }
 00A6           L11:
 00A6                   .dbline 213
 00A6           ;             #endif
 00A6           ;             s_cLongKeyPressNum = NowKeyCode;
 00A6 40930900          sts _s_cLongKeyPressNum,R20
 00AA                   .dbline 214
 00AA           ;             IfLongKeyPress = TRUE;
 00AA 81E0              ldi R24,1
 00AC 80930C00          sts L3,R24
 00B0                   .dbline 215
 00B0           ;         }
 00B0 15C0              xjmp L10
 00B2           L9:
 00B2                   .dbline 217
 00B2           ;         else
 00B2           ;         {
 00B2                   .dbline 219
 00B2           ;             #ifdef _USE_KEY_LONG_PRESS_REPEAT
 00B2           ;             if (!(g_wKeyPressTimeCounter & LongPressAcceleration))
 00B2 20900D00          lds R2,L4
 00B6 30900E00          lds R3,L4+1
 00BA 40900200          lds R4,_g_wKeyPressTimeCounter
 00BE 50900300          lds R5,_g_wKeyPressTimeCounter+1
 00C2 4220              and R4,R2
 00C4 5320              and R5,R3
 00C6 4420              tst R4
 00C8 31F4              brne L13
 00CA 5520              tst R5
 00CC 21F4              brne L13
 00CE           X7:
 00CE                   .dbline 220
 00CE           ;             {
 00CE                   .dbline 221
 00CE           ;                 IfLongKeyPress = FALSE;
 00CE 2224              clr R2
 00D0 20920C00          sts L3,R2
 00D4                   .dbline 222
 00D4           ;             }
 00D4 03C0              xjmp L14
 00D6           L13:
 00D6                   .dbline 224
 00D6           ;             else
 00D6           ;             {
 00D6                   .dbline 225
 00D6           ;                 s_cLongKeyPressNum = KEY_NULL;
 00D6 8FEF              ldi R24,255
 00D8 80930900          sts _s_cLongKeyPressNum,R24
 00DC                   .dbline 226
 00DC           ;             }
 00DC           L14:
 00DC                   .dbline 230
 00DC           ;             #else
 00DC           ;             s_cLongKeyPressNum = KEY_NULL;    
 00DC           ;             #endif
 00DC           ;         }
 00DC           L10:
 00DC                   .dbline 231
 00DC           ;     }
 00DC           L6:
 00DC                   .dbline -2
 00DC           L1:
 00DC                   .dbline 0 ; func end
 00DC 4991              ld R20,y+
 00DE 0895              ret
 00E0                   .dbsym r NowKeyCode0 20 c

⌨️ 快捷键说明

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