📄 rd_usekey.lis
字号:
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 + -