📄 windows.lis
字号:
.module windows.c
.area text(rom, con, rel)
0000 .dbfile G:\IccPro\mega128_lcd\ZLG_GUI\windows.c
0000 .dbfunc e GUI_WindowsDraw _GUI_WindowsDraw fc
0000 ; bak2 -> R20,R21
0000 ; bak1 -> R22,R23
0000 ; str -> R10,R11
0000 ; bak -> R12,R13
0000 ; win -> R14,R15
.even
0000 _GUI_WindowsDraw::
0000 0E940000 xcall push_gset5
0004 7801 movw R14,R16
0006 2597 sbiw R28,5
0008 .dbline -1
0008 .dbline 18
0008 ; /****************************************************************************************
0008 ; * 文件名:WINDOW.C
0008 ; * 功能:窗口管理。将进行各种窗口的给制及窗口内部控制。
0008 ; * 作者:黄绍斌
0008 ; * 日期:2004.02.26
0008 ; * 备注:
0008 ; ****************************************************************************************/
0008 ; #include "config.h"
0008 ;
0008 ; #if GUI_WINDOW_EN==1
0008 ; /****************************************************************************
0008 ; * 名称:GUI_WindowsDraw()
0008 ; * 功能:显示窗口。根据提供的窗口参数进行画窗口。
0008 ; * 入口参数:win 窗口句柄
0008 ; * 出口参数:返回0表示操作失败,返回1表示操作成功
0008 ; ****************************************************************************/
0008 ; uint8 GUI_WindowsDraw(WINDOWS *win)
0008 ; { uint8 *str;
0008 .dbline 22
0008 F701 movw R30,R14
000A 8481 ldd R24,z+4
000C 9581 ldd R25,z+5
000E 8431 cpi R24,20
0010 E0E0 ldi R30,0
0012 9E07 cpc R25,R30
0014 38F0 brlo L10
0016 F701 movw R30,R14
0018 8681 ldd R24,z+6
001A 9781 ldd R25,z+7
001C 8431 cpi R24,20
001E E0E0 ldi R30,0
0020 9E07 cpc R25,R30
0022 10F4 brsh L8
0024 L10:
0024 .dbline 22
0024 ; int32 bak, bak1, bak2;
0024 ;
0024 ; /* 参数过滤,若窗口起出范围,则返回0 */
0024 ; if( ( (win->with)<20 ) || ( (win->hight)<20 ) ) return(0); // 宽度、高度检查,限制最小窗口
0024 0027 clr R16
0026 42C1 xjmp L7
0028 L8:
0028 .dbline 23
0028 ; if( (win->x + win->with ) > GUI_LCM_XMAX ) return(0); // 窗口宽度是否溢出
0028 F701 movw R30,R14
002A 2480 ldd R2,z+4
002C 3580 ldd R3,z+5
002E F701 movw R30,R14
0030 4080 ldd R4,z+0
0032 5180 ldd R5,z+1
0034 420C add R4,R2
0036 531C adc R5,R3
0038 80EF ldi R24,240
003A 90E0 ldi R25,0
003C 8415 cp R24,R4
003E 9505 cpc R25,R5
0040 10F4 brsh L11
0042 .dbline 23
0042 0027 clr R16
0044 33C1 xjmp L7
0046 L11:
0046 .dbline 24
0046 ; if( (win->y + win->hight ) > GUI_LCM_YMAX ) return(0); // 窗口高度是否溢出
0046 F701 movw R30,R14
0048 2680 ldd R2,z+6
004A 3780 ldd R3,z+7
004C F701 movw R30,R14
004E 4280 ldd R4,z+2
0050 5380 ldd R5,z+3
0052 420C add R4,R2
0054 531C adc R5,R3
0056 80E8 ldi R24,128
0058 90E0 ldi R25,0
005A 8415 cp R24,R4
005C 9505 cpc R25,R5
005E 10F4 brsh L13
0060 .dbline 24
0060 0027 clr R16
0062 24C1 xjmp L7
0064 L13:
0064 .dbline 27
0064 ;
0064 ; /* 开始画窗口 */
0064 ; GUI_RectangleFill(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, back_color);
0064 20900000 lds R2,_back_color
0068 2C82 std y+4,R2
006A F701 movw R30,R14
006C 2280 ldd R2,z+2
006E 3380 ldd R3,z+3
0070 F701 movw R30,R14
0072 4680 ldd R4,z+6
0074 5780 ldd R5,z+7
0076 C101 movw R24,R2
0078 840D add R24,R4
007A 951D adc R25,R5
007C 0197 sbiw R24,1
007E 9B83 std y+3,R25
0080 8A83 std y+2,R24
0082 F701 movw R30,R14
0084 4080 ldd R4,z+0
0086 5180 ldd R5,z+1
0088 6480 ldd R6,z+4
008A 7580 ldd R7,z+5
008C C201 movw R24,R4
008E 860D add R24,R6
0090 971D adc R25,R7
0092 0197 sbiw R24,1
0094 9983 std y+1,R25
0096 8883 std y+0,R24
0098 9101 movw R18,R2
009A 8201 movw R16,R4
009C 0E940000 xcall _GUI_RectangleFill
00A0 .dbline 28
00A0 ; GUI_Rectangle(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, disp_color); // 画窗口
00A0 20900000 lds R2,_disp_color
00A4 2C82 std y+4,R2
00A6 F701 movw R30,R14
00A8 2280 ldd R2,z+2
00AA 3380 ldd R3,z+3
00AC F701 movw R30,R14
00AE 4680 ldd R4,z+6
00B0 5780 ldd R5,z+7
00B2 C101 movw R24,R2
00B4 840D add R24,R4
00B6 951D adc R25,R5
00B8 0197 sbiw R24,1
00BA 9B83 std y+3,R25
00BC 8A83 std y+2,R24
00BE F701 movw R30,R14
00C0 4080 ldd R4,z+0
00C2 5180 ldd R5,z+1
00C4 6480 ldd R6,z+4
00C6 7580 ldd R7,z+5
00C8 C201 movw R24,R4
00CA 860D add R24,R6
00CC 971D adc R25,R7
00CE 0197 sbiw R24,1
00D0 9983 std y+1,R25
00D2 8883 std y+0,R24
00D4 9101 movw R18,R2
00D6 8201 movw R16,R4
00D8 0E940000 xcall _GUI_Rectangle
00DC .dbline 29
00DC ; GUI_HLine(win->x, win->y + 12, win->x + win->with - 1, disp_color); // 画标题目栏
00DC 20900000 lds R2,_disp_color
00E0 2A82 std y+2,R2
00E2 F701 movw R30,R14
00E4 2080 ldd R2,z+0
00E6 3180 ldd R3,z+1
00E8 4480 ldd R4,z+4
00EA 5580 ldd R5,z+5
00EC C101 movw R24,R2
00EE 840D add R24,R4
00F0 951D adc R25,R5
00F2 0197 sbiw R24,1
00F4 9983 std y+1,R25
00F6 8883 std y+0,R24
00F8 F701 movw R30,R14
00FA 2281 ldd R18,z+2
00FC 3381 ldd R19,z+3
00FE 245F subi R18,244 ; offset = 12
0100 3F4F sbci R19,255
0102 8101 movw R16,R2
0104 0E940000 xcall _GUI_HLine
0108 .dbline 30
0108 ; GUI_RLine(win->x + 12, win->y, win->y + 12, disp_color); // 画关闭窗号按钮
0108 20900000 lds R2,_disp_color
010C 2A82 std y+2,R2
010E F701 movw R30,R14
0110 2280 ldd R2,z+2
0112 3380 ldd R3,z+3
0114 C101 movw R24,R2
0116 0C96 adiw R24,12
0118 9983 std y+1,R25
011A 8883 std y+0,R24
011C 9101 movw R18,R2
011E F701 movw R30,R14
0120 0081 ldd R16,z+0
0122 1181 ldd R17,z+1
0124 045F subi R16,244 ; offset = 12
0126 1F4F sbci R17,255
0128 0E940000 xcall _GUI_RLine
012C .dbline 31
012C ; GUI_Line(win->x, win->y, win->x + 12, win->y + 12, disp_color);
012C 20900000 lds R2,_disp_color
0130 2C82 std y+4,R2
0132 F701 movw R30,R14
0134 2280 ldd R2,z+2
0136 3380 ldd R3,z+3
0138 C101 movw R24,R2
013A 0C96 adiw R24,12
013C 9B83 std y+3,R25
013E 8A83 std y+2,R24
0140 F701 movw R30,R14
0142 4080 ldd R4,z+0
0144 5180 ldd R5,z+1
0146 C201 movw R24,R4
0148 0C96 adiw R24,12
014A 9983 std y+1,R25
014C 8883 std y+0,R24
014E 9101 movw R18,R2
0150 8201 movw R16,R4
0152 0E940000 xcall _GUI_Line
0156 .dbline 32
0156 ; GUI_Line(win->x + 12, win->y, win->x, win->y + 12, disp_color);
0156 20900000 lds R2,_disp_color
015A 2C82 std y+4,R2
015C F701 movw R30,R14
015E 2280 ldd R2,z+2
0160 3380 ldd R3,z+3
0162 C101 movw R24,R2
0164 0C96 adiw R24,12
0166 9B83 std y+3,R25
0168 8A83 std y+2,R24
016A F701 movw R30,R14
016C 4080 ldd R4,z+0
016E 5180 ldd R5,z+1
0170 5982 std y+1,R5
0172 4882 std y+0,R4
0174 9101 movw R18,R2
0176 8201 movw R16,R4
0178 045F subi R16,244 ; offset = 12
017A 1F4F sbci R17,255
017C 0E940000 xcall _GUI_Line
0180 .dbline 36
0180 ;
0180 ;
0180 ; /* 写标题 */
0180 ; if( win->title != NULL )
0180 F701 movw R30,R14
0182 2084 ldd R2,z+8
0184 3184 ldd R3,z+9
0186 2220 tst R2
0188 19F4 brne X0
018A 3320 tst R3
018C 09F4 brne X2
018E 2EC0 xjmp L15
0190 X2:
0190 X0:
0190 .dbline 37
0190 ; { str = win->title;
0190 .dbline 37
0190 F701 movw R30,R14
0192 A084 ldd R10,z+8
0194 B184 ldd R11,z+9
0196 .dbline 38
0196 ; bak = win->x + 15;
0196 F701 movw R30,R14
0198 8081 ldd R24,z+0
019A 9181 ldd R25,z+1
019C 0F96 adiw R24,15
019E 6C01 movw R12,R24
01A0 .dbline 39
01A0 ; bak1 = win->y + 3;
01A0 6281 ldd R22,z+2
01A2 7381 ldd R23,z+3
01A4 6D5F subi R22,253 ; offset = 3
01A6 7F4F sbci R23,255
01A8 .dbline 40
01A8 ; bak2 = win->x + win->with -1;
01A8 F701 movw R30,R14
01AA 2480 ldd R2,z+4
01AC 3580 ldd R3,z+5
01AE F701 movw R30,R14
01B0 4081 ldd R20,z+0
01B2 5181 ldd R21,z+1
01B4 420D add R20,R2
01B6 531D adc R21,R3
01B8 4150 subi R20,1
01BA 5040 sbci R21,0
01BC 16C0 xjmp L18
01BE L17:
01BE .dbline 43
01BE ;
01BE ; while(1)
01BE ; { if( (bak+8) > bak2 ) break; // 判断标题是否溢出
01BE .dbline 43
01BE C601 movw R24,R12
01C0 0896 adiw R24,8
01C2 4817 cp R20,R24
01C4 5907 cpc R21,R25
01C6 0CF4 brge L20
01C8 .dbline 43
01C8 11C0 xjmp L19
01CA L20:
01CA .dbline 44
01CA ; if(*str=='\0') break; // 判断字符串是否结束
01CA F501 movw R30,R10
01CC 2080 ldd R2,z+0
01CE 2220 tst R2
01D0 09F4 brne L22
01D2 .dbline 44
01D2 0CC0 xjmp L19
01D4 L22:
01D4 .dbline 46
01D4 F501 movw R30,R10
01D6 2190 ld R2,Z+
01D8 5F01 movw R10,R30
01DA 2882 std y+0,R2
01DC 9B01 movw R18,R22
01DE 8601 movw R16,R12
01E0 0E940000 xcall _GUI_PutChar
01E4 .dbline 47
01E4 C601 movw R24,R12
01E6 0696 adiw R24,6
01E8 6C01 movw R12,R24
01EA .dbline 48
01EA L18:
01EA .dbline 42
01EA E9CF xjmp L17
01EC L19:
01EC .dbline 49
01EC ;
01EC ; GUI_PutChar(bak, bak1, *str++); // 显示标题
01EC ; bak += 6;
01EC ; }
01EC ; }
01EC L15:
01EC .dbline 53
01EC ;
01EC ;
01EC ; /* 写状态栏 */
01EC ; if( win->state != NULL )
01EC F701 movw R30,R14
01EE 2284 ldd R2,z+10
01F0 3384 ldd R3,z+11
01F2 2220 tst R2
01F4 19F4 brne X1
01F6 3320 tst R3
01F8 09F4 brne X3
01FA 57C0 xjmp L24
01FC X3:
01FC X1:
01FC .dbline 54
01FC ; { if( win->hight < 60) return(0); // 判断是否可以画状态栏
01FC .dbline 54
01FC F701 movw R30,R14
01FE 8681 ldd R24,z+6
0200 9781 ldd R25,z+7
0202 8C33 cpi R24,60
0204 E0E0 ldi R30,0
0206 9E07 cpc R25,R30
0208 10F4 brsh L26
020A .dbline 54
020A 0027 clr R16
020C 4FC0 xjmp L7
020E L26:
020E .dbline 56
020E ; /* 画状态栏 */
020E ; GUI_HLine(win->x, win->y + win->hight - 11, win->x + win->with - 1, disp_color);
020E 20900000 lds R2,_disp_color
0212 2A82 std y+2,R2
0214 F701 movw R30,R14
0216 2080 ldd R2,z+0
0218 3180 ldd R3,z+1
021A 4480 ldd R4,z+4
021C 5580 ldd R5,z+5
021E C101 movw R24,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -