📄 menu.s
字号:
.dbline 143
; GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);
lds R2,_back_color
std y+2,R2
movw R24,R20
adiw R24,34
sbiw R24,1
std y+1,R25
std y+0,R24
movw R30,R22
ldd R18,z+2
ldd R19,z+3
subi R18,234 ; offset = 22
sbci R19,255
movw R16,R20
subi R16,255 ; offset = 1
sbci R17,255
xcall _GUI_HLine
.dbline 145
;
; xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
subi R20,32
sbci R21,0
.dbline 146
; }
L44:
.dbline 149
;
; /* 显示菜单文字 */
; xx++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 150
; yy = mwin->y + 22 + 2;
movw R30,R22
ldd R24,z+2
ldd R25,z+3
adiw R24,24
movw R10,R24
.dbline 151
; for(i=0; i<(men->no); i++)
clr R22
xjmp L52
L49:
.dbline 152
; { if( i == (men->state) ) // 判断所选择的菜单项
.dbline 152
movw R30,R12
ldd R2,z+20
cp R22,R2
brne L53
.dbline 153
; { /* 显示背景色 */
.dbline 154
; GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
lds R2,_disp_color
std y+4,R2
movw R24,R10
adiw R24,10
std y+3,R25
std y+2,R24
movw R24,R20
subi R24,190 ; offset = 66
sbci R25,255
sbiw R24,2
std y+1,R25
std y+0,R24
movw R18,R10
movw R16,R20
xcall _GUI_RectangleFill
.dbline 156
; /* 显示菜单字符 */
; GUI_ExchangeColor();
xcall _GUI_ExchangeColor
.dbline 157
; GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 书写子菜单文字
ldi R24,8
std y+2,R24
ldi R24,2
mul R24,R22
movw R30,R0
movw R24,R12
adiw R24,4
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
std y+1,R3
std y+0,R2
movw R18,R10
subi R18,255 ; offset = 1
sbci R19,255
movw R16,R20
subi R16,255 ; offset = 1
sbci R17,255
xcall _GUI_PutNoStr
.dbline 158
; GUI_ExchangeColor();
xcall _GUI_ExchangeColor
.dbline 159
; }
xjmp L54
L53:
.dbline 161
; else
; { /* 显示背景色 */
.dbline 162
; GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
lds R2,_back_color
std y+4,R2
movw R24,R10
adiw R24,10
std y+3,R25
std y+2,R24
movw R24,R20
subi R24,190 ; offset = 66
sbci R25,255
sbiw R24,2
std y+1,R25
std y+0,R24
movw R18,R10
movw R16,R20
xcall _GUI_RectangleFill
.dbline 164
; /* 显示菜单字符 */
; GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 书写子菜单文字
ldi R24,8
std y+2,R24
ldi R24,2
mul R24,R22
movw R30,R0
movw R24,R12
adiw R24,4
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
std y+1,R3
std y+0,R2
movw R18,R10
subi R18,255 ; offset = 1
sbci R19,255
movw R16,R20
subi R16,255 ; offset = 1
sbci R17,255
xcall _GUI_PutNoStr
.dbline 165
; }
L54:
.dbline 167
movw R24,R10
adiw R24,11
movw R10,R24
.dbline 168
L50:
.dbline 151
inc R22
L52:
.dbline 151
movw R30,R12
ldd R2,z+3
cp R22,R2
brsh X2
xjmp L49
X2:
.dbline 170
;
; yy += 11;
; }
;
; return(1);
ldi R16,1
.dbline -2
L38:
adiw R28,5
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r mwin 22 pX
.dbsym r xx 20 i
.dbsym r i 22 c
.dbsym r yy 10 i
.dbsym r men 12 pX
.dbend
.dbfunc e GUI_SMenuSelect _GUI_SMenuSelect fV
; mwin -> R14,R15
; yy -> R22
; xx -> R20
; new_no -> R12
; old_no -> y+15
; men -> R10,R11
.even
_GUI_SMenuSelect::
st -y,r19
st -y,r18
xcall push_gset5
movw R10,R16
sbiw R28,5
ldd R12,y+17
.dbline -1
.dbline 184
; }
;
;
;
; /****************************************************************************
; * 名称:GUI_SMenuSelect()
; * 功能:选择新的子菜单。
; * 入口参数:men 子菜单句柄
; * old_no 原先选择的子菜单项
; * new_no 现要选择的子菜单项
; * 出口参数:无
; ****************************************************************************/
; void GUI_SMenuSelect(SMENU *men, uint8 old_no, uint8 new_no)
; { WINDOWS *mwin;
.dbline 188
; uint8 xx, yy;
;
; /* 参数过滤 */
; if(old_no==new_no) return;
ldd R0,y+15
cp R0,R12
brne L56
.dbline 188
xjmp L55
L56:
.dbline 189
; xx = men->no;
movw R30,R10
ldd R20,z+3
.dbline 190
ldd R0,y+15
cp R20,R0
brlo L60
cp R20,R12
brsh L58
L60:
.dbline 190
; if( (old_no>xx) || (new_no>xx) ) return;
xjmp L55
L58:
.dbline 193
;
; /* 设置新的选择的子菜单项 */
; men->state = new_no;
movw R30,R10
std z+20,R12
.dbline 196
;
; /* 进行菜单反相显示 */
; mwin = men->win;
movw R30,R10
ldd R14,z+0
ldd R15,z+1
.dbline 197
; xx = mwin->x;
movw R30,R14
ldd R20,z+0
.dbline 198
; xx += (men->mmenu_no)*MMENU_WIDTH;
movw R30,R10
ldd R2,z+2
ldi R24,34
mul R24,R2
add R20,R0
.dbline 199
; if( (xx+SMENU_WIDTH) > (mwin->x + mwin->with - 1) )
movw R30,R14
ldd R2,z+4
ldd R3,z+5
movw R30,R14
ldd R24,z+0
ldd R25,z+1
add R24,R2
adc R25,R3
sbiw R24,1
mov R30,R20
clr R31
subi R30,190 ; offset = 66
sbci R31,255
cp R24,R30
cpc R25,R31
brsh L61
.dbline 200
; { /* 以右下拉为原则显示子菜单,所以xx设置在左端 */
.dbline 201
; xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
subi R20,32
.dbline 202
; }
L61:
.dbline 203
; xx++;
inc R20
.dbline 206
;
; /* 取消原子菜单选择 */
; yy = mwin->y + 22 + 2;
movw R30,R14
ldd R22,z+2
subi R22,232 ; offset = 24
sbci R23,255
.dbline 207
; yy += old_no*11;
ldi R24,11
ldd R0,y+15
mul R24,R0
add R22,R0
.dbline 208
; GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
lds R2,_back_color
std y+4,R2
mov R24,R22
clr R25
adiw R24,10
std y+3,R25
std y+2,R24
mov R24,R20
clr R25
subi R24,190 ; offset = 66
sbci R25,255
sbiw R24,2
std y+1,R25
std y+0,R24
mov R18,R22
clr R19
mov R16,R20
clr R17
xcall _GUI_RectangleFill
.dbline 209
; GUI_PutNoStr(xx+1, yy+1, men->str[old_no], 8);
ldi R24,8
std y+2,R24
ldi R24,2
ldd R0,y+15
mul R24,R0
movw R30,R0
movw R24,R10
adiw R24,4
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
std y+1,R3
std y+0,R2
mov R18,R22
clr R19
subi R18,255 ; offset = 1
sbci R19,255
mov R16,R20
clr R17
subi R16,255 ; offset = 1
sbci R17,255
xcall _GUI_PutNoStr
.dbline 211
; /* 选择新的子菜单 */
; yy = mwin->y + 22 + 2;
movw R30,R14
ldd R22,z+2
subi R22,232 ; offset = 24
sbci R23,255
.dbline 212
; yy += new_no*11;
ldi R24,11
mul R24,R12
add R22,R0
.dbline 213
; GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
lds R2,_disp_color
std y+4,R2
mov R24,R22
clr R25
adiw R24,10
std y+3,R25
std y+2,R24
mov R24,R20
clr R25
subi R24,190 ; offset = 66
sbci R25,255
sbiw R24,2
std y+1,R25
std y+0,R24
mov R18,R22
clr R19
mov R16,R20
clr R17
xcall _GUI_RectangleFill
.dbline 214
; GUI_ExchangeColor();
xcall _GUI_ExchangeColor
.dbline 215
; GUI_PutNoStr(xx+1, yy+1, men->str[new_no], 8);
ldi R24,8
std y+2,R24
ldi R24,2
mul R24,R12
movw R30,R0
movw R24,R10
adiw R24,4
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
std y+1,R3
std y+0,R2
mov R18,R22
clr R19
subi R18,255 ; offset = 1
sbci R19,255
mov R16,R20
clr R17
subi R16,255 ; offset = 1
sbci R17,255
xcall _GUI_PutNoStr
.dbline 216
; GUI_ExchangeColor();
xcall _GUI_ExchangeColor
.dbline -2
L55:
adiw R28,5
xcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r mwin 14 pX
.dbsym r yy 22 c
.dbsym r xx 20 c
.dbsym r new_no 12 c
.dbsym l old_no 15 c
.dbsym r men 10 pX
.dbend
.dbfunc e GUI_SMenuHide _GUI_SMenuHide fc
; yy -> R10
; xx -> R20
; mwin -> R22,R23
; men -> R12,R13
.even
_GUI_SMenuHide::
xcall push_gset4
movw R12,R16
sbiw R28,5
.dbline -1
.dbline 228
; }
;
;
;
; /****************************************************************************
; * 名称:GUI_SMenuHide()
; * 功能:消隐子菜单项。
; * 入口参数:men 子菜单句柄
; * 出口参数:返回0表示操作失败,返回1表示操作成功
; ****************************************************************************/
; uint8 GUI_SMenuHide(SMENU *men)
; { WINDOWS *mwin;
.dbline 231
; uint8 xx, yy;
;
; mwin = men->win;
movw R30,R12
ldd R22,z+0
ldd R23,z+1
.dbline 233
; /* 判断是否可以显示主菜单 */
; if( (mwin->hight)<50 ) return(0);
movw R30,R22
ldd R24,z+6
ldd R25,z+7
cpi R24,50
ldi R30,0
cpc R25,R30
brsh L64
.dbline 233
clr R16
xjmp L63
L64:
.dbline 234
; if( (mwin->with)<50 ) return(0);
movw R30,R22
ldd R24,z+4
ldd R25,z+5
cpi R24,50
ldi R30,0
cpc R25,R30
brsh L66
.dbline 234
clr R16
xjmp L63
L66:
.dbline 237
;
; /* 画菜子单项。下拉子菜单,以向左下拉为原则,若右边溢出则以右下拉显示 */
; xx = mwin->x;
movw R30,R22
ldd R20,z+0
.dbline 238
; xx += (men->mmenu_no)*MMENU_WIDTH;
movw R30,R12
ldd R2,z+2
ldi R24,34
mul R24,R2
add R20,R0
.dbline 239
; yy = mwin->y + 22;
movw R30,R22
ldd R24,z+2
ldd R25,z+3
adiw R24,22
mov R10,R24
.dbline 240
; yy += (men->no) * 11 + 2;
movw R30,R12
ldd R2,z+3
ldi R24,11
mul R24,R2
mov R24,R0
subi R24,254 ; addi 2
add R10,R24
.dbline 241
; if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) )
movw R30,R22
ldd R2,z+4
ldd R3,z+5
movw R30,R22
ldd R24,z+0
ldd R25,z+1
add R24,R2
adc R25,R3
sbiw R24,1
mov R30,R20
clr R31
subi R30,190 ; offset = 66
sbci R31,255
cp R24,R30
cpc R25,R31
brsh X3
xjmp L68
X3:
.dbline 242
; { /* 以左下拉为原则显示子菜单 */
.dbline 243
; if( (men->mmenu_no) == 0 )
movw R30,R12
ldd R2,z+2
tst R2
brne L70
.dbline 244
; { GUI_RectangleFill(xx+1, mwin->y + 22+1, xx+SMENU_WIDTH, yy, back_color);
.dbline 244
lds R2,_back_color
std y+4,R2
mov R2,R10
clr R3
std y+3,R3
std y+2,R2
mov R24,R20
clr R25
subi R24,190 ; offset = 66
sbci R25,255
std y+1,R25
std y+0,R24
movw R30,R22
ldd R18,z+2
ldd R19,z+3
subi R18,233 ; offset = 23
sbci R19,255
mov R16,R20
clr R17
subi R16,255 ; offset = 1
sbci R17,255
xcall _GUI_RectangleFill
.dbline 245
; }
xjmp L71
L70:
.dbline 247
; else
; { GUI_RectangleFill(xx, mwin->y + 22+1, xx+SMENU_WIDTH, yy, back_color);
.dbline 247
lds R2,_back_color
std y+4,R2
mov R2,R10
clr R3
std y+3,R3
std y+2,R2
mov R24,R20
clr R25
subi R24,190 ; offset = 66
sbci R25,255
std y+1,R25
std y+0,R24
movw R30,R22
ldd R18,z+2
ldd R19,z+3
subi R18,233 ; offset = 23
sbci R19,255
mov R16,R20
clr R17
xcall _GUI_RectangleFill
.dbline 248
; }
L71:
.dbline 249
; GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, disp_color);
lds R2,_disp_color
std y+2,R2
mov R24,R20
clr R25
adiw R24,34
sbiw R24,1
std y+1,R25
std y+0,R24
movw R30,R22
ldd R18,z+2
ldd R19,z+3
subi R18,234 ; offset = 22
sbci R19,255
mov R16,R20
clr R17
subi R16,255 ; offset = 1
sbci R17,255
xcall _GUI_HLine
.dbline 250
; }
xjmp L69
L68:
.dbline 252
; else
; { /* 以右下拉为原则 */
.dbline 253
; if( (xx+MMENU_WIDTH) == (mwin->x + mwin->with - 1) )
movw R30,R22
ldd R2,z+4
ldd R3,z+5
movw R30,R22
ldd R24,z+0
ldd R25,z+1
add R24,R2
adc R25,R3
sbiw R24,1
mov R30,R20
clr R31
adiw R30,34
cp R30,R24
cpc R31,R25
brne L72
.dbline 254
; { GUI_RectangleFill(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22+1, xx+MMENU_WIDTH-1, yy, back_color);
.dbline 254
lds R2,_back_color
std y+4,R2
mov R2,R10
clr R3
std y+3,R3
std y+2,R2
mov R24,R20
clr R25
adiw R24,34
sbiw R24,1
std y+1,R25
std y+0,R24
movw R30,R22
ldd R18,z+2
ldd R19,z+3
subi R18,233 ; offset = 23
sbci R19,255
mov R16,R20
clr R17
subi R16,32
sbci R17,0
xcall _GUI_RectangleFill
.dbline 255
; }
xjmp L73
L72:
.dbline 257
; else
; { GUI_RectangleFill(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22+1, xx+MMENU_WIDTH, yy, back_color);
.dbline 257
lds R2,_back_color
std y+4,R2
mov R2,R10
clr R3
std y+3,R3
std y+2,R2
mov R24,R20
clr R25
adiw R24,34
std y+1,R25
std y+0,R24
movw R30,R22
ldd R18,z+2
ldd R19,z+3
subi R18,233 ; offset = 23
sbci R19,255
mov R16,R20
clr R17
subi R16,32
sbci R17,0
xcall _GUI_RectangleFill
.dbline 258
; }
L73:
.dbline 259
; GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, disp_color);
lds R2,_disp_color
std y+2,R2
mov R24,R20
clr R25
adiw R24,34
sbiw R24,1
std y+1,R25
std y+0,R24
movw R30,R22
ldd R18,z+2
ldd R19,z+3
subi R18,234 ; offset = 22
sbci R19,255
mov R16,R20
clr R17
subi R16,255 ; offset = 1
sbci R17,255
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -