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

📄 menu.lst

📁 一个基于MEGA16的GUI
💻 LST
📖 第 1 页 / 共 4 页
字号:
 367 010c EE0D      		add r30,r14
 368 010e FF1D      		adc r31,r15
 369 0110 8981      		ldd r24,Y+1
 370 0112 845F      		subi r24,lo8(-(12))
 371 0114 24E0      		ldi r18,lo8(4)
 372 0116 4381      		ldd r20,Z+3
 373 0118 5481      		ldd r21,Z+4
 374 011a 682F      		mov r22,r24
 375 011c 812F      		mov r24,r17
 376 011e 820F      		add r24,r18
 377 0120 0E94 0000 		call GUI_PutNoStr
  89:menu.c        ****    GUI_ExchangeColor();
 379               	.LM29:
 380 0124 0E94 0000 		call GUI_ExchangeColor
 381               	.L15:
 382               	/* epilogue: frame size=0 */
 383 0128 DF91      		pop r29
 384 012a CF91      		pop r28
 385 012c 1F91      		pop r17
 386 012e 0F91      		pop r16
 387 0130 FF90      		pop r15
 388 0132 EF90      		pop r14
 389 0134 0895      		ret
 390               	/* epilogue end (size=7) */
 391               	/* function GUI_MMenuSelect size 55 (42) */
 397               	.Lscope2:
 401               	.global	GUI_MMenuNSelect
 403               	GUI_MMenuNSelect:
  90:menu.c        **** //   GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, Windows_C);
  91:menu.c        **** }
  92:menu.c        **** 
  93:menu.c        **** 
  94:menu.c        **** /****************************************************************************
  95:menu.c        **** * 名称:GUI_MMenuNSelect()
  96:menu.c        **** * 功能:取消当前主菜单,去除反色
  97:menu.c        **** * 入口参数:men		主菜单句柄
  98:menu.c        **** *          no		所选的主菜单项
  99:menu.c        **** * 出口参数:无
 100:menu.c        **** ****************************************************************************/
 101:menu.c        **** void  GUI_MMenuNSelect(MMENU *men, uint8 no)
 102:menu.c        **** {  WINDOWS  *mwin;
 405               	.LM30:
 406               	/* prologue: frame size=0 */
 407 0136 CF93      		push r28
 408 0138 DF93      		push r29
 409               	/* prologue end (size=2) */
 410 013a EC01      		movw r28,r24
 103:menu.c        ****    uint8  xx;
 104:menu.c        **** 
 105:menu.c        ****    /* 参数过滤 */
 106:menu.c        ****    if( (men->no)==0 ) return;
 412               	.LM31:
 413 013c 8A81      		ldd r24,Y+2
 414 013e 8823      		tst r24
 415 0140 11F1      		breq .L20
 107:menu.c        ****    if( no>(men->no) ) return;
 417               	.LM32:
 418 0142 8617      		cp r24,r22
 419 0144 00F1      		brlo .L20
 108:menu.c        ****   
 109:menu.c        ****    mwin = men->win;						// 取得窗口句柄
 421               	.LM33:
 422 0146 A881      		ld r26,Y
 423 0148 B981      		ldd r27,Y+1
 110:menu.c        ****    /* 判断是否可以显示主菜单 */
 111:menu.c        ****    if( (mwin->hight)<50 ) return;
 425               	.LM34:
 426 014a FD01      		movw r30,r26
 427 014c 8381      		ldd r24,Z+3
 428 014e 8233      		cpi r24,lo8(50)
 429 0150 D0F0      		brlo .L20
 112:menu.c        ****    if( (mwin->with)<50 ) return;
 431               	.LM35:
 432 0152 8281      		ldd r24,Z+2
 433 0154 8233      		cpi r24,lo8(50)
 434 0156 B8F0      		brlo .L20
 113:menu.c        ****    
 114:menu.c        ****    /* 显示下划线 */
 115:menu.c        ****    xx = mwin->x + no*MMENU_WIDTH;
 436               	.LM36:
 437 0158 8CE1      		ldi r24,lo8(28)
 438 015a 689F      		mul r22,r24
 439 015c C001      		movw r24,r0
 440 015e 1124      		clr r1
 441 0160 3C91      		ld r19,X
 442 0162 380F      		add r19,r24
 116:menu.c        ****    GUI_PutNoStr(xx+4, mwin->y + 12, men->str[no], 4);			// 书写主菜单文字
 444               	.LM37:
 445 0164 E62F      		mov r30,r22
 446 0166 FF27      		clr r31
 447 0168 EE0F      		add r30,r30
 448 016a FF1F      		adc r31,r31
 449 016c EC0F      		add r30,r28
 450 016e FD1F      		adc r31,r29
 451 0170 ED01      		movw r28,r26
 452 0172 8981      		ldd r24,Y+1
 453 0174 845F      		subi r24,lo8(-(12))
 454 0176 24E0      		ldi r18,lo8(4)
 455 0178 4381      		ldd r20,Z+3
 456 017a 5481      		ldd r21,Z+4
 457 017c 682F      		mov r22,r24
 458 017e 832F      		mov r24,r19
 459 0180 820F      		add r24,r18
 460 0182 0E94 0000 		call GUI_PutNoStr
 461               	.L20:
 462               	/* epilogue: frame size=0 */
 463 0186 DF91      		pop r29
 464 0188 CF91      		pop r28
 465 018a 0895      		ret
 466               	/* epilogue end (size=3) */
 467               	/* function GUI_MMenuNSelect size 43 (38) */
 472               	.Lscope3:
 475               	.global	GUI_SMenuDraw
 477               	GUI_SMenuDraw:
 117:menu.c        **** }
 118:menu.c        **** 
 119:menu.c        **** 
 120:menu.c        **** 
 121:menu.c        **** /****************************************************************************
 122:menu.c        **** * 名称:GUI_SMenuDraw()
 123:menu.c        **** * 功能:显示子菜单,加上边框。
 124:menu.c        **** * 入口参数:men		子菜单句柄
 125:menu.c        **** * 出口参数:返回0表示操作失败,返回1表示操作成功
 126:menu.c        **** ****************************************************************************/
 127:menu.c        **** uint8  GUI_SMenuDraw(SMENU *men)
 128:menu.c        **** {  WINDOWS  *mwin;
 479               	.LM38:
 480               	/* prologue: frame size=0 */
 481 018c AF92      		push r10
 482 018e BF92      		push r11
 483 0190 CF92      		push r12
 484 0192 DF92      		push r13
 485 0194 EF92      		push r14
 486 0196 FF92      		push r15
 487 0198 0F93      		push r16
 488 019a 1F93      		push r17
 489 019c CF93      		push r28
 490 019e DF93      		push r29
 491               	/* prologue end (size=10) */
 492 01a0 5C01      		movw r10,r24
 129:menu.c        ****    uint8   xx, yy;
 130:menu.c        ****    uint8    i;
 131:menu.c        **** 
 132:menu.c        ****    mwin = men->win;
 494               	.LM39:
 495 01a2 DC01      		movw r26,r24
 496 01a4 CD90      		ld r12,X+
 497 01a6 DC90      		ld r13,X
 133:menu.c        ****    /* 判断是否可以显示主菜单 */
 134:menu.c        ****    if( (mwin->hight)<50 ) return(0);
 499               	.LM40:
 500 01a8 E601      		movw r28,r12
 501 01aa 8B81      		ldd r24,Y+3
 502 01ac 8233      		cpi r24,lo8(50)
 503 01ae 20F0      		brlo .L43
 135:menu.c        ****    if( (mwin->with)<50 ) return(0);
 505               	.LM41:
 506 01b0 F601      		movw r30,r12
 507 01b2 7281      		ldd r23,Z+2
 508 01b4 7233      		cpi r23,lo8(50)
 509 01b6 18F4      		brsh .L27
 510               	.L43:
 511 01b8 80E0      		ldi r24,lo8(0)
 512 01ba 90E0      		ldi r25,hi8(0)
 513 01bc B9C0      		rjmp .L25
 514               	.L27:
 136:menu.c        ****     
 137:menu.c        ****    /* 画菜子单项。下拉子菜单,以向左下拉为原则,若右边溢出则以右下拉显示 */
 138:menu.c        ****    xx = mwin->x;
 516               	.LM42:
 517 01be D601      		movw r26,r12
 518 01c0 FC90      		ld r15,X
 139:menu.c        ****    xx += (men->mmenu_no)*MMENU_WIDTH;
 520               	.LM43:
 521 01c2 E501      		movw r28,r10
 522 01c4 EA81      		ldd r30,Y+2
 523 01c6 8CE1      		ldi r24,lo8(28)
 524 01c8 E89F      		mul r30,r24
 525 01ca C001      		movw r24,r0
 526 01cc 1124      		clr r1
 527 01ce F80E      		add r15,r24
 140:menu.c        ****    yy = mwin->y + 19;
 529               	.LM44:
 530 01d0 E601      		movw r28,r12
 531 01d2 8981      		ldd r24,Y+1
 532 01d4 8D5E      		subi r24,lo8(-(19))
 533 01d6 682F      		mov r22,r24
 141:menu.c        ****    yy +=  (men->no) * 8 + 2;
 535               	.LM45:
 536 01d8 E501      		movw r28,r10
 537 01da 1B81      		ldd r17,Y+3
 538 01dc 110F      		lsl r17
 539 01de 110F      		lsl r17
 540 01e0 110F      		lsl r17
 541 01e2 180F      		add r17,r24
 542 01e4 1E5F      		subi r17,lo8(-(2))
 142:menu.c        ****    if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) ) 
 544               	.LM46:
 545 01e6 4F2D      		mov r20,r15
 546 01e8 5527      		clr r21
 547 01ea 9A01      		movw r18,r20
 548 01ec 265D      		subi r18,lo8(-(42))
 549 01ee 3F4F      		sbci r19,hi8(-(42))
 550 01f0 8C91      		ld r24,X
 551 01f2 870F      		add r24,r23
 552 01f4 912D      		mov r25,__zero_reg__
 553 01f6 911D      		adc r25,__zero_reg__
 554 01f8 0197      		sbiw r24,1
 555 01fa 8217      		cp r24,r18
 556 01fc 9307      		cpc r25,r19
 557 01fe 3CF1      		brlt .L28
 558 0200 CF2D      		mov r28,r15
 559 0202 C65D      		subi r28,lo8(-(42))
 143:menu.c        ****    {  /* 以左下拉为原则显示子菜单 */
 144:menu.c        ****       if( (men->mmenu_no) == 0 )
 561               	.LM47:
 562 0204 EE23      		tst r30
 563 0206 71F4      		brne .L29
 145:menu.c        ****       {
 146:menu.c        ****          GUI_RLine(xx+SMENU_WIDTH, mwin->y + 19, yy, Windows_C);
 565               	.LM48:
 566 0208 2091 0000 		lds r18,Windows_C
 567 020c 412F      		mov r20,r17
 568 020e 8C2F      		mov r24,r28
 569 0210 0E94 0000 		call GUI_RLine
 147:menu.c        ****          GUI_HLine(xx, yy, xx+SMENU_WIDTH, Windows_C);
 571               	.LM49:
 572 0214 2091 0000 		lds r18,Windows_C
 573 0218 4C2F      		mov r20,r28
 574 021a 612F      		mov r22,r17
 575 021c 8F2D      		mov r24,r15
 576 021e 0E94 0000 		call GUI_HLine
 577 0222 07C0      		rjmp .L30
 578               	.L29:
 148:menu.c        ****       }
 149:menu.c        ****       else
 150:menu.c        ****       {  GUI_Rectangle(xx, mwin->y + 19, xx+SMENU_WIDTH, yy, Windows_C);
 580               	.LM50:
 581 0224 0091 0000 		lds r16,Windows_C
 582 0228 212F      		mov r18,r17
 583 022a 4C2F      		mov r20,r28
 584 022c 8F2D      		mov r24,r15
 585 022e 0E94 0000 		call GUI_Rectangle
 586               	.L30:
 151:menu.c        ****       }
 152:menu.c        ****       GUI_HLine(xx+1, mwin->y + 19, xx+MMENU_WIDTH-1, Back_G );
 588               	.LM51:
 589 0232 9F2D      		mov r25,r15
 590 0234 955E      		subi r25,lo8(-(27))
 591 0236 E601      		movw r28,r12
 592 0238 8981      		ldd r24,Y+1
 593 023a 8D5E      		subi r24,lo8(-(19))
 594 023c 2091 0000 		lds r18,Back_G
 595 0240 492F      		mov r20,r25
 596 0242 682F      		mov r22,r24
 597 0244 8F2D      		mov r24,r15
 598 0246 8F5F      		subi r24,lo8(-(1))
 599 0248 0E94 0000 		call GUI_HLine
 600 024c 2EC0      		rjmp .L31
 601               	.L28:
 153:menu.c        ****       
 154:menu.c        ****    }
 155:menu.c        ****    else
 156:menu.c        ****    {  /* 以右下拉为原则 */
 157:menu.c        ****       if( (xx+MMENU_WIDTH) == (mwin->x + mwin->with - 1) )
 603               	.LM52:
 604 024e 445E      		subi r20,lo8(-(28))
 605 0250 5F4F      		sbci r21,hi8(-(28))
 606 0252 CF2D      		mov r28,r15
 607 0254 CE50      		subi r28,lo8(-(-14))
 608 0256 2CE1      		ldi r18,lo8(28)
 609 0258 E22E      		mov r14,r18
 610 025a EF0C      		add r14,r15
 611 025c 4817      		cp r20,r24
 612 025e 5907      		cpc r21,r25
 613 0260 71F4      		brne .L32
 158:menu.c        ****       {  GUI_RLine(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 19, yy, Windows_C);
 615               	.LM53:
 616 0262 2091 0000 		lds r18,Windows_C
 617 0266 412F      		mov r20,r17
 618 0268 8C2F      		mov r24,r28
 619 026a 0E94 0000 		call GUI_RLine
 159:menu.c        ****          GUI_HLine(xx-(SMENU_WIDTH-MMENU_WIDTH), yy, xx+MMENU_WIDTH, Windows_C);
 621               	.LM54:
 622 026e 2091 0000 		lds r18,Windows_C
 623 0272 4E2D      		mov r20,r14
 624 0274 612F      		mov r22,r17
 625 0276 8C2F      		mov r24,r28
 626 0278 0E94 0000 		call GUI_HLine

⌨️ 快捷键说明

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