📄 menu_implement.s
字号:
sts _s_pCurrentMenuItem,R2
.dbline 177
; }
.dbline 178
; break;
xjmp L26
L33:
.dbline 180
; case KEY_DOWN:
; if (s_pDISPMenuItem == s_pCurrentMenuItem)
lds R2,_s_pCurrentMenuItem
lds R3,_s_pCurrentMenuItem+1
lds R4,_s_pDISPMenuItem
lds R5,_s_pDISPMenuItem+1
cp R4,R2
cpc R5,R3
brne L34
X18:
.dbline 181
; {
.dbline 182
; if (s_pCurrentMenuItem->pNext != NULL)
movw R30,R2
adiw R30,11
lpm R2,Z+
lpm R3,Z
tst R2
brne X19
tst R3
brne X34
xjmp L26
X34:
X19:
.dbline 183
; {
.dbline 184
; s_pCurrentMenuItem = s_pCurrentMenuItem->pNext;
lds R30,_s_pCurrentMenuItem
lds R31,_s_pCurrentMenuItem+1
adiw R30,11
lpm R2,Z+
lpm R3,Z
sts _s_pCurrentMenuItem+1,R3
sts _s_pCurrentMenuItem,R2
.dbline 185
; }
.dbline 186
; }
xjmp L26
L34:
.dbline 188
; else
; {
.dbline 189
; s_pDISPMenuItem = s_pCurrentMenuItem;
lds R2,_s_pCurrentMenuItem
lds R3,_s_pCurrentMenuItem+1
sts _s_pDISPMenuItem+1,R3
sts _s_pDISPMenuItem,R2
.dbline 190
; if (s_pCurrentMenuItem->pNext != NULL)
movw R30,R2
adiw R30,11
lpm R2,Z+
lpm R3,Z
tst R2
brne X20
tst R3
brne X35
xjmp L26
X35:
X20:
.dbline 191
; {
.dbline 192
; s_pCurrentMenuItem = s_pCurrentMenuItem->pNext;
lds R30,_s_pCurrentMenuItem
lds R31,_s_pCurrentMenuItem+1
adiw R30,11
lpm R2,Z+
lpm R3,Z
sts _s_pCurrentMenuItem+1,R3
sts _s_pCurrentMenuItem,R2
.dbline 193
; }
.dbline 194
; }
.dbline 195
; break;
xjmp L26
L40:
.dbline 199
; case KEY_RIGHT:
; case KEY_5:
; case KEY_ENTER:
; if (s_pCurrentMenuItem->pChild != NULL)
lds R30,_s_pCurrentMenuItem
lds R31,_s_pCurrentMenuItem+1
adiw R30,7
lpm R2,Z+
lpm R3,Z
tst R2
brne X21
tst R3
breq L41
X21:
.dbline 200
; {
.dbline 201
; s_pCurrentMenuItem = s_pCurrentMenuItem->pChild;
lds R30,_s_pCurrentMenuItem
lds R31,_s_pCurrentMenuItem+1
adiw R30,7
lpm R2,Z+
lpm R3,Z
sts _s_pCurrentMenuItem+1,R3
sts _s_pCurrentMenuItem,R2
.dbline 202
; s_pDISPMenuItem = s_pCurrentMenuItem;
sts _s_pDISPMenuItem+1,R3
sts _s_pDISPMenuItem,R2
.dbline 203
; }
xjmp L26
L41:
.dbline 204
; else if (s_pCurrentMenuItem->fnTask != NULL)
lds R30,_s_pCurrentMenuItem
lds R31,_s_pCurrentMenuItem+1
adiw R30,3
lpm R2,Z+
lpm R3,Z
tst R2
brne X22
tst R3
breq L43
X22:
.dbline 205
; {
.dbline 206
; (s_pCurrentMenuItem->fnTask)(); //调用函数
lds R20,_s_pCurrentMenuItem
lds R21,_s_pCurrentMenuItem+1
subi R20,253 ; offset = 3
sbci R21,255
movw R30,R20
lpm R0,Z+
lpm R1,Z
movw R30,R0
xcall xicallx
.dbline 207
; }
xjmp L26
L43:
.dbline 209
; else
; {
.dbline 210
; CLS;
xcall _LCDWaitForReady
.dbline 210
ldi R16,1
xcall _LCDSendCommand
.dbline 210
xcall _LCDWaitForReady
.dbline 210
ldi R16,2
xcall _LCDSendCommand
.dbline 210
.dbline 211
; LOCATE(1,2);
ldi R18,1
clr R16
xcall _LCDSetXY
.dbline 211
.dbline 212
; PRINT("PRESS ANY KEY...");
ldi R16,<L6
ldi R17,>L6
xcall _LCDDisplayString
.dbline 212
xjmp L46
L45:
.dbline 214
; while(!Get_Key_Code())
; {
.dbline 215
; Flash("ERROR: NULL ITEM!",' ',1,1);
ldi R24,1
std y+2,R24
std y+0,R24
ldi R18,32
ldi R16,<L48
ldi R17,>L48
xcall _Flash
.dbline 216
; }
L46:
.dbline 213
xcall _Get_Key_Code
mov R10,R16
tst R16
breq L45
X23:
.dbline 217
; CLS
xcall _LCDWaitForReady
.dbline 217
ldi R16,1
xcall _LCDSendCommand
.dbline 217
xcall _LCDWaitForReady
.dbline 217
ldi R16,2
xcall _LCDSendCommand
.dbline 218
; }
.dbline 219
; break;
xjmp L26
L49:
.dbline 221
; case KEY_LEFT:
; if (s_pCurrentMenuItem->pParent != NULL)
lds R30,_s_pCurrentMenuItem
lds R31,_s_pCurrentMenuItem+1
adiw R30,5
lpm R2,Z+
lpm R3,Z
tst R2
brne X24
tst R3
breq L26
X24:
.dbline 222
; {
.dbline 223
; s_pCurrentMenuItem = s_pCurrentMenuItem->pParent;
lds R30,_s_pCurrentMenuItem
lds R31,_s_pCurrentMenuItem+1
adiw R30,5
lpm R2,Z+
lpm R3,Z
sts _s_pCurrentMenuItem+1,R3
sts _s_pCurrentMenuItem,R2
.dbline 224
; s_pDISPMenuItem = s_pCurrentMenuItem;
sts _s_pDISPMenuItem+1,R3
sts _s_pDISPMenuItem,R2
.dbline 225
; }
.dbline 226
; break;
.dbline 228
; default:
; break;
L26:
.dbline 232
; }
;
; //检测长按键
; switch (g_cReturnLongPressKeyNum)
lds R20,_g_cReturnLongPressKeyNum
cpi R20,4
breq L56
X25:
xjmp L54
L56:
.dbline 235
; {
; case KEY_LEFT: //长按LEFT键返回根目录
; s_pCurrentMenuItem = s_pMenuRoot;
lds R2,_s_pMenuRoot
lds R3,_s_pMenuRoot+1
sts _s_pCurrentMenuItem+1,R3
sts _s_pCurrentMenuItem,R2
.dbline 236
; s_pDISPMenuItem = s_pCurrentMenuItem;
lds R2,_s_pCurrentMenuItem
lds R3,_s_pCurrentMenuItem+1
sts _s_pDISPMenuItem+1,R3
sts _s_pDISPMenuItem,R2
.dbline 237
; break;
.dbline 239
; default:
; break;
L54:
.dbline 241
; }
; }
L23:
.dbline 243
;
; return TRUE;
ldi R16,1
.dbline -2
L7:
.dbline 0 ; func end
adiw R28,3
xjmp pop_xgset300C
.dbend
.dbfunc s Show_Menu _Show_Menu fV
; cHandPOS -> R20
; pStart -> R22,R23
.even
_Show_Menu:
xcall push_xgsetF000
mov R20,R18
movw R22,R16
sbiw R28,3
.dbline -1
.dbline 253
; }
;
; /***********************************************************
; * 函数说明:目录打印函数 *
; * 输入: 要显示的起始目录条目、光标位置 *
; * 输出: 无 *
; * 调用函数:LOCATE() PRINT() *
; ***********************************************************/
; static void Show_Menu(const MENU_ITEM *pStart,uint8 cHandPOS)
; {
.dbline 255
;
; if (pStart == NULL)
cpi R22,0
cpc R22,R23
brne L58
X36:
.dbline 256
; {
.dbline 257
; CLS;
xcall _LCDWaitForReady
.dbline 257
ldi R16,1
xcall _LCDSendCommand
.dbline 257
xcall _LCDWaitForReady
.dbline 257
ldi R16,2
xcall _LCDSendCommand
.dbline 257
.dbline 258
; LOCATE(1,2);
ldi R18,1
clr R16
xcall _LCDSetXY
.dbline 258
.dbline 259
; PRINT("PRESS ANY KEY...");
ldi R16,<L6
ldi R17,>L6
xcall _LCDDisplayString
.dbline 259
xjmp L61
L60:
.dbline 261
; while(!Get_Key_Code())
; {
.dbline 262
; Flash("ERROR: NO MENU!",' ',1,1);
ldi R24,1
std y+2,R24
std y+0,R24
ldi R18,32
ldi R16,<L63
ldi R17,>L63
xcall _Flash
.dbline 263
; }
L61:
.dbline 260
xcall _Get_Key_Code
tst R16
breq L60
X37:
.dbline 264
; return ;
xjmp L57
L58:
.dbline 267
; }
;
; LOCATE(4,1);
clr R18
ldi R16,3
xcall _LCDSetXY
.dbline 267
.dbline 268
; PRINT(pStart->String);
movw R30,R22
lpm R16,Z+
lpm R17,Z
xcall _LCDDisplayString
.dbline 268
.dbline 270
;
; if (pStart->pNext != NULL)
movw R30,R22
adiw R30,11
lpm R2,Z+
lpm R3,Z
tst R2
brne X38
tst R3
breq L64
X38:
.dbline 271
; {
.dbline 272
; LOCATE(4,2);
ldi R18,1
ldi R16,3
xcall _LCDSetXY
.dbline 272
.dbline 273
; PRINT(pStart->pNext->String);
movw R30,R22
adiw R30,11
lpm R0,Z+
lpm R1,Z
movw R30,R0
lpm R16,Z+
lpm R17,Z
xcall _LCDDisplayString
.dbline 273
.dbline 275
;
; LOCATE(2,((cHandPOS-1) & 0x01)+1);
mov R18,R20
subi R18,1
andi R18,1
subi R18,255 ; addi 1
subi R18,1
ldi R16,1
xcall _LCDSetXY
.dbline 275
.dbline 276
; PRINT(">");
ldi R16,<L66
ldi R17,>L66
xcall _LCDDisplayString
.dbline 276
.dbline 277
; }
xjmp L65
L64:
.dbline 279
; else
; {
.dbline 280
; LOCATE(2,1);
clr R18
ldi R16,1
xcall _LCDSetXY
.dbline 280
.dbline 281
; PRINT(">");
ldi R16,<L66
ldi R17,>L66
xcall _LCDDisplayString
.dbline 281
.dbline 282
; }
L65:
.dbline -2
L57:
.dbline 0 ; func end
adiw R28,3
xjmp pop_xgsetF000
.dbsym r cHandPOS 20 c
.dbsym r pStart 22 pkS[Menu_Item]
.dbend
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
L66:
.blkb 2
.area idata
.byte 62,0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
L63:
.blkb 16
.area idata
.byte 'E,'R,'R,'O,'R,58,32,'N,'O,32,'M,'E,'N,'U,33,0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
L48:
.blkb 18
.area idata
.byte 'E,'R,'R,'O,'R,58,32,'N,'U,'L,'L,32,'I,'T,'E,'M
.byte 33,0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
L6:
.blkb 17
.area idata
.byte 'P,'R,'E,'S,'S,32,'A,'N,'Y,32,'K,'E,'Y,46,46,46
.byte 0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
L5:
.blkb 84
.area idata
.byte 'N,'a,'t,'i,'o,'n,'a,'l,32,'U,'n,'d,'e,'r,'g,'r
.byte 'a,'d,'u,'t,'e,32,'E,'l,'e,'c,'t,'r,'o,'n,'i,'c
.byte 32,'D,'e,'s,'i,'g,'n,32,'C,'o,'n,'t,'e,'s,'t,32
.byte 50,48,48,56,32,32,32,32,'D,'a,'r,'e,32,'t,'o,32
.byte 'C,'r,'e,'a,'t,'e,32,38,32,'E,'n,'j,'o,'y,33,32
.byte 32,32,32,0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
L4:
.blkb 2
.area idata
.byte 93,0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
L3:
.blkb 2
.area idata
.byte 91,0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -