⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.lst

📁 一个基于MEGA16的GUI
💻 LST
📖 第 1 页 / 共 4 页
字号:
   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()函数设置显示颜色及背景色。
   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        **** * 入口参数:无
  18:menu.c        **** * 出口参数:无
  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        **** * 入口参数:men		主菜单句柄
  38:menu.c        **** * 出口参数:返回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        ****    /* 参数过滤 */
  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        **** * 功能:当前主菜单,反色,表示当前主菜单。
  71:menu.c        **** * 入口参数:men		主菜单句柄
  72:menu.c        **** *          no		所选的主菜单项
  73:menu.c        **** * 出口参数:无
  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        ****    /* 参数过滤 */
  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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -