📄 windows.lst
字号:
1 .file "windows.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
126 .global GUI_WindowsDraw
128 GUI_WindowsDraw:
1:windows.c **** /****************************************************************************************
2:windows.c **** * 文件名:WINDOW.C
3:windows.c **** * 功能:窗口管理。将进行各种窗口的给制及窗口内部控制。
4:windows.c **** * 备注:
5:windows.c **** ****************************************************************************************/
6:windows.c **** #include "config.h"
7:windows.c ****
8:windows.c **** #if GUI_WINDOW_EN==1
9:windows.c **** /****************************************************************************
10:windows.c **** * 名称:GUI_WindowsDraw()
11:windows.c **** * 功能:显示窗口。根据提供的窗口参数进行画窗口。
12:windows.c **** * 入口参数:win 窗口句柄
13:windows.c **** * 出口参数:返回0表示操作失败,返回1表示操作成功
14:windows.c **** ****************************************************************************/
15:windows.c **** uint8 GUI_WindowsDraw(WINDOWS *win)
16:windows.c **** { uint8 *str;
130 .LM1:
131 /* prologue: frame size=0 */
132 0000 DF92 push r13
133 0002 EF92 push r14
134 0004 FF92 push r15
135 0006 0F93 push r16
136 0008 1F93 push r17
137 000a CF93 push r28
138 000c DF93 push r29
139 /* prologue end (size=7) */
140 000e EC01 movw r28,r24
17:windows.c **** int8 bak, bak1, bak2;
18:windows.c ****
19:windows.c **** /* 参数过滤,若窗口起出范围,则返回0 */
20:windows.c **** if( ( (win->with)<20 ) || ( (win->hight)<20 ) ) return(0); // 宽度、高度检查,限制最小窗口
142 .LM2:
143 0010 4A81 ldd r20,Y+2
144 0012 4431 cpi r20,lo8(20)
145 0014 08F4 brsh .+2
146 0016 92C0 rjmp .L17
148 .LM3:
149 0018 2B81 ldd r18,Y+3
150 001a 2431 cpi r18,lo8(20)
151 001c 08F4 brsh .+2
152 001e 8EC0 rjmp .L17
21:windows.c **** if( (win->x + win->with ) > GUI_LCM_XMAX ) return(0); // 窗口宽度是否溢出
154 .LM4:
155 0020 3881 ld r19,Y
156 0022 632F mov r22,r19
157 0024 640F add r22,r20
158 0026 712D mov r23,__zero_reg__
159 0028 711D adc r23,__zero_reg__
160 002a 6336 cpi r22,99
161 002c 7105 cpc r23,__zero_reg__
162 002e 0CF0 brlt .+2
163 0030 85C0 rjmp .L17
22:windows.c **** if( (win->y + win->hight ) > GUI_LCM_YMAX ) return(0); // 窗口高度是否溢出
165 .LM5:
166 0032 6981 ldd r22,Y+1
167 0034 E62F mov r30,r22
168 0036 E20F add r30,r18
169 0038 F12D mov r31,__zero_reg__
170 003a F11D adc r31,__zero_reg__
171 003c E434 cpi r30,68
172 003e F105 cpc r31,__zero_reg__
173 0040 0CF0 brlt .+2
174 0042 7CC0 rjmp .L17
23:windows.c ****
24:windows.c **** /* 开始画窗口 */
25:windows.c **** GUI_RectangleFill(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, Back_G);
176 .LM6:
177 0044 260F add r18,r22
178 0046 2150 subi r18,lo8(-(-1))
179 0048 430F add r20,r19
180 004a 4150 subi r20,lo8(-(-1))
181 004c 0091 0000 lds r16,Back_G
182 0050 832F mov r24,r19
183 0052 0E94 0000 call GUI_RectangleFill
26:windows.c **** GUI_Rectangle(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, Windows_C); // 画
185 .LM7:
186 0056 5981 ldd r21,Y+1
187 0058 9B81 ldd r25,Y+3
188 005a 950F add r25,r21
189 005c 9150 subi r25,lo8(-(-1))
190 005e 3881 ld r19,Y
191 0060 8A81 ldd r24,Y+2
192 0062 830F add r24,r19
193 0064 8150 subi r24,lo8(-(-1))
194 0066 0091 0000 lds r16,Windows_C
195 006a 292F mov r18,r25
196 006c 482F mov r20,r24
197 006e 652F mov r22,r21
198 0070 832F mov r24,r19
199 0072 0E94 0000 call GUI_Rectangle
27:windows.c **** GUI_HLine(win->x, win->y + 10, win->x + win->with - 1, Windows_C); // 画标题目栏
201 .LM8:
202 0076 3881 ld r19,Y
203 0078 8A81 ldd r24,Y+2
204 007a 830F add r24,r19
205 007c 8150 subi r24,lo8(-(-1))
206 007e 9981 ldd r25,Y+1
207 0080 965F subi r25,lo8(-(10))
208 0082 2091 0000 lds r18,Windows_C
209 0086 482F mov r20,r24
210 0088 692F mov r22,r25
211 008a 832F mov r24,r19
212 008c 0E94 0000 call GUI_HLine
28:windows.c **** GUI_RLine(win->x + 10, win->y, win->y + 10, Windows_C); // 画关闭窗号按钮
214 .LM9:
215 0090 9981 ldd r25,Y+1
216 0092 892F mov r24,r25
217 0094 865F subi r24,lo8(-(10))
218 0096 3881 ld r19,Y
219 0098 2091 0000 lds r18,Windows_C
220 009c 482F mov r20,r24
221 009e 692F mov r22,r25
222 00a0 832F mov r24,r19
223 00a2 865F subi r24,lo8(-(10))
224 00a4 0E94 0000 call GUI_RLine
29:windows.c **** GUI_Line(win->x, win->y, win->x + 10, win->y + 10, Windows_C);
226 .LM10:
227 00a8 5981 ldd r21,Y+1
228 00aa 952F mov r25,r21
229 00ac 965F subi r25,lo8(-(10))
230 00ae 3881 ld r19,Y
231 00b0 832F mov r24,r19
232 00b2 865F subi r24,lo8(-(10))
233 00b4 0091 0000 lds r16,Windows_C
234 00b8 292F mov r18,r25
235 00ba 482F mov r20,r24
236 00bc 652F mov r22,r21
237 00be 832F mov r24,r19
238 00c0 0E94 0000 call GUI_Line
30:windows.c **** GUI_Line(win->x + 10, win->y, win->x, win->y + 10, Windows_C);
240 .LM11:
241 00c4 3981 ldd r19,Y+1
242 00c6 832F mov r24,r19
243 00c8 865F subi r24,lo8(-(10))
244 00ca 9881 ld r25,Y
245 00cc 0091 0000 lds r16,Windows_C
246 00d0 282F mov r18,r24
247 00d2 492F mov r20,r25
248 00d4 632F mov r22,r19
249 00d6 892F mov r24,r25
250 00d8 865F subi r24,lo8(-(10))
251 00da 0E94 0000 call GUI_Line
31:windows.c ****
32:windows.c ****
33:windows.c **** /* 写标题 */
34:windows.c **** if( win->title != NULL )
253 .LM12:
254 00de 8C81 ldd r24,Y+4
255 00e0 9D81 ldd r25,Y+5
256 00e2 0097 sbiw r24,0
257 00e4 21F1 breq .L6
35:windows.c **** { str = win->title;
259 .LM13:
260 00e6 8C01 movw r16,r24
36:windows.c **** bak = win->x + 13;
262 .LM14:
263 00e8 8881 ld r24,Y
264 00ea 9DE0 ldi r25,lo8(13)
265 00ec D92E mov r13,r25
266 00ee D80E add r13,r24
37:windows.c **** bak1 = win->y + 2;
268 .LM15:
269 00f0 E980 ldd r14,Y+1
270 00f2 F2E0 ldi r31,lo8(2)
271 00f4 EF0E add r14,r31
38:windows.c **** bak2 = win->x + win->with -1;
273 .LM16:
274 00f6 FA80 ldd r15,Y+2
275 00f8 F80E add r15,r24
276 00fa FA94 dec r15
277 .L7:
39:windows.c ****
40:windows.c **** while(1)
41:windows.c **** { if( (bak+8) > bak2 ) break; // 判断标题是否溢出
279 .LM17:
280 00fc 8D2D mov r24,r13
281 00fe 9927 clr r25
282 0100 87FD sbrc r24,7
283 0102 9095 com r25
284 0104 0896 adiw r24,8
285 0106 2F2D mov r18,r15
286 0108 3327 clr r19
287 010a 27FD sbrc r18,7
288 010c 3095 com r19
289 010e 2817 cp r18,r24
290 0110 3907 cpc r19,r25
291 0112 6CF0 brlt .L6
42:windows.c **** if(*str=='\0') break; // 判断字符串是否结束
293 .LM18:
294 0114 F801 movw r30,r16
295 0116 4081 ld r20,Z
296 0118 4423 tst r20
297 011a 49F0 breq .L6
43:windows.c ****
44:windows.c **** GUI_PutChar(bak, bak1, *str++); // 显示标题
299 .LM19:
300 011c 0F5F subi r16,lo8(-(1))
301 011e 1F4F sbci r17,hi8(-(1))
302 0120 6E2D mov r22,r14
303 0122 8D2D mov r24,r13
304 0124 0E94 0000 call GUI_PutChar
45:windows.c **** bak += 6;
306 .LM20:
307 0128 F6E0 ldi r31,lo8(6)
308 012a DF0E add r13,r31
309 012c E7CF rjmp .L7
310 .L6:
46:windows.c **** }
47:windows.c **** }
48:windows.c ****
49:windows.c ****
50:windows.c **** /* 写状态栏 */
51:windows.c **** if( win->state != NULL )
312 .LM21:
313 012e 8E81 ldd r24,Y+6
314 0130 9F81 ldd r25,Y+7
315 0132 892B or r24,r25
316 0134 D9F1 breq .L11
52:windows.c **** { if( win->hight < 60) return(0); // 判断是否可以画状态栏
318 .LM22:
319 0136 2B81 ldd r18,Y+3
320 0138 2C33 cpi r18,lo8(60)
321 013a 18F4 brsh .L12
322 .L17:
323 013c 80E0 ldi r24,lo8(0)
324 013e 90E0 ldi r25,hi8(0)
325 0140 37C0 rjmp .L1
326 .L12:
53:windows.c **** /* 画状态栏 */
54:windows.c **** GUI_HLine(win->x, win->y + win->hight - 10, win->x + win->with - 1,Windows_C);
328 .LM23:
329 0142 3881 ld r19,Y
330 0144 9A81 ldd r25,Y+2
331 0146 930F add r25,r19
332 0148 9150 subi r25,lo8(-(-1))
333 014a 8981 ldd r24,Y+1
334 014c 820F add r24,r18
335 014e 8A50 subi r24,lo8(-(-10))
336 0150 2091 0000 lds r18,Windows_C
337 0154 492F mov r20,r25
338 0156 682F mov r22,r24
339 0158 832F mov r24,r19
340 015a 0E94 0000 call GUI_HLine
55:windows.c ****
56:windows.c **** str = win->state;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -