?? menu.lst
字號:
1 .file "menu.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:
124 .global other_C
125 .data
128 other_C:
129 0000 E3 .byte -29
130 .global Windows_C
133 Windows_C:
134 0001 1F .byte 31
135 .global Back_G
136 .global Back_G
137 .section .bss
140 Back_G:
141 0000 00 .skip 1,0
142 .text
144 .global GUI_ExchangeColor
146 GUI_ExchangeColor:
1:menu.c **** /****************************************************************************************
2:menu.c **** * 文件名:MENU.C
3:menu.c **** * 功能:菜單顯示及操作(下拉式菜單)。
4:menu.c **** * 備注:使用GUI_SetBackColor()函數(shù)設(shè)置顯示顏色及背景色。
5:menu.c **** ****************************************************************************************/
6:menu.c **** #include "config.h"
7:menu.c **** #ifndef GUI_MenuDown_EN
8:menu.c **** #define GUI_MenuDown_EN 0
9:menu.c **** #endif
10:menu.c **** uint8 Back_G=0x00;
11:menu.c **** uint8 Windows_C=0x1f;
12:menu.c **** uint8 other_C=0xe3;
13:menu.c ****
14:menu.c **** /****************************************************************************
15:menu.c **** * 名稱:GUI_ExchangeColor()
16:menu.c **** * 功能:交換前景色與背景色。用于反相顯示。
17:menu.c **** * 入口參數(shù):無
18:menu.c **** * 出口參數(shù):無
19:menu.c **** * 說明:
20:menu.c **** ****************************************************************************/
21:menu.c **** void GUI_ExchangeColor(void)
22:menu.c **** { uint8 bakc;
148 .LM1:
149 /* prologue: frame size=0 */
150 /* prologue end (size=0) */
23:menu.c **** bakc = Back_G;
152 .LM2:
153 0000 9091 0000 lds r25,Back_G
24:menu.c **** Back_G = other_C;
155 .LM3:
156 0004 8091 0000 lds r24,other_C
157 0008 8093 0000 sts Back_G,r24
25:menu.c **** other_C = bakc;
159 .LM4:
160 000c 9093 0000 sts other_C,r25
161 /* epilogue: frame size=0 */
162 0010 0895 ret
163 /* epilogue end (size=1) */
164 /* function GUI_ExchangeColor size 9 (8) */
169 .Lscope0:
172 .global GUI_MMenuDraw
174 GUI_MMenuDraw:
26:menu.c ****
27:menu.c **** /* GUI_CopyColor(&bakc, disp_color);
28:menu.c **** GUI_CopyColor(&disp_color, back_color);
29:menu.c **** GUI_CopyColor(&back_color, bakc);
30:menu.c **** */
31:menu.c **** }
32:menu.c ****
33:menu.c **** #if GUI_MenuDown_EN==1
34:menu.c **** /****************************************************************************
35:menu.c **** * 名稱:GUI_MMenuDraw()
36:menu.c **** * 功能:顯示主菜單,加上邊框。
37:menu.c **** * 入口參數(shù):men 主菜單句柄
38:menu.c **** * 出口參數(shù):返回0表示操作失敗,返回1表示操作成功
39:menu.c **** ****************************************************************************/
40:menu.c **** uint8 GUI_MMenuDraw(MMENU *men)
41:menu.c **** { WINDOWS *mwin;
176 .LM5:
177 /* prologue: frame size=0 */
178 0012 EF92 push r14
179 0014 FF92 push r15
180 0016 0F93 push r16
181 0018 1F93 push r17
182 001a CF93 push r28
183 001c DF93 push r29
184 /* prologue end (size=6) */
185 001e 8C01 movw r16,r24
42:menu.c **** uint8 i;
43:menu.c **** uint8 xx;
44:menu.c ****
45:menu.c **** /* 參數(shù)過濾 */
46:menu.c **** if( (men->no)==0 ) return(0);
187 .LM6:
188 0020 FC01 movw r30,r24
189 0022 8281 ldd r24,Z+2
190 0024 8823 tst r24
191 0026 49F0 breq .L13
47:menu.c ****
48:menu.c **** mwin = men->win; // 取得窗口句柄
193 .LM7:
194 0028 F801 movw r30,r16
195 002a C081 ld r28,Z
196 002c D181 ldd r29,Z+1
49:menu.c **** /* 判斷是否可以顯示主菜單 */
50:menu.c **** if( (mwin->hight)<50 ) return(0);
198 .LM8:
199 002e 8B81 ldd r24,Y+3
200 0030 8233 cpi r24,lo8(50)
201 0032 18F0 brlo .L13
51:menu.c **** if( (mwin->with)<50 ) return(0);
203 .LM9:
204 0034 4A81 ldd r20,Y+2
205 0036 4233 cpi r20,lo8(50)
206 0038 18F4 brsh .L5
207 .L13:
52:menu.c ****
53:menu.c **** /* 畫菜單條,并顯示菜主單 */
54:menu.c **** GUI_HLine(mwin->x, mwin->y + 19, mwin->x + mwin->with - 1, Windows_C);
55:menu.c **** xx = mwin->x;
56:menu.c **** for(i=0; i<(men->no); i++)
57:menu.c **** { if( (xx+MMENU_WIDTH) > (mwin->x + mwin->with) ) return(0);
209 .LM10:
210 003a 80E0 ldi r24,lo8(0)
211 003c 90E0 ldi r25,hi8(0)
212 003e 3DC0 rjmp .L2
213 .L5:
215 .LM11:
216 0040 8881 ld r24,Y
217 0042 480F add r20,r24
218 0044 4150 subi r20,lo8(-(-1))
219 0046 9981 ldd r25,Y+1
220 0048 9D5E subi r25,lo8(-(19))
221 004a 2091 0000 lds r18,Windows_C
222 004e 692F mov r22,r25
223 0050 0E94 0000 call GUI_HLine
225 .LM12:
226 0054 F880 ld r15,Y
228 .LM13:
229 0056 EE24 clr r14
230 .L14:
231 0058 F801 movw r30,r16
232 005a 8281 ldd r24,Z+2
233 005c E816 cp r14,r24
234 005e 58F5 brsh .L12
236 .LM14:
237 0060 2F2D mov r18,r15
238 0062 3327 clr r19
239 0064 245E subi r18,lo8(-(28))
240 0066 3F4F sbci r19,hi8(-(28))
241 0068 9881 ld r25,Y
242 006a 8A81 ldd r24,Y+2
243 006c 890F add r24,r25
244 006e 912D mov r25,__zero_reg__
245 0070 911D adc r25,__zero_reg__
246 0072 8217 cp r24,r18
247 0074 9307 cpc r25,r19
248 0076 0CF3 brlt .L13
58:menu.c ****
59:menu.c **** GUI_PutNoStr(xx+4, mwin->y + 12, men->str[i], 4); // 書寫主菜單文字
250 .LM15:
251 0078 EE2D mov r30,r14
252 007a FF27 clr r31
253 007c EE0F add r30,r30
254 007e FF1F adc r31,r31
255 0080 E00F add r30,r16
256 0082 F11F adc r31,r17
257 0084 8981 ldd r24,Y+1
258 0086 845F subi r24,lo8(-(12))
259 0088 24E0 ldi r18,lo8(4)
260 008a 4381 ldd r20,Z+3
261 008c 5481 ldd r21,Z+4
262 008e 682F mov r22,r24
263 0090 8F2D mov r24,r15
264 0092 820F add r24,r18
265 0094 0E94 0000 call GUI_PutNoStr
60:menu.c **** xx += MMENU_WIDTH;
267 .LM16:
268 0098 FCE1 ldi r31,lo8(28)
269 009a FF0E add r15,r31
61:menu.c **** GUI_RLine(xx, mwin->y + 12, mwin->y + 19, Windows_C); // 顯示主菜單分界線
271 .LM17:
272 009c 8981 ldd r24,Y+1
273 009e 982F mov r25,r24
274 00a0 945F subi r25,lo8(-(12))
275 00a2 2091 0000 lds r18,Windows_C
276 00a6 8D5E subi r24,lo8(-(19))
277 00a8 482F mov r20,r24
278 00aa 692F mov r22,r25
279 00ac 8F2D mov r24,r15
280 00ae 0E94 0000 call GUI_RLine
282 .LM18:
283 00b2 E394 inc r14
284 00b4 D1CF rjmp .L14
285 .L12:
62:menu.c **** }
63:menu.c ****
64:menu.c **** return(1);
287 .LM19:
288 00b6 81E0 ldi r24,lo8(1)
289 00b8 90E0 ldi r25,hi8(1)
290 .L2:
291 /* epilogue: frame size=0 */
292 00ba DF91 pop r29
293 00bc CF91 pop r28
294 00be 1F91 pop r17
295 00c0 0F91 pop r16
296 00c2 FF90 pop r15
297 00c4 EF90 pop r14
298 00c6 0895 ret
299 /* epilogue end (size=7) */
300 /* function GUI_MMenuDraw size 91 (78) */
307 .Lscope1:
311 .global GUI_MMenuSelect
313 GUI_MMenuSelect:
65:menu.c **** }
66:menu.c ****
67:menu.c ****
68:menu.c **** /****************************************************************************
69:menu.c **** * 名稱:GUI_MMenuSelect()
70:menu.c **** * 功能:當(dāng)前主菜單,反色,表示當(dāng)前主菜單。
71:menu.c **** * 入口參數(shù):men 主菜單句柄
72:menu.c **** * no 所選的主菜單項
73:menu.c **** * 出口參數(shù):無
74:menu.c **** ****************************************************************************/
75:menu.c **** void GUI_MMenuSelect(MMENU *men, uint8 no)
76:menu.c **** { WINDOWS *mwin;
315 .LM20:
316 /* prologue: frame size=0 */
317 00c8 EF92 push r14
318 00ca FF92 push r15
319 00cc 0F93 push r16
320 00ce 1F93 push r17
321 00d0 CF93 push r28
322 00d2 DF93 push r29
323 /* prologue end (size=6) */
324 00d4 7C01 movw r14,r24
325 00d6 062F mov r16,r22
77:menu.c **** uint8 xx;
78:menu.c **** /* 參數(shù)過濾 */
79:menu.c **** if( (men->no)==0 ) return;
327 .LM21:
328 00d8 FC01 movw r30,r24
329 00da 8281 ldd r24,Z+2
330 00dc 8823 tst r24
331 00de 21F1 breq .L15
80:menu.c **** if( no>(men->no) ) return;
333 .LM22:
334 00e0 8617 cp r24,r22
335 00e2 10F1 brlo .L15
81:menu.c **** mwin = men->win; // 取得窗口句柄
337 .LM23:
338 00e4 C081 ld r28,Z
339 00e6 D181 ldd r29,Z+1
82:menu.c **** /* 判斷是否可以顯示主菜單 */
83:menu.c **** if( (mwin->hight)<50 ) return;
341 .LM24:
342 00e8 8B81 ldd r24,Y+3
343 00ea 8233 cpi r24,lo8(50)
344 00ec E8F0 brlo .L15
84:menu.c **** if( (mwin->with)<50 ) return;
346 .LM25:
347 00ee 8A81 ldd r24,Y+2
348 00f0 8233 cpi r24,lo8(50)
349 00f2 D0F0 brlo .L15
85:menu.c **** /* 顯示下劃線 */
86:menu.c **** xx = mwin->x + (no)*MMENU_WIDTH;
351 .LM26:
352 00f4 8CE1 ldi r24,lo8(28)
353 00f6 689F mul r22,r24
354 00f8 C001 movw r24,r0
355 00fa 1124 clr r1
356 00fc 1881 ld r17,Y
357 00fe 180F add r17,r24
87:menu.c **** GUI_ExchangeColor();
359 .LM27:
360 0100 0E94 0000 call GUI_ExchangeColor
88:menu.c **** GUI_PutNoStr(xx+4, mwin->y + 12, men->str[no], 4); // 書寫主菜單文字
362 .LM28:
363 0104 E02F mov r30,r16
364 0106 FF27 clr r31
365 0108 EE0F add r30,r30
366 010a FF1F adc r31,r31
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -