📄 rd_usekey.lis
字号:
00E0 .dbend
00E0 .dbfunc e Add_Key_Code _Add_Key_Code fV
.even
00E0 _Add_Key_Code::
00E0 .dbline -1
00E0 .dbline 242
00E0 ;
00E0 ; }
00E0 ;
00E0 ; /***********************************************************
00E0 ; * 函数说明:键盘缓冲处理函数 *
00E0 ; * 输入: 无 *
00E0 ; * 输出: 无 *
00E0 ; * 调用函数:_Key_Scan() *
00E0 ; ***********************************************************/
00E0 ; void Add_Key_Code(void)
00E0 ; {
00E0 .dbline 243
00E0 ; _Key_Scan();
00E0 8FDF xcall __Key_Scan
00E2 .dbline 245
00E2 ;
00E2 ; if ((s_cKeyNum == KEY_NULL) && (s_cLongKeyPressNum == KEY_NULL))
00E2 80910A00 lds R24,_s_cKeyNum
00E6 8F3F cpi R24,255
00E8 29F4 brne L16
00EA X8:
00EA 80910900 lds R24,_s_cLongKeyPressNum
00EE 8F3F cpi R24,255
00F0 09F4 brne L16
00F2 X9:
00F2 .dbline 246
00F2 ; {
00F2 .dbline 247
00F2 ; return ;
00F2 32C0 xjmp L15
00F4 L16:
00F4 .dbline 250
00F4 ; }
00F4 ;
00F4 ; if ((s_cKeyBUFFHeadPoint == s_cKeyBUFFTailPoint) && (s_cKeyBUFFCounter != NULL))
00F4 20900800 lds R2,_s_cKeyBUFFTailPoint
00F8 30900700 lds R3,_s_cKeyBUFFHeadPoint
00FC 3214 cp R3,R2
00FE 29F4 brne L18
0100 X10:
0100 20900600 lds R2,_s_cKeyBUFFCounter
0104 2220 tst R2
0106 09F0 breq L18
0108 X11:
0108 .dbline 251
0108 ; {
0108 .dbline 252
0108 ; return ;
0108 27C0 xjmp L15
010A L18:
010A .dbline 255
010A ; }
010A ;
010A ; s_cKeyBUFF[s_cKeyBUFFTailPoint][0] = s_cKeyNum;
010A 80E0 ldi R24,<_s_cKeyBUFF
010C 90E0 ldi R25,>_s_cKeyBUFF
010E E0910800 lds R30,_s_cKeyBUFFTailPoint
0112 FF27 clr R31
0114 EE0F lsl R30
0116 FF1F rol R31
0118 E80F add R30,R24
011A F91F adc R31,R25
011C 20900A00 lds R2,_s_cKeyNum
0120 2082 std z+0,R2
0122 .dbline 256
0122 ; s_cKeyBUFF[s_cKeyBUFFTailPoint][1] = s_cLongKeyPressNum;
0122 80E0 ldi R24,<_s_cKeyBUFF+1
0124 90E0 ldi R25,>_s_cKeyBUFF+1
0126 E0910800 lds R30,_s_cKeyBUFFTailPoint
012A FF27 clr R31
012C EE0F lsl R30
012E FF1F rol R31
0130 E80F add R30,R24
0132 F91F adc R31,R25
0134 20900900 lds R2,_s_cLongKeyPressNum
0138 2082 std z+0,R2
013A .dbline 258
013A ;
013A ; s_cKeyBUFFTailPoint ++;
013A 80910800 lds R24,_s_cKeyBUFFTailPoint
013E 8F5F subi R24,255 ; addi 1
0140 80930800 sts _s_cKeyBUFFTailPoint,R24
0144 .dbline 259
0144 ; if (s_cKeyBUFFTailPoint == KEY_BUFF_SIZE)
0144 8830 cpi R24,8
0146 19F4 brne L21
0148 X12:
0148 .dbline 260
0148 ; {
0148 .dbline 261
0148 ; s_cKeyBUFFTailPoint = 0;
0148 2224 clr R2
014A 20920800 sts _s_cKeyBUFFTailPoint,R2
014E .dbline 262
014E ; }
014E L21:
014E .dbline 263
014E ; s_cKeyBUFFCounter ++;
014E 80910600 lds R24,_s_cKeyBUFFCounter
0152 8F5F subi R24,255 ; addi 1
0154 80930600 sts _s_cKeyBUFFCounter,R24
0158 .dbline -2
0158 L15:
0158 .dbline 0 ; func end
0158 0895 ret
015A .dbend
015A .dbfunc e Get_Key_Code _Get_Key_Code fc
.even
015A _Get_Key_Code::
015A .dbline -1
015A .dbline 276
015A ; }
015A ;
015A ; /***********************************************************
015A ; * 函数说明:从键盘缓冲区中获得一个按键扫描码 *
015A ; * 输出: 返回操作是否成功TRUE / FALSE *
015A ; * 输入: 无 *
015A ; * 调用函数:Add_Key_Code() *
015A ; * -------------------------------------------------------- *
015A ; * [说 明] *
015A ; * 将按键扫描码放到专门的临时缓冲变量中 *
015A ; ***********************************************************/
015A ; unsigned char Get_Key_Code(void)
015A ; {
015A .dbline 277
015A ; g_cReturnKeyNum = KEY_NULL;
015A 8FEF ldi R24,255
015C 80930000 sts _g_cReturnKeyNum,R24
0160 .dbline 278
0160 ; g_cReturnLongPressKeyNum = KEY_NULL;
0160 80930100 sts _g_cReturnLongPressKeyNum,R24
0164 .dbline 284
0164 ;
0164 ; #ifdef _USE_KEY_MANUL_REFRESH
0164 ; Add_Key_Code();
0164 ; #endif
0164 ;
0164 ; if ((s_cKeyBUFFHeadPoint == s_cKeyBUFFTailPoint) && (s_cKeyBUFFCounter == NULL))
0164 20900800 lds R2,_s_cKeyBUFFTailPoint
0168 30900700 lds R3,_s_cKeyBUFFHeadPoint
016C 3214 cp R3,R2
016E 31F4 brne L24
0170 X13:
0170 20900600 lds R2,_s_cKeyBUFFCounter
0174 2220 tst R2
0176 11F4 brne L24
0178 X14:
0178 .dbline 285
0178 ; {
0178 .dbline 286
0178 ; return FALSE;
0178 0027 clr R16
017A 28C0 xjmp L23
017C L24:
017C .dbline 289
017C ; }
017C ;
017C ; g_cReturnKeyNum = s_cKeyBUFF[s_cKeyBUFFHeadPoint][0];
017C 80E0 ldi R24,<_s_cKeyBUFF
017E 90E0 ldi R25,>_s_cKeyBUFF
0180 E0910700 lds R30,_s_cKeyBUFFHeadPoint
0184 FF27 clr R31
0186 EE0F lsl R30
0188 FF1F rol R31
018A E80F add R30,R24
018C F91F adc R31,R25
018E 2080 ldd R2,z+0
0190 20920000 sts _g_cReturnKeyNum,R2
0194 .dbline 290
0194 ; g_cReturnLongPressKeyNum = s_cKeyBUFF[s_cKeyBUFFHeadPoint][1];
0194 80E0 ldi R24,<_s_cKeyBUFF+1
0196 90E0 ldi R25,>_s_cKeyBUFF+1
0198 E0910700 lds R30,_s_cKeyBUFFHeadPoint
019C FF27 clr R31
019E EE0F lsl R30
01A0 FF1F rol R31
01A2 E80F add R30,R24
01A4 F91F adc R31,R25
01A6 2080 ldd R2,z+0
01A8 20920100 sts _g_cReturnLongPressKeyNum,R2
01AC .dbline 292
01AC ;
01AC ; s_cKeyBUFFCounter--;
01AC 80910600 lds R24,_s_cKeyBUFFCounter
01B0 8150 subi R24,1
01B2 80930600 sts _s_cKeyBUFFCounter,R24
01B6 .dbline 293
01B6 ; s_cKeyBUFFHeadPoint++;
01B6 80910700 lds R24,_s_cKeyBUFFHeadPoint
01BA 8F5F subi R24,255 ; addi 1
01BC 80930700 sts _s_cKeyBUFFHeadPoint,R24
01C0 .dbline 294
01C0 ; if (s_cKeyBUFFHeadPoint == KEY_BUFF_SIZE)
01C0 8830 cpi R24,8
01C2 19F4 brne L27
01C4 X15:
01C4 .dbline 295
01C4 ; {
01C4 .dbline 296
01C4 ; s_cKeyBUFFHeadPoint = 0;
01C4 2224 clr R2
01C6 20920700 sts _s_cKeyBUFFHeadPoint,R2
01CA .dbline 297
01CA ; }
01CA L27:
01CA .dbline 299
01CA ;
01CA ; return TRUE;
01CA 01E0 ldi R16,1
01CC .dbline -2
01CC L23:
01CC .dbline 0 ; func end
01CC 0895 ret
01CE .dbend
.area bss(ram, con, rel)
0000 .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_UseKey.c
0000 _s_cKeyBUFF:
0000 .blkb 16
0010 .dbsym s s_cKeyBUFF _s_cKeyBUFF A[16:8:2]c
0010 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -