📄 menu.lis
字号:
04C2 .dbline 199
04C2 ; if( (xx+SMENU_WIDTH) > (mwin->x + mwin->with - 1) )
04C2 F701 movw R30,R14
04C4 2480 ldd R2,z+4
04C6 3580 ldd R3,z+5
04C8 F701 movw R30,R14
04CA 8081 ldd R24,z+0
04CC 9181 ldd R25,z+1
04CE 820D add R24,R2
04D0 931D adc R25,R3
04D2 0197 sbiw R24,1
04D4 E42F mov R30,R20
04D6 FF27 clr R31
04D8 EE5B subi R30,190 ; offset = 66
04DA FF4F sbci R31,255
04DC 8E17 cp R24,R30
04DE 9F07 cpc R25,R31
04E0 08F4 brsh L61
04E2 .dbline 200
04E2 ; { /* 以右下拉为原则显示子菜单,所以xx设置在左端 */
04E2 .dbline 201
04E2 ; xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
04E2 4052 subi R20,32
04E4 .dbline 202
04E4 ; }
04E4 L61:
04E4 .dbline 203
04E4 ; xx++;
04E4 4395 inc R20
04E6 .dbline 206
04E6 ;
04E6 ; /* 取消原子菜单选择 */
04E6 ; yy = mwin->y + 22 + 2;
04E6 F701 movw R30,R14
04E8 6281 ldd R22,z+2
04EA 685E subi R22,232 ; offset = 24
04EC 7F4F sbci R23,255
04EE .dbline 207
04EE ; yy += old_no*11;
04EE 8BE0 ldi R24,11
04F0 0F84 ldd R0,y+15
04F2 809D mul R24,R0
04F4 600D add R22,R0
04F6 .dbline 208
04F6 ; GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
04F6 20900000 lds R2,_back_color
04FA 2C82 std y+4,R2
04FC 862F mov R24,R22
04FE 9927 clr R25
0500 0A96 adiw R24,10
0502 9B83 std y+3,R25
0504 8A83 std y+2,R24
0506 842F mov R24,R20
0508 9927 clr R25
050A 8E5B subi R24,190 ; offset = 66
050C 9F4F sbci R25,255
050E 0297 sbiw R24,2
0510 9983 std y+1,R25
0512 8883 std y+0,R24
0514 262F mov R18,R22
0516 3327 clr R19
0518 042F mov R16,R20
051A 1127 clr R17
051C 0E940000 xcall _GUI_RectangleFill
0520 .dbline 209
0520 ; GUI_PutNoStr(xx+1, yy+1, men->str[old_no], 8);
0520 88E0 ldi R24,8
0522 8A83 std y+2,R24
0524 82E0 ldi R24,2
0526 0F84 ldd R0,y+15
0528 809D mul R24,R0
052A F001 movw R30,R0
052C C501 movw R24,R10
052E 0496 adiw R24,4
0530 E80F add R30,R24
0532 F91F adc R31,R25
0534 2080 ldd R2,z+0
0536 3180 ldd R3,z+1
0538 3982 std y+1,R3
053A 2882 std y+0,R2
053C 262F mov R18,R22
053E 3327 clr R19
0540 2F5F subi R18,255 ; offset = 1
0542 3F4F sbci R19,255
0544 042F mov R16,R20
0546 1127 clr R17
0548 0F5F subi R16,255 ; offset = 1
054A 1F4F sbci R17,255
054C 0E940000 xcall _GUI_PutNoStr
0550 .dbline 211
0550 ; /* 选择新的子菜单 */
0550 ; yy = mwin->y + 22 + 2;
0550 F701 movw R30,R14
0552 6281 ldd R22,z+2
0554 685E subi R22,232 ; offset = 24
0556 7F4F sbci R23,255
0558 .dbline 212
0558 ; yy += new_no*11;
0558 8BE0 ldi R24,11
055A 8C9D mul R24,R12
055C 600D add R22,R0
055E .dbline 213
055E ; GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
055E 20900000 lds R2,_disp_color
0562 2C82 std y+4,R2
0564 862F mov R24,R22
0566 9927 clr R25
0568 0A96 adiw R24,10
056A 9B83 std y+3,R25
056C 8A83 std y+2,R24
056E 842F mov R24,R20
0570 9927 clr R25
0572 8E5B subi R24,190 ; offset = 66
0574 9F4F sbci R25,255
0576 0297 sbiw R24,2
0578 9983 std y+1,R25
057A 8883 std y+0,R24
057C 262F mov R18,R22
057E 3327 clr R19
0580 042F mov R16,R20
0582 1127 clr R17
0584 0E940000 xcall _GUI_RectangleFill
0588 .dbline 214
0588 ; GUI_ExchangeColor();
0588 0E940000 xcall _GUI_ExchangeColor
058C .dbline 215
058C ; GUI_PutNoStr(xx+1, yy+1, men->str[new_no], 8);
058C 88E0 ldi R24,8
058E 8A83 std y+2,R24
0590 82E0 ldi R24,2
0592 8C9D mul R24,R12
0594 F001 movw R30,R0
0596 C501 movw R24,R10
0598 0496 adiw R24,4
059A E80F add R30,R24
059C F91F adc R31,R25
059E 2080 ldd R2,z+0
05A0 3180 ldd R3,z+1
05A2 3982 std y+1,R3
05A4 2882 std y+0,R2
05A6 262F mov R18,R22
05A8 3327 clr R19
05AA 2F5F subi R18,255 ; offset = 1
05AC 3F4F sbci R19,255
05AE 042F mov R16,R20
05B0 1127 clr R17
05B2 0F5F subi R16,255 ; offset = 1
05B4 1F4F sbci R17,255
05B6 0E940000 xcall _GUI_PutNoStr
05BA .dbline 216
05BA ; GUI_ExchangeColor();
05BA 0E940000 xcall _GUI_ExchangeColor
05BE .dbline -2
05BE L55:
05BE 2596 adiw R28,5
05C0 0E940000 xcall pop_gset5
05C4 2296 adiw R28,2
05C6 .dbline 0 ; func end
05C6 0895 ret
05C8 .dbsym r mwin 14 pX
05C8 .dbsym r yy 22 c
05C8 .dbsym r xx 20 c
05C8 .dbsym r new_no 12 c
05C8 .dbsym l old_no 15 c
05C8 .dbsym r men 10 pX
05C8 .dbend
05C8 .dbfunc e GUI_SMenuHide _GUI_SMenuHide fc
05C8 ; yy -> R10
05C8 ; xx -> R20
05C8 ; mwin -> R22,R23
05C8 ; men -> R12,R13
.even
05C8 _GUI_SMenuHide::
05C8 0E940000 xcall push_gset4
05CC 6801 movw R12,R16
05CE 2597 sbiw R28,5
05D0 .dbline -1
05D0 .dbline 228
05D0 ; }
05D0 ;
05D0 ;
05D0 ;
05D0 ; /****************************************************************************
05D0 ; * 名称:GUI_SMenuHide()
05D0 ; * 功能:消隐子菜单项。
05D0 ; * 入口参数:men 子菜单句柄
05D0 ; * 出口参数:返回0表示操作失败,返回1表示操作成功
05D0 ; ****************************************************************************/
05D0 ; uint8 GUI_SMenuHide(SMENU *men)
05D0 ; { WINDOWS *mwin;
05D0 .dbline 231
05D0 ; uint8 xx, yy;
05D0 ;
05D0 ; mwin = men->win;
05D0 F601 movw R30,R12
05D2 6081 ldd R22,z+0
05D4 7181 ldd R23,z+1
05D6 .dbline 233
05D6 ; /* 判断是否可以显示主菜单 */
05D6 ; if( (mwin->hight)<50 ) return(0);
05D6 FB01 movw R30,R22
05D8 8681 ldd R24,z+6
05DA 9781 ldd R25,z+7
05DC 8233 cpi R24,50
05DE E0E0 ldi R30,0
05E0 9E07 cpc R25,R30
05E2 10F4 brsh L64
05E4 .dbline 233
05E4 0027 clr R16
05E6 C9C0 xjmp L63
05E8 L64:
05E8 .dbline 234
05E8 ; if( (mwin->with)<50 ) return(0);
05E8 FB01 movw R30,R22
05EA 8481 ldd R24,z+4
05EC 9581 ldd R25,z+5
05EE 8233 cpi R24,50
05F0 E0E0 ldi R30,0
05F2 9E07 cpc R25,R30
05F4 10F4 brsh L66
05F6 .dbline 234
05F6 0027 clr R16
05F8 C0C0 xjmp L63
05FA L66:
05FA .dbline 237
05FA ;
05FA ; /* 画菜子单项。下拉子菜单,以向左下拉为原则,若右边溢出则以右下拉显示 */
05FA ; xx = mwin->x;
05FA FB01 movw R30,R22
05FC 4081 ldd R20,z+0
05FE .dbline 238
05FE ; xx += (men->mmenu_no)*MMENU_WIDTH;
05FE F601 movw R30,R12
0600 2280 ldd R2,z+2
0602 82E2 ldi R24,34
0604 829D mul R24,R2
0606 400D add R20,R0
0608 .dbline 239
0608 ; yy = mwin->y + 22;
0608 FB01 movw R30,R22
060A 8281 ldd R24,z+2
060C 9381 ldd R25,z+3
060E 4696 adiw R24,22
0610 A82E mov R10,R24
0612 .dbline 240
0612 ; yy += (men->no) * 11 + 2;
0612 F601 movw R30,R12
0614 2380 ldd R2,z+3
0616 8BE0 ldi R24,11
0618 829D mul R24,R2
061A 802D mov R24,R0
061C 8E5F subi R24,254 ; addi 2
061E A80E add R10,R24
0620 .dbline 241
0620 ; if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) )
0620 FB01 movw R30,R22
0622 2480 ldd R2,z+4
0624 3580 ldd R3,z+5
0626 FB01 movw R30,R22
0628 8081 ldd R24,z+0
062A 9181 ldd R25,z+1
062C 820D add R24,R2
062E 931D adc R25,R3
0630 0197 sbiw R24,1
0632 E42F mov R30,R20
0634 FF27 clr R31
0636 EE5B subi R30,190 ; offset = 66
0638 FF4F sbci R31,255
063A 8E17 cp R24,R30
063C 9F07 cpc R25,R31
063E 08F4 brsh X3
0640 48C0 xjmp L68
0642 X3:
0642 .dbline 242
0642 ; { /* 以左下拉为原则显示子菜单 */
0642 .dbline 243
0642 ; if( (men->mmenu_no) == 0 )
0642 F601 movw R30,R12
0644 2280 ldd R2,z+2
0646 2220 tst R2
0648 C9F4 brne L70
064A .dbline 244
064A ; { GUI_RectangleFill(xx+1, mwin->y + 22+1, xx+SMENU_WIDTH, yy, back_color);
064A .dbline 244
064A 20900000 lds R2,_back_color
064E 2C82 std y+4,R2
0650 2A2C mov R2,R10
0652 3324 clr R3
0654 3B82 std y+3,R3
0656 2A82 std y+2,R2
0658 842F mov R24,R20
065A 9927 clr R25
065C 8E5B subi R24,190 ; offset = 66
065E 9F4F sbci R25,255
0660 9983 std y+1,R25
0662 8883 std y+0,R24
0664 FB01 movw R30,R22
0666 2281 ldd R18,z+2
0668 3381 ldd R19,z+3
066A 295E subi R18,233 ; offset = 23
066C 3F4F sbci R19,255
066E 042F mov R16,R20
0670 1127 clr R17
0672 0F5F subi R16,255 ; offset = 1
0674 1F4F sbci R17,255
0676 0E940000 xcall _GUI_RectangleFill
067A .dbline 245
067A ; }
067A 16C0 xjmp L71
067C L70:
067C .dbline 247
067C ; else
067C ; { GUI_RectangleFill(xx, mwin->y + 22+1, xx+SMENU_WIDTH, yy, back_color);
067C .dbline 247
067C 20900000 lds R2,_back_color
0680 2C82 std y+4,R2
0682 2A2C mov R2,R10
0684 3324 clr R3
0686 3B82 std y+3,R3
0688 2A82 std y+2,R2
068A 842F mov R24,R20
068C 9927 clr R25
068E 8E5B subi R24,190 ; offset = 66
0690 9F4F sbci R25,255
0692 9983 std y+1,R25
0694 8883 std y+0,R24
0696 FB01 movw R30,R22
0698 2281 ldd R18,z+2
069A 3381 ldd R19,z+3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -