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

📄 menu_implement.s

📁 LCD1602键盘显示模块实例
💻 S
📖 第 1 页 / 共 2 页
字号:
	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 + -