📄 windows.lis
字号:
0220 840D add R24,R4
0222 951D adc R25,R5
0224 0197 sbiw R24,1
0226 9983 std y+1,R25
0228 8883 std y+0,R24
022A F701 movw R30,R14
022C 4680 ldd R4,z+6
022E 5780 ldd R5,z+7
0230 F701 movw R30,R14
0232 2281 ldd R18,z+2
0234 3381 ldd R19,z+3
0236 240D add R18,R4
0238 351D adc R19,R5
023A 2B50 subi R18,11
023C 3040 sbci R19,0
023E 8101 movw R16,R2
0240 0E940000 xcall _GUI_HLine
0244 .dbline 58
0244 ;
0244 ; str = win->state;
0244 F701 movw R30,R14
0246 A284 ldd R10,z+10
0248 B384 ldd R11,z+11
024A .dbline 59
024A ; bak = win->x + 3;
024A F701 movw R30,R14
024C 8081 ldd R24,z+0
024E 9181 ldd R25,z+1
0250 0396 adiw R24,3
0252 6C01 movw R12,R24
0254 .dbline 60
0254 ; bak1 = win->y + win->hight - 9;
0254 2680 ldd R2,z+6
0256 3780 ldd R3,z+7
0258 F701 movw R30,R14
025A 6281 ldd R22,z+2
025C 7381 ldd R23,z+3
025E 620D add R22,R2
0260 731D adc R23,R3
0262 6950 subi R22,9
0264 7040 sbci R23,0
0266 .dbline 61
0266 ; bak2 = win->x + win->with -1;
0266 F701 movw R30,R14
0268 2480 ldd R2,z+4
026A 3580 ldd R3,z+5
026C F701 movw R30,R14
026E 4081 ldd R20,z+0
0270 5181 ldd R21,z+1
0272 420D add R20,R2
0274 531D adc R21,R3
0276 4150 subi R20,1
0278 5040 sbci R21,0
027A 16C0 xjmp L29
027C L28:
027C .dbline 64
027C ;
027C ; while(1)
027C ; { if( (bak+8) > bak2 ) break; // 判断标题是否溢出
027C .dbline 64
027C C601 movw R24,R12
027E 0896 adiw R24,8
0280 4817 cp R20,R24
0282 5907 cpc R21,R25
0284 0CF4 brge L31
0286 .dbline 64
0286 11C0 xjmp L30
0288 L31:
0288 .dbline 65
0288 ; if(*str=='\0') break; // 判断字符串是否结束
0288 F501 movw R30,R10
028A 2080 ldd R2,z+0
028C 2220 tst R2
028E 09F4 brne L33
0290 .dbline 65
0290 0CC0 xjmp L30
0292 L33:
0292 .dbline 67
0292 F501 movw R30,R10
0294 2190 ld R2,Z+
0296 5F01 movw R10,R30
0298 2882 std y+0,R2
029A 9B01 movw R18,R22
029C 8601 movw R16,R12
029E 0E940000 xcall _GUI_PutChar
02A2 .dbline 68
02A2 C601 movw R24,R12
02A4 0696 adiw R24,6
02A6 6C01 movw R12,R24
02A8 .dbline 69
02A8 L29:
02A8 .dbline 63
02A8 E9CF xjmp L28
02AA L30:
02AA .dbline 70
02AA ;
02AA ; GUI_PutChar(bak, bak1, *str++); // 显示标题
02AA ; bak += 6;
02AA ; }
02AA ; }
02AA L24:
02AA .dbline 72
02AA ;
02AA ; return(1);
02AA 01E0 ldi R16,1
02AC .dbline -2
02AC L7:
02AC 2596 adiw R28,5
02AE 0E940000 xcall pop_gset5
02B2 .dbline 0 ; func end
02B2 0895 ret
02B4 .dbsym r bak2 20 I
02B4 .dbsym r bak1 22 I
02B4 .dbsym r str 10 pc
02B4 .dbsym r bak 12 I
02B4 .dbsym r win 14 pX
02B4 .dbend
02B4 .dbfunc e GUI_WindowsHide _GUI_WindowsHide fc
02B4 ; win -> R20,R21
.even
02B4 _GUI_WindowsHide::
02B4 0E940000 xcall push_gset1
02B8 A801 movw R20,R16
02BA 2597 sbiw R28,5
02BC .dbline -1
02BC .dbline 84
02BC ;
02BC ; }
02BC ;
02BC ;
02BC ; /****************************************************************************
02BC ; * 名称:GUI_WindowsHide()
02BC ; * 功能:消隐窗口。
02BC ; * 入口参数:win 窗口句柄
02BC ; * 出口参数:返回0表示操作失败,返回1表示操作成功
02BC ; ****************************************************************************/
02BC ; uint8 GUI_WindowsHide(WINDOWS *win)
02BC ; { /* 参数过滤,若窗口起出范围,则返回0 */
02BC .dbline 85
02BC FA01 movw R30,R20
02BE 8481 ldd R24,z+4
02C0 9581 ldd R25,z+5
02C2 8431 cpi R24,20
02C4 E0E0 ldi R30,0
02C6 9E07 cpc R25,R30
02C8 38F0 brlo L38
02CA FA01 movw R30,R20
02CC 8681 ldd R24,z+6
02CE 9781 ldd R25,z+7
02D0 8431 cpi R24,20
02D2 E0E0 ldi R30,0
02D4 9E07 cpc R25,R30
02D6 10F4 brsh L36
02D8 L38:
02D8 .dbline 85
02D8 ; if( ( (win->with)<20 ) || ( (win->hight)<20 ) ) return(0); // 宽度、高度检查,限制最小窗口
02D8 0027 clr R16
02DA 3DC0 xjmp L35
02DC L36:
02DC .dbline 86
02DC ; if( (win->x + win->with ) > GUI_LCM_XMAX ) return(0); // 窗口宽度是否溢出
02DC FA01 movw R30,R20
02DE 2480 ldd R2,z+4
02E0 3580 ldd R3,z+5
02E2 FA01 movw R30,R20
02E4 4080 ldd R4,z+0
02E6 5180 ldd R5,z+1
02E8 420C add R4,R2
02EA 531C adc R5,R3
02EC 80EF ldi R24,240
02EE 90E0 ldi R25,0
02F0 8415 cp R24,R4
02F2 9505 cpc R25,R5
02F4 10F4 brsh L39
02F6 .dbline 86
02F6 0027 clr R16
02F8 2EC0 xjmp L35
02FA L39:
02FA .dbline 87
02FA ; if( (win->y + win->hight ) > GUI_LCM_YMAX ) return(0); // 窗口高度是否溢出
02FA FA01 movw R30,R20
02FC 2680 ldd R2,z+6
02FE 3780 ldd R3,z+7
0300 FA01 movw R30,R20
0302 4280 ldd R4,z+2
0304 5380 ldd R5,z+3
0306 420C add R4,R2
0308 531C adc R5,R3
030A 80E8 ldi R24,128
030C 90E0 ldi R25,0
030E 8415 cp R24,R4
0310 9505 cpc R25,R5
0312 10F4 brsh L41
0314 .dbline 87
0314 0027 clr R16
0316 1FC0 xjmp L35
0318 L41:
0318 .dbline 90
0318 ;
0318 ; /* 消隐窗口 */
0318 ; GUI_RectangleFill(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, back_color);
0318 20900000 lds R2,_back_color
031C 2C82 std y+4,R2
031E FA01 movw R30,R20
0320 2280 ldd R2,z+2
0322 3380 ldd R3,z+3
0324 FA01 movw R30,R20
0326 4680 ldd R4,z+6
0328 5780 ldd R5,z+7
032A C101 movw R24,R2
032C 840D add R24,R4
032E 951D adc R25,R5
0330 0197 sbiw R24,1
0332 9B83 std y+3,R25
0334 8A83 std y+2,R24
0336 FA01 movw R30,R20
0338 4080 ldd R4,z+0
033A 5180 ldd R5,z+1
033C 6480 ldd R6,z+4
033E 7580 ldd R7,z+5
0340 C201 movw R24,R4
0342 860D add R24,R6
0344 971D adc R25,R7
0346 0197 sbiw R24,1
0348 9983 std y+1,R25
034A 8883 std y+0,R24
034C 9101 movw R18,R2
034E 8201 movw R16,R4
0350 0E940000 xcall _GUI_RectangleFill
0354 .dbline 91
0354 ; return(1);
0354 01E0 ldi R16,1
0356 .dbline -2
0356 L35:
0356 2596 adiw R28,5
0358 0E940000 xcall pop_gset1
035C .dbline 0 ; func end
035C 0895 ret
035E .dbsym r win 20 pX
035E .dbend
035E .dbfunc e GUI_WindowsClr _GUI_WindowsClr fV
035E ; x1 -> R10
035E ; y0 -> R22
035E ; x0 -> R20
035E ; y1 -> R12
035E ; win -> R14,R15
.even
035E _GUI_WindowsClr::
035E 0E940000 xcall push_gset5
0362 7801 movw R14,R16
0364 2597 sbiw R28,5
0366 .dbline -1
0366 .dbline 104
0366 ; }
0366 ;
0366 ;
0366 ;
0366 ; /****************************************************************************
0366 ; * 名称:GUI_WindowsClr()
0366 ; * 功能:清屏窗口。
0366 ; * 入口参数:win 窗口句柄
0366 ; * 出口参数:无
0366 ; * 说明:使用此函数前要先使用GUI_WindowsDraw()将窗口画出。
0366 ; ****************************************************************************/
0366 ; void GUI_WindowsClr(WINDOWS *win)
0366 ; { uint8 x0, y0;
0366 .dbline 108
0366 ; uint8 x1, y1;
0366 ;
0366 ; /* 设置要清屏的区域 */
0366 ; x0 = win->x + 1;
0366 F701 movw R30,R14
0368 4081 ldd R20,z+0
036A 4F5F subi R20,255 ; offset = 1
036C 5F4F sbci R21,255
036E .dbline 109
036E ; x1 = win->x + win->with - 2;
036E 2480 ldd R2,z+4
0370 3580 ldd R3,z+5
0372 F701 movw R30,R14
0374 8081 ldd R24,z+0
0376 9181 ldd R25,z+1
0378 820D add R24,R2
037A 931D adc R25,R3
037C 0297 sbiw R24,2
037E A82E mov R10,R24
0380 .dbline 110
0380 ; y0 = win->y + 13;
0380 6281 ldd R22,z+2
0382 635F subi R22,243 ; offset = 13
0384 7F4F sbci R23,255
0386 .dbline 111
0386 ; y1 = win->y + win->hight - 2;
0386 F701 movw R30,R14
0388 2680 ldd R2,z+6
038A 3780 ldd R3,z+7
038C F701 movw R30,R14
038E 8281 ldd R24,z+2
0390 9381 ldd R25,z+3
0392 820D add R24,R2
0394 931D adc R25,R3
0396 0297 sbiw R24,2
0398 C82E mov R12,R24
039A .dbline 112
039A ; if( win->state != NULL ) // 判断是否有状态栏
039A F701 movw R30,R14
039C 2284 ldd R2,z+10
039E 3384 ldd R3,z+11
03A0 2220 tst R2
03A2 11F4 brne X4
03A4 3320 tst R3
03A6 89F0 breq L44
03A8 X4:
03A8 .dbline 113
03A8 ; { if( win->hight >= 60)
03A8 .dbline 113
03A8 F701 movw R30,R14
03AA 8681 ldd R24,z+6
03AC 9781 ldd R25,z+7
03AE 8C33 cpi R24,60
03B0 E0E0 ldi R30,0
03B2 9E07 cpc R25,R30
03B4 50F0 brlo L46
03B6 .dbline 114
03B6 ; { y1 = win->y + win->hight - 12;
03B6 .dbline 114
03B6 F701 movw R30,R14
03B8 2680 ldd R2,z+6
03BA 3780 ldd R3,z+7
03BC F701 movw R30,R14
03BE 8281 ldd R24,z+2
03C0 9381 ldd R25,z+3
03C2 820D add R24,R2
03C4 931D adc R25,R3
03C6 0C97 sbiw R24,12
03C8 C82E mov R12,R24
03CA .dbline 115
03CA ; }
03CA L46:
03CA .dbline 116
03CA ; }
03CA L44:
03CA .dbline 119
03CA ;
03CA ; /* 使用填充矩形实现清屏 */
03CA ; GUI_RectangleFill(x0, y0, x1, y1, back_color);
03CA 20900000 lds R2,_back_color
03CE 2C82 std y+4,R2
03D0 2C2C mov R2,R12
03D2 3324 clr R3
03D4 3B82 std y+3,R3
03D6 2A82 std y+2,R2
03D8 2A2C mov R2,R10
03DA 3324 clr R3
03DC 3982 std y+1,R3
03DE 2882 std y+0,R2
03E0 262F mov R18,R22
03E2 3327 clr R19
03E4 042F mov R16,R20
03E6 1127 clr R17
03E8 0E940000 xcall _GUI_RectangleFill
03EC .dbline -2
03EC L43:
03EC 2596 adiw R28,5
03EE 0E940000 xcall pop_gset5
03F2 .dbline 0 ; func end
03F2 0895 ret
03F4 .dbsym r x1 10 c
03F4 .dbsym r y0 22 c
03F4 .dbsym r x0 20 c
03F4 .dbsym r y1 12 c
03F4 .dbsym r win 14 pX
03F4 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -