📄 menu.lis
字号:
0318 0197 sbiw R24,1
031A FA01 movw R30,R20
031C B296 adiw R30,34
031E E817 cp R30,R24
0320 F907 cpc R31,R25
0322 E9F4 brne L47
0324 .dbline 136
0324 ; { GUI_RLine(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, yy, disp_color);
0324 .dbline 136
0324 20900000 lds R2,_disp_color
0328 2A82 std y+2,R2
032A B982 std y+1,R11
032C A882 std y+0,R10
032E FB01 movw R30,R22
0330 2281 ldd R18,z+2
0332 3381 ldd R19,z+3
0334 2A5E subi R18,234 ; offset = 22
0336 3F4F sbci R19,255
0338 8A01 movw R16,R20
033A 0052 subi R16,32
033C 1040 sbci R17,0
033E 0E940000 xcall _GUI_RLine
0342 .dbline 137
0342 ; GUI_HLine(xx-(SMENU_WIDTH-MMENU_WIDTH), yy, xx+MMENU_WIDTH, disp_color);
0342 20900000 lds R2,_disp_color
0346 2A82 std y+2,R2
0348 CA01 movw R24,R20
034A 8296 adiw R24,34
034C 9983 std y+1,R25
034E 8883 std y+0,R24
0350 9501 movw R18,R10
0352 8A01 movw R16,R20
0354 0052 subi R16,32
0356 1040 sbci R17,0
0358 0E940000 xcall _GUI_HLine
035C .dbline 139
035C ;
035C ; }
035C 13C0 xjmp L48
035E L47:
035E .dbline 141
035E ; else
035E ; { GUI_Rectangle(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, xx+MMENU_WIDTH, yy, disp_color);
035E .dbline 141
035E 20900000 lds R2,_disp_color
0362 2C82 std y+4,R2
0364 BB82 std y+3,R11
0366 AA82 std y+2,R10
0368 CA01 movw R24,R20
036A 8296 adiw R24,34
036C 9983 std y+1,R25
036E 8883 std y+0,R24
0370 FB01 movw R30,R22
0372 2281 ldd R18,z+2
0374 3381 ldd R19,z+3
0376 2A5E subi R18,234 ; offset = 22
0378 3F4F sbci R19,255
037A 8A01 movw R16,R20
037C 0052 subi R16,32
037E 1040 sbci R17,0
0380 0E940000 xcall _GUI_Rectangle
0384 .dbline 142
0384 ; }
0384 L48:
0384 .dbline 143
0384 ; GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);
0384 20900000 lds R2,_back_color
0388 2A82 std y+2,R2
038A CA01 movw R24,R20
038C 8296 adiw R24,34
038E 0197 sbiw R24,1
0390 9983 std y+1,R25
0392 8883 std y+0,R24
0394 FB01 movw R30,R22
0396 2281 ldd R18,z+2
0398 3381 ldd R19,z+3
039A 2A5E subi R18,234 ; offset = 22
039C 3F4F sbci R19,255
039E 8A01 movw R16,R20
03A0 0F5F subi R16,255 ; offset = 1
03A2 1F4F sbci R17,255
03A4 0E940000 xcall _GUI_HLine
03A8 .dbline 145
03A8 ;
03A8 ; xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
03A8 4052 subi R20,32
03AA 5040 sbci R21,0
03AC .dbline 146
03AC ; }
03AC L44:
03AC .dbline 149
03AC ;
03AC ; /* 显示菜单文字 */
03AC ; xx++;
03AC 4F5F subi R20,255 ; offset = 1
03AE 5F4F sbci R21,255
03B0 .dbline 150
03B0 ; yy = mwin->y + 22 + 2;
03B0 FB01 movw R30,R22
03B2 8281 ldd R24,z+2
03B4 9381 ldd R25,z+3
03B6 4896 adiw R24,24
03B8 5C01 movw R10,R24
03BA .dbline 151
03BA ; for(i=0; i<(men->no); i++)
03BA 6627 clr R22
03BC 59C0 xjmp L52
03BE L49:
03BE .dbline 152
03BE ; { if( i == (men->state) ) // 判断所选择的菜单项
03BE .dbline 152
03BE F601 movw R30,R12
03C0 2488 ldd R2,z+20
03C2 6215 cp R22,R2
03C4 59F5 brne L53
03C6 .dbline 153
03C6 ; { /* 显示背景色 */
03C6 .dbline 154
03C6 ; GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
03C6 20900000 lds R2,_disp_color
03CA 2C82 std y+4,R2
03CC C501 movw R24,R10
03CE 0A96 adiw R24,10
03D0 9B83 std y+3,R25
03D2 8A83 std y+2,R24
03D4 CA01 movw R24,R20
03D6 8E5B subi R24,190 ; offset = 66
03D8 9F4F sbci R25,255
03DA 0297 sbiw R24,2
03DC 9983 std y+1,R25
03DE 8883 std y+0,R24
03E0 9501 movw R18,R10
03E2 8A01 movw R16,R20
03E4 0E940000 xcall _GUI_RectangleFill
03E8 .dbline 156
03E8 ; /* 显示菜单字符 */
03E8 ; GUI_ExchangeColor();
03E8 0E940000 xcall _GUI_ExchangeColor
03EC .dbline 157
03EC ; GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 书写子菜单文字
03EC 88E0 ldi R24,8
03EE 8A83 std y+2,R24
03F0 82E0 ldi R24,2
03F2 869F mul R24,R22
03F4 F001 movw R30,R0
03F6 C601 movw R24,R12
03F8 0496 adiw R24,4
03FA E80F add R30,R24
03FC F91F adc R31,R25
03FE 2080 ldd R2,z+0
0400 3180 ldd R3,z+1
0402 3982 std y+1,R3
0404 2882 std y+0,R2
0406 9501 movw R18,R10
0408 2F5F subi R18,255 ; offset = 1
040A 3F4F sbci R19,255
040C 8A01 movw R16,R20
040E 0F5F subi R16,255 ; offset = 1
0410 1F4F sbci R17,255
0412 0E940000 xcall _GUI_PutNoStr
0416 .dbline 158
0416 ; GUI_ExchangeColor();
0416 0E940000 xcall _GUI_ExchangeColor
041A .dbline 159
041A ; }
041A 26C0 xjmp L54
041C L53:
041C .dbline 161
041C ; else
041C ; { /* 显示背景色 */
041C .dbline 162
041C ; GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
041C 20900000 lds R2,_back_color
0420 2C82 std y+4,R2
0422 C501 movw R24,R10
0424 0A96 adiw R24,10
0426 9B83 std y+3,R25
0428 8A83 std y+2,R24
042A CA01 movw R24,R20
042C 8E5B subi R24,190 ; offset = 66
042E 9F4F sbci R25,255
0430 0297 sbiw R24,2
0432 9983 std y+1,R25
0434 8883 std y+0,R24
0436 9501 movw R18,R10
0438 8A01 movw R16,R20
043A 0E940000 xcall _GUI_RectangleFill
043E .dbline 164
043E ; /* 显示菜单字符 */
043E ; GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 书写子菜单文字
043E 88E0 ldi R24,8
0440 8A83 std y+2,R24
0442 82E0 ldi R24,2
0444 869F mul R24,R22
0446 F001 movw R30,R0
0448 C601 movw R24,R12
044A 0496 adiw R24,4
044C E80F add R30,R24
044E F91F adc R31,R25
0450 2080 ldd R2,z+0
0452 3180 ldd R3,z+1
0454 3982 std y+1,R3
0456 2882 std y+0,R2
0458 9501 movw R18,R10
045A 2F5F subi R18,255 ; offset = 1
045C 3F4F sbci R19,255
045E 8A01 movw R16,R20
0460 0F5F subi R16,255 ; offset = 1
0462 1F4F sbci R17,255
0464 0E940000 xcall _GUI_PutNoStr
0468 .dbline 165
0468 ; }
0468 L54:
0468 .dbline 167
0468 C501 movw R24,R10
046A 0B96 adiw R24,11
046C 5C01 movw R10,R24
046E .dbline 168
046E L50:
046E .dbline 151
046E 6395 inc R22
0470 L52:
0470 .dbline 151
0470 F601 movw R30,R12
0472 2380 ldd R2,z+3
0474 6215 cp R22,R2
0476 08F4 brsh X2
0478 A2CF xjmp L49
047A X2:
047A .dbline 170
047A ;
047A ; yy += 11;
047A ; }
047A ;
047A ; return(1);
047A 01E0 ldi R16,1
047C .dbline -2
047C L38:
047C 2596 adiw R28,5
047E 0E940000 xcall pop_gset4
0482 .dbline 0 ; func end
0482 0895 ret
0484 .dbsym r mwin 22 pX
0484 .dbsym r xx 20 i
0484 .dbsym r i 22 c
0484 .dbsym r yy 10 i
0484 .dbsym r men 12 pX
0484 .dbend
0484 .dbfunc e GUI_SMenuSelect _GUI_SMenuSelect fV
0484 ; mwin -> R14,R15
0484 ; yy -> R22
0484 ; xx -> R20
0484 ; new_no -> R12
0484 ; old_no -> y+15
0484 ; men -> R10,R11
.even
0484 _GUI_SMenuSelect::
0484 3A93 st -y,r19
0486 2A93 st -y,r18
0488 0E940000 xcall push_gset5
048C 5801 movw R10,R16
048E 2597 sbiw R28,5
0490 C988 ldd R12,y+17
0492 .dbline -1
0492 .dbline 184
0492 ; }
0492 ;
0492 ;
0492 ;
0492 ; /****************************************************************************
0492 ; * 名称:GUI_SMenuSelect()
0492 ; * 功能:选择新的子菜单。
0492 ; * 入口参数:men 子菜单句柄
0492 ; * old_no 原先选择的子菜单项
0492 ; * new_no 现要选择的子菜单项
0492 ; * 出口参数:无
0492 ; ****************************************************************************/
0492 ; void GUI_SMenuSelect(SMENU *men, uint8 old_no, uint8 new_no)
0492 ; { WINDOWS *mwin;
0492 .dbline 188
0492 ; uint8 xx, yy;
0492 ;
0492 ; /* 参数过滤 */
0492 ; if(old_no==new_no) return;
0492 0F84 ldd R0,y+15
0494 0C14 cp R0,R12
0496 09F4 brne L56
0498 .dbline 188
0498 92C0 xjmp L55
049A L56:
049A .dbline 189
049A ; xx = men->no;
049A F501 movw R30,R10
049C 4381 ldd R20,z+3
049E .dbline 190
049E 0F84 ldd R0,y+15
04A0 4015 cp R20,R0
04A2 10F0 brlo L60
04A4 4C15 cp R20,R12
04A6 08F4 brsh L58
04A8 L60:
04A8 .dbline 190
04A8 ; if( (old_no>xx) || (new_no>xx) ) return;
04A8 8AC0 xjmp L55
04AA L58:
04AA .dbline 193
04AA ;
04AA ; /* 设置新的选择的子菜单项 */
04AA ; men->state = new_no;
04AA F501 movw R30,R10
04AC C48A std z+20,R12
04AE .dbline 196
04AE ;
04AE ; /* 进行菜单反相显示 */
04AE ; mwin = men->win;
04AE F501 movw R30,R10
04B0 E080 ldd R14,z+0
04B2 F180 ldd R15,z+1
04B4 .dbline 197
04B4 ; xx = mwin->x;
04B4 F701 movw R30,R14
04B6 4081 ldd R20,z+0
04B8 .dbline 198
04B8 ; xx += (men->mmenu_no)*MMENU_WIDTH;
04B8 F501 movw R30,R10
04BA 2280 ldd R2,z+2
04BC 82E2 ldi R24,34
04BE 829D mul R24,R2
04C0 400D add R20,R0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -