📄 menu.lis
字号:
017E .dbfunc e GUI_MMenuNSelect _GUI_MMenuNSelect fV
017E ; xx -> R20
017E ; mwin -> R22,R23
017E ; no -> R20
017E ; men -> R22,R23
.even
017E _GUI_MMenuNSelect::
017E 0E940000 xcall push_gset2
0182 422F mov R20,R18
0184 B801 movw R22,R16
0186 2397 sbiw R28,3
0188 .dbline -1
0188 .dbline 81
0188 ; }
0188 ;
0188 ;
0188 ; /****************************************************************************
0188 ; * 名称:GUI_MMenuNSelect()
0188 ; * 功能:取消当前主菜单,去除下划线。
0188 ; * 入口参数:men 主菜单句柄
0188 ; * no 所选的主菜单项
0188 ; * 出口参数:无
0188 ; ****************************************************************************/
0188 ; void GUI_MMenuNSelect(MMENU *men, uint8 no)
0188 ; { WINDOWS *mwin;
0188 .dbline 85
0188 ; uint8 xx;
0188 ;
0188 ; /* 参数过滤 */
0188 ; if( (men->no)==0 ) return;
0188 FB01 movw R30,R22
018A 2280 ldd R2,z+2
018C 2220 tst R2
018E 09F4 brne L30
0190 .dbline 85
0190 33C0 xjmp L29
0192 L30:
0192 .dbline 86
0192 ; if( no>(men->no) ) return;
0192 FB01 movw R30,R22
0194 2280 ldd R2,z+2
0196 2416 cp R2,R20
0198 08F4 brsh L32
019A .dbline 86
019A 2EC0 xjmp L29
019C L32:
019C .dbline 88
019C ;
019C ; mwin = men->win; // 取得窗口句柄
019C FB01 movw R30,R22
019E 6081 ldd R22,z+0
01A0 7181 ldd R23,z+1
01A2 .dbline 90
01A2 ; /* 判断是否可以显示主菜单 */
01A2 ; if( (mwin->hight)<50 ) return;
01A2 FB01 movw R30,R22
01A4 8681 ldd R24,z+6
01A6 9781 ldd R25,z+7
01A8 8233 cpi R24,50
01AA E0E0 ldi R30,0
01AC 9E07 cpc R25,R30
01AE 08F4 brsh L34
01B0 .dbline 90
01B0 23C0 xjmp L29
01B2 L34:
01B2 .dbline 91
01B2 ; if( (mwin->with)<50 ) return;
01B2 FB01 movw R30,R22
01B4 8481 ldd R24,z+4
01B6 9581 ldd R25,z+5
01B8 8233 cpi R24,50
01BA E0E0 ldi R30,0
01BC 9E07 cpc R25,R30
01BE 08F4 brsh L36
01C0 .dbline 91
01C0 1BC0 xjmp L29
01C2 L36:
01C2 .dbline 94
01C2 ;
01C2 ; /* 显示下划线 */
01C2 ; xx = mwin->x + no*MMENU_WIDTH;
01C2 82E2 ldi R24,34
01C4 849F mul R24,R20
01C6 FB01 movw R30,R22
01C8 4081 ldd R20,z+0
01CA 400D add R20,R0
01CC 511D adc R21,R1
01CE .dbline 95
01CE ; GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, back_color);
01CE 20900000 lds R2,_back_color
01D2 2A82 std y+2,R2
01D4 842F mov R24,R20
01D6 9927 clr R25
01D8 8296 adiw R24,34
01DA 0197 sbiw R24,1
01DC 9983 std y+1,R25
01DE 8883 std y+0,R24
01E0 2281 ldd R18,z+2
01E2 3381 ldd R19,z+3
01E4 2A5E subi R18,234 ; offset = 22
01E6 3F4F sbci R19,255
01E8 2150 subi R18,1
01EA 3040 sbci R19,0
01EC 042F mov R16,R20
01EE 1127 clr R17
01F0 0F5F subi R16,255 ; offset = 1
01F2 1F4F sbci R17,255
01F4 0E940000 xcall _GUI_HLine
01F8 .dbline -2
01F8 L29:
01F8 2396 adiw R28,3
01FA 0E940000 xcall pop_gset2
01FE .dbline 0 ; func end
01FE 0895 ret
0200 .dbsym r xx 20 c
0200 .dbsym r mwin 22 pX
0200 .dbsym r no 20 c
0200 .dbsym r men 22 pX
0200 .dbend
0200 .dbfunc e GUI_SMenuDraw _GUI_SMenuDraw fc
0200 ; mwin -> R22,R23
0200 ; xx -> R20,R21
0200 ; i -> R22
0200 ; yy -> R10,R11
0200 ; men -> R12,R13
.even
0200 _GUI_SMenuDraw::
0200 0E940000 xcall push_gset4
0204 6801 movw R12,R16
0206 2597 sbiw R28,5
0208 .dbline -1
0208 .dbline 107
0208 ; }
0208 ;
0208 ;
0208 ;
0208 ; /****************************************************************************
0208 ; * 名称:GUI_SMenuDraw()
0208 ; * 功能:显示子菜单,加上边框。
0208 ; * 入口参数:men 子菜单句柄
0208 ; * 出口参数:返回0表示操作失败,返回1表示操作成功
0208 ; ****************************************************************************/
0208 ; uint8 GUI_SMenuDraw(SMENU *men)
0208 ; { WINDOWS *mwin;
0208 .dbline 111
0208 ; uint32 xx, yy;
0208 ; uint8 i;
0208 ;
0208 ; mwin = men->win;
0208 F601 movw R30,R12
020A 6081 ldd R22,z+0
020C 7181 ldd R23,z+1
020E .dbline 113
020E ; /* 判断是否可以显示主菜单 */
020E ; if( (mwin->hight)<50 ) return(0);
020E FB01 movw R30,R22
0210 8681 ldd R24,z+6
0212 9781 ldd R25,z+7
0214 8233 cpi R24,50
0216 E0E0 ldi R30,0
0218 9E07 cpc R25,R30
021A 10F4 brsh L39
021C .dbline 113
021C 0027 clr R16
021E 2EC1 xjmp L38
0220 L39:
0220 .dbline 114
0220 ; if( (mwin->with)<50 ) return(0);
0220 FB01 movw R30,R22
0222 8481 ldd R24,z+4
0224 9581 ldd R25,z+5
0226 8233 cpi R24,50
0228 E0E0 ldi R30,0
022A 9E07 cpc R25,R30
022C 10F4 brsh L41
022E .dbline 114
022E 0027 clr R16
0230 25C1 xjmp L38
0232 L41:
0232 .dbline 117
0232 ;
0232 ; /* 画菜子单项。下拉子菜单,以向左下拉为原则,若右边溢出则以右下拉显示 */
0232 ; xx = mwin->x;
0232 FB01 movw R30,R22
0234 4081 ldd R20,z+0
0236 5181 ldd R21,z+1
0238 .dbline 118
0238 ; xx += (men->mmenu_no)*MMENU_WIDTH;
0238 F601 movw R30,R12
023A 2280 ldd R2,z+2
023C 82E2 ldi R24,34
023E 829D mul R24,R2
0240 400D add R20,R0
0242 511D adc R21,R1
0244 .dbline 119
0244 ; yy = mwin->y + 22;
0244 FB01 movw R30,R22
0246 8281 ldd R24,z+2
0248 9381 ldd R25,z+3
024A 4696 adiw R24,22
024C 5C01 movw R10,R24
024E .dbline 120
024E ; yy += (men->no) * 11 + 2;
024E F601 movw R30,R12
0250 2380 ldd R2,z+3
0252 8BE0 ldi R24,11
0254 829D mul R24,R2
0256 C001 movw R24,R0
0258 0296 adiw R24,2
025A A80E add R10,R24
025C B91E adc R11,R25
025E .dbline 121
025E ; if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) )
025E FB01 movw R30,R22
0260 2480 ldd R2,z+4
0262 3580 ldd R3,z+5
0264 FB01 movw R30,R22
0266 8081 ldd R24,z+0
0268 9181 ldd R25,z+1
026A 820D add R24,R2
026C 931D adc R25,R3
026E 0197 sbiw R24,1
0270 FA01 movw R30,R20
0272 EE5B subi R30,190 ; offset = 66
0274 FF4F sbci R31,255
0276 8E17 cp R24,R30
0278 9F07 cpc R25,R31
027A 08F4 brsh X1
027C 45C0 xjmp L43
027E X1:
027E .dbline 122
027E ; { /* 以左下拉为原则显示子菜单 */
027E .dbline 123
027E ; if( (men->mmenu_no) == 0 )
027E F601 movw R30,R12
0280 2280 ldd R2,z+2
0282 2220 tst R2
0284 E1F4 brne L45
0286 .dbline 124
0286 ; { GUI_RLine(xx+SMENU_WIDTH, mwin->y + 22, yy, disp_color);
0286 .dbline 124
0286 20900000 lds R2,_disp_color
028A 2A82 std y+2,R2
028C B982 std y+1,R11
028E A882 std y+0,R10
0290 FB01 movw R30,R22
0292 2281 ldd R18,z+2
0294 3381 ldd R19,z+3
0296 2A5E subi R18,234 ; offset = 22
0298 3F4F sbci R19,255
029A 8A01 movw R16,R20
029C 0E5B subi R16,190 ; offset = 66
029E 1F4F sbci R17,255
02A0 0E940000 xcall _GUI_RLine
02A4 .dbline 125
02A4 ; GUI_HLine(xx, yy, xx+SMENU_WIDTH, disp_color);
02A4 20900000 lds R2,_disp_color
02A8 2A82 std y+2,R2
02AA CA01 movw R24,R20
02AC 8E5B subi R24,190 ; offset = 66
02AE 9F4F sbci R25,255
02B0 9983 std y+1,R25
02B2 8883 std y+0,R24
02B4 9501 movw R18,R10
02B6 8A01 movw R16,R20
02B8 0E940000 xcall _GUI_HLine
02BC .dbline 126
02BC ; }
02BC 12C0 xjmp L46
02BE L45:
02BE .dbline 128
02BE ; else
02BE ; { GUI_Rectangle(xx, mwin->y + 22, xx+SMENU_WIDTH, yy, disp_color);
02BE .dbline 128
02BE 20900000 lds R2,_disp_color
02C2 2C82 std y+4,R2
02C4 BB82 std y+3,R11
02C6 AA82 std y+2,R10
02C8 CA01 movw R24,R20
02CA 8E5B subi R24,190 ; offset = 66
02CC 9F4F sbci R25,255
02CE 9983 std y+1,R25
02D0 8883 std y+0,R24
02D2 FB01 movw R30,R22
02D4 2281 ldd R18,z+2
02D6 3381 ldd R19,z+3
02D8 2A5E subi R18,234 ; offset = 22
02DA 3F4F sbci R19,255
02DC 8A01 movw R16,R20
02DE 0E940000 xcall _GUI_Rectangle
02E2 .dbline 129
02E2 ; }
02E2 L46:
02E2 .dbline 130
02E2 ; GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);
02E2 20900000 lds R2,_back_color
02E6 2A82 std y+2,R2
02E8 CA01 movw R24,R20
02EA 8296 adiw R24,34
02EC 0197 sbiw R24,1
02EE 9983 std y+1,R25
02F0 8883 std y+0,R24
02F2 FB01 movw R30,R22
02F4 2281 ldd R18,z+2
02F6 3381 ldd R19,z+3
02F8 2A5E subi R18,234 ; offset = 22
02FA 3F4F sbci R19,255
02FC 8A01 movw R16,R20
02FE 0F5F subi R16,255 ; offset = 1
0300 1F4F sbci R17,255
0302 0E940000 xcall _GUI_HLine
0306 .dbline 132
0306 ;
0306 ; }
0306 52C0 xjmp L44
0308 L43:
0308 .dbline 134
0308 ; else
0308 ; { /* 以右下拉为原则 */
0308 .dbline 135
0308 ; if( (xx+MMENU_WIDTH) == (mwin->x + mwin->with - 1) )
0308 FB01 movw R30,R22
030A 2480 ldd R2,z+4
030C 3580 ldd R3,z+5
030E FB01 movw R30,R22
0310 8081 ldd R24,z+0
0312 9181 ldd R25,z+1
0314 820D add R24,R2
0316 931D adc R25,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -