?? gui_basic_.lst
字號:
1 .file "GUI_BASIC_.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:
130 .global GUI_Rectangle
132 GUI_Rectangle:
1:GUI_BASIC_.c **** /****************************************************************************************
2:GUI_BASIC_.c **** * 文件名:GUI_BASIC.C
3:GUI_BASIC_.c **** * 功能:GUI基本繪圖函數。進行基本繪圖運算,并調用相應的刷新程序更新LCD顯示。
4:GUI_BASIC_.c **** * 日期:2004.02.26
5:GUI_BASIC_.c **** * 備注:圖形操作層,進行各種圖形運算操作。
6:GUI_BASIC_.c **** ****************************************************************************************/
7:GUI_BASIC_.c **** #include "config.h"
8:GUI_BASIC_.c ****
9:GUI_BASIC_.c ****
10:GUI_BASIC_.c **** /****************************************************************************
11:GUI_BASIC_.c **** * 名稱:GUI_Rectangle()
12:GUI_BASIC_.c **** * 功能:畫矩形。
13:GUI_BASIC_.c **** * 入口參數: x0 矩形左上角的x坐標值
14:GUI_BASIC_.c **** * y0 矩形左上角的y坐標值
15:GUI_BASIC_.c **** * x1 矩形右下角的x坐標值
16:GUI_BASIC_.c **** * y1 矩形右下角的y坐標值
17:GUI_BASIC_.c **** * color 顯示顏色
18:GUI_BASIC_.c **** * 出口參數:無
19:GUI_BASIC_.c **** * 說明:操作失敗原因是指定地址超出有效范圍。
20:GUI_BASIC_.c **** ****************************************************************************/
21:GUI_BASIC_.c **** void GUI_Rectangle(uint8 x0, uint8 y0, uint8 x1, uint8 y1, TCOLOR color)
22:GUI_BASIC_.c **** { GUI_HLine(x0, y0, x1, color);
134 .LM1:
135 /* prologue: frame size=0 */
136 0000 CF92 push r12
137 0002 DF92 push r13
138 0004 EF92 push r14
139 0006 FF92 push r15
140 0008 0F93 push r16
141 000a 1F93 push r17
142 /* prologue end (size=6) */
143 000c F82E mov r15,r24
144 000e D62E mov r13,r22
145 0010 C42E mov r12,r20
146 0012 E22E mov r14,r18
147 0014 202F mov r18,r16
148 0016 0E94 0000 call GUI_HLine
23:GUI_BASIC_.c **** GUI_HLine(x0, y1, x1, color);
150 .LM2:
151 001a 202F mov r18,r16
152 001c 4C2D mov r20,r12
153 001e 6E2D mov r22,r14
154 0020 8F2D mov r24,r15
155 0022 0E94 0000 call GUI_HLine
24:GUI_BASIC_.c **** GUI_RLine(x0, y0, y1, color);
157 .LM3:
158 0026 202F mov r18,r16
159 0028 4E2D mov r20,r14
160 002a 6D2D mov r22,r13
161 002c 8F2D mov r24,r15
162 002e 0E94 0000 call GUI_RLine
25:GUI_BASIC_.c **** GUI_RLine(x1, y0, y1, color);
164 .LM4:
165 0032 202F mov r18,r16
166 0034 4E2D mov r20,r14
167 0036 6D2D mov r22,r13
168 0038 8C2D mov r24,r12
169 003a 0E94 0000 call GUI_RLine
170 /* epilogue: frame size=0 */
171 003e 1F91 pop r17
172 0040 0F91 pop r16
173 0042 FF90 pop r15
174 0044 EF90 pop r14
175 0046 DF90 pop r13
176 0048 CF90 pop r12
177 004a 0895 ret
178 /* epilogue end (size=7) */
179 /* function GUI_Rectangle size 38 (25) */
181 .Lscope0:
188 .global GUI_RectangleFill
190 GUI_RectangleFill:
26:GUI_BASIC_.c **** }
27:GUI_BASIC_.c ****
28:GUI_BASIC_.c ****
29:GUI_BASIC_.c **** /****************************************************************************
30:GUI_BASIC_.c **** * 名稱:GUI_RectangleFill()
31:GUI_BASIC_.c **** * 功能:填充矩形。畫一個填充的矩形,填充色與邊框色一樣。
32:GUI_BASIC_.c **** * 入口參數: x0 矩形左上角的x坐標值
33:GUI_BASIC_.c **** * y0 矩形左上角的y坐標值
34:GUI_BASIC_.c **** * x1 矩形右下角的x坐標值
35:GUI_BASIC_.c **** * y1 矩形右下角的y坐標值
36:GUI_BASIC_.c **** * color 填充顏色
37:GUI_BASIC_.c **** * 出口參數:無
38:GUI_BASIC_.c **** * 說明:操作失敗原因是指定地址超出有效范圍。
39:GUI_BASIC_.c **** ****************************************************************************/
40:GUI_BASIC_.c **** void GUI_RectangleFill(uint8 x0, uint8 y0, uint8 x1, uint8 y1, TCOLOR color)
41:GUI_BASIC_.c **** { uint8 i;
192 .LM5:
193 /* prologue: frame size=0 */
194 004c EF92 push r14
195 004e FF92 push r15
196 0050 0F93 push r16
197 0052 1F93 push r17
198 0054 CF93 push r28
199 /* prologue end (size=5) */
200 0056 F82E mov r15,r24
201 0058 C62F mov r28,r22
202 005a E42E mov r14,r20
203 005c 122F mov r17,r18
42:GUI_BASIC_.c ****
43:GUI_BASIC_.c **** /* 先找出矩形左上角與右下角的兩個點,保存在(x0,y0),(x1,y1) */
44:GUI_BASIC_.c **** if(x0>x1) // 若x0>x1,則x0與x1交換
205 .LM6:
206 005e 4817 cp r20,r24
207 0060 10F4 brsh .L3
45:GUI_BASIC_.c **** { i = x0;
46:GUI_BASIC_.c **** x0 = x1;
209 .LM7:
210 0062 F42E mov r15,r20
47:GUI_BASIC_.c **** x1 = i;
212 .LM8:
213 0064 E82E mov r14,r24
214 .L3:
48:GUI_BASIC_.c **** }
49:GUI_BASIC_.c **** if(y0>y1) // 若y0>y1,則y0與y1交換
216 .LM9:
217 0066 1C17 cp r17,r28
218 0068 18F4 brsh .L4
50:GUI_BASIC_.c **** { i = y0;
220 .LM10:
221 006a 8C2F mov r24,r28
51:GUI_BASIC_.c **** y0 = y1;
223 .LM11:
224 006c C12F mov r28,r17
52:GUI_BASIC_.c **** y1 = i;
226 .LM12:
227 006e 182F mov r17,r24
228 .L4:
53:GUI_BASIC_.c **** }
54:GUI_BASIC_.c ****
55:GUI_BASIC_.c **** /* 判斷是否只是直線 */
56:GUI_BASIC_.c **** if(y0==y1)
230 .LM13:
231 0070 C117 cp r28,r17
232 0072 39F4 brne .L5
57:GUI_BASIC_.c **** { GUI_HLine(x0, y0, x1, color);
234 .LM14:
235 0074 202F mov r18,r16
236 0076 4E2D mov r20,r14
237 0078 6C2F mov r22,r28
238 007a 8F2D mov r24,r15
239 007c 0E94 0000 call GUI_HLine
58:GUI_BASIC_.c **** return;
241 .LM15:
242 0080 14C0 rjmp .L2
243 .L5:
59:GUI_BASIC_.c **** }
60:GUI_BASIC_.c **** if(x0==x1)
245 .LM16:
246 0082 FE14 cp r15,r14
247 0084 39F4 brne .L6
61:GUI_BASIC_.c **** { GUI_RLine(x0, y0, y1, color);
249 .LM17:
250 0086 202F mov r18,r16
251 0088 412F mov r20,r17
252 008a 6C2F mov r22,r28
253 008c 8F2D mov r24,r15
254 008e 0E94 0000 call GUI_RLine
62:GUI_BASIC_.c **** return;
256 .LM18:
257 0092 0BC0 rjmp .L2
258 .L6:
63:GUI_BASIC_.c **** }
64:GUI_BASIC_.c ****
65:GUI_BASIC_.c **** while(y0<=y1)
66:GUI_BASIC_.c **** { GUI_HLine(x0, y0, x1, color); // 當前畫水平線
67:GUI_BASIC_.c **** y0++; // 下一行
260 .LM19:
261 0094 1C17 cp r17,r28
262 0096 48F0 brlo .L2
263 .L9:
265 .LM20:
266 0098 202F mov r18,r16
267 009a 4E2D mov r20,r14
268 009c 6C2F mov r22,r28
269 009e 8F2D mov r24,r15
270 00a0 0E94 0000 call GUI_HLine
272 .LM21:
273 00a4 CF5F subi r28,lo8(-(1))
274 00a6 1C17 cp r17,r28
275 00a8 B8F7 brsh .L9
276 .L2:
277 /* epilogue: frame size=0 */
278 00aa CF91 pop r28
279 00ac 1F91 pop r17
280 00ae 0F91 pop r16
281 00b0 FF90 pop r15
282 00b2 EF90 pop r14
283 00b4 0895 ret
284 /* epilogue end (size=6) */
285 /* function GUI_RectangleFill size 53 (42) */
290 .Lscope1:
296 .global GUI_Square
298 GUI_Square:
68:GUI_BASIC_.c **** }
69:GUI_BASIC_.c **** }
70:GUI_BASIC_.c ****
71:GUI_BASIC_.c ****
72:GUI_BASIC_.c **** /****************************************************************************
73:GUI_BASIC_.c **** * 名稱:GUI_Square()
74:GUI_BASIC_.c **** * 功能:畫正方形。
75:GUI_BASIC_.c **** * 入口參數: x0 正方形左上角的x坐標值
76:GUI_BASIC_.c **** * y0 正方形左上角的y坐標值
77:GUI_BASIC_.c **** * with 正方形的邊長
78:GUI_BASIC_.c **** * color 顯示顏色
79:GUI_BASIC_.c **** * 出口參數:無
80:GUI_BASIC_.c **** * 說明:操作失敗原因是指定地址超出有效范圍。
81:GUI_BASIC_.c **** ****************************************************************************/
82:GUI_BASIC_.c ****
83:GUI_BASIC_.c **** void GUI_Square(uint8 x0, uint8 y0, uint8 with, TCOLOR color)
84:GUI_BASIC_.c **** { if(with==0) return;
300 .LM22:
301 /* prologue: frame size=0 */
302 00b6 0F93 push r16
303 /* prologue end (size=1) */
304 00b8 382F mov r19,r24
305 00ba 022F mov r16,r18
306 00bc 4423 tst r20
307 00be A1F0 breq .L11
85:GUI_BASIC_.c **** if( (x0+with) > GUI_LCM_XMAX ) return;
309 .LM23:
310 00c0 E42F mov r30,r20
311 00c2 FF27 clr r31
312 00c4 CF01 movw r24,r30
313 00c6 830F add r24,r19
314 00c8 911D adc r25,__zero_reg__
315 00ca 8336 cpi r24,99
316 00cc 9105 cpc r25,__zero_reg__
317 00ce 64F4 brge .L11
86:GUI_BASIC_.c **** if( (y0+with) > GUI_LCM_YMAX ) return;
319 .LM24:
320 00d0 E60F add r30,r22
321 00d2 F11D adc r31,__zero_reg__
322 00d4 E434 cpi r30,68
323 00d6 F105 cpc r31,__zero_reg__
324 00d8 3CF4 brge .L11
87:GUI_BASIC_.c **** GUI_Rectangle(x0, y0, x0+with, y0+with, color);
326 .LM25:
327 00da 862F mov r24,r22
328 00dc 840F add r24,r20
329 00de 430F add r20,r19
330 00e0 282F mov r18,r24
331 00e2 832F mov r24,r19
332 00e4 0E94 0000 call GUI_Rectangle
333 .L11:
334 /* epilogue: frame size=0 */
335 00e8 0F91 pop r16
336 00ea 0895 ret
337 /* epilogue end (size=2) */
338 /* function GUI_Square size 27 (24) */
340 .Lscope2:
347 .global GUI_Line
349 GUI_Line:
88:GUI_BASIC_.c **** }
89:GUI_BASIC_.c ****
90:GUI_BASIC_.c ****
91:GUI_BASIC_.c ****
92:GUI_BASIC_.c **** /****************************************************************************
93:GUI_BASIC_.c **** * 名稱:GUI_Line()
94:GUI_BASIC_.c **** * 功能:畫任意兩點之間的直線。
95:GUI_BASIC_.c **** * 入口參數: x0 直線起點的x坐標值
96:GUI_BASIC_.c **** * y0 直線起點的y坐標值
97:GUI_BASIC_.c **** * x1 直線終點的x坐標值
98:GUI_BASIC_.c **** * y1 直線終點的y坐標值
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -