📄 menu.lst
字号:
627 027c 07C0 rjmp .L33
628 .L32:
160:menu.c ****
161:menu.c **** }
162:menu.c **** else
163:menu.c **** {
164:menu.c **** GUI_Rectangle(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 19, xx+MMENU_WIDTH, yy,Windows_C);
630 .LM55:
631 027e 0091 0000 lds r16,Windows_C
632 0282 212F mov r18,r17
633 0284 4E2D mov r20,r14
634 0286 8C2F mov r24,r28
635 0288 0E94 0000 call GUI_Rectangle
636 .L33:
165:menu.c **** }
166:menu.c **** GUI_HLine(xx+1, mwin->y + 19, xx+MMENU_WIDTH-1,Back_G );
638 .LM56:
639 028c 9F2D mov r25,r15
640 028e 955E subi r25,lo8(-(27))
641 0290 F601 movw r30,r12
642 0292 8181 ldd r24,Z+1
643 0294 8D5E subi r24,lo8(-(19))
644 0296 2091 0000 lds r18,Back_G
645 029a 492F mov r20,r25
646 029c 682F mov r22,r24
647 029e 8F2D mov r24,r15
648 02a0 8F5F subi r24,lo8(-(1))
649 02a2 0E94 0000 call GUI_HLine
167:menu.c ****
168:menu.c **** xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
651 .LM57:
652 02a6 F2EF ldi r31,lo8(-14)
653 02a8 FF0E add r15,r31
654 .L31:
169:menu.c **** }
170:menu.c ****
171:menu.c **** /* 显示菜单文字 */
172:menu.c **** xx++;
656 .LM58:
657 02aa F394 inc r15
173:menu.c **** yy = mwin->y + 19 + 2;
659 .LM59:
660 02ac E601 movw r28,r12
661 02ae 1981 ldd r17,Y+1
662 02b0 1B5E subi r17,lo8(-(21))
174:menu.c **** for(i=0; i<(men->no); i++)
664 .LM60:
665 02b2 EE24 clr r14
666 .L42:
667 02b4 F501 movw r30,r10
668 02b6 8381 ldd r24,Z+3
669 02b8 E816 cp r14,r24
670 02ba C0F5 brsh .L41
175:menu.c **** { if( i == (men->state) ) // 判断所选择的菜单项
672 .LM61:
673 02bc E501 movw r28,r10
674 02be 8A85 ldd r24,Y+10
675 02c0 CF2C mov r12,r15
676 02c2 C394 inc r12
677 02c4 212F mov r18,r17
678 02c6 285F subi r18,lo8(-(8))
679 02c8 4F2D mov r20,r15
680 02ca 485D subi r20,lo8(-(40))
681 02cc CE2D mov r28,r14
682 02ce DD27 clr r29
683 02d0 D12E mov r13,r17
684 02d2 D394 inc r13
685 02d4 E816 cp r14,r24
686 02d6 B1F4 brne .L37
176:menu.c **** { /* 显示背景色 */
177:menu.c **** GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+8, Windows_C);
688 .LM62:
689 02d8 0091 0000 lds r16,Windows_C
690 02dc 612F mov r22,r17
691 02de 8F2D mov r24,r15
692 02e0 0E94 0000 call GUI_RectangleFill
178:menu.c **** /* 显示菜单字符 */
179:menu.c **** GUI_ExchangeColor();
694 .LM63:
695 02e4 0E94 0000 call GUI_ExchangeColor
180:menu.c **** GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 书写子菜单文字
697 .LM64:
698 02e8 CC0F add r28,r28
699 02ea DD1F adc r29,r29
700 02ec CA0D add r28,r10
701 02ee DB1D adc r29,r11
702 02f0 28E0 ldi r18,lo8(8)
703 02f2 4C81 ldd r20,Y+4
704 02f4 5D81 ldd r21,Y+5
705 02f6 6D2D mov r22,r13
706 02f8 8C2D mov r24,r12
707 02fa 0E94 0000 call GUI_PutNoStr
181:menu.c **** GUI_ExchangeColor();
709 .LM65:
710 02fe 0E94 0000 call GUI_ExchangeColor
711 0302 11C0 rjmp .L38
712 .L37:
182:menu.c **** }
183:menu.c **** else
184:menu.c **** { /* 显示背景色 */
185:menu.c **** GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+8,Windows_C);
714 .LM66:
715 0304 0091 0000 lds r16,Windows_C
716 0308 612F mov r22,r17
717 030a 8F2D mov r24,r15
718 030c 0E94 0000 call GUI_RectangleFill
186:menu.c **** /* 显示菜单字符 */
187:menu.c **** GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 书写子菜单文字
720 .LM67:
721 0310 CC0F add r28,r28
722 0312 DD1F adc r29,r29
723 0314 CA0D add r28,r10
724 0316 DB1D adc r29,r11
725 0318 28E0 ldi r18,lo8(8)
726 031a 4C81 ldd r20,Y+4
727 031c 5D81 ldd r21,Y+5
728 031e 6D2D mov r22,r13
729 0320 8C2D mov r24,r12
730 0322 0E94 0000 call GUI_PutNoStr
731 .L38:
188:menu.c **** }
189:menu.c ****
190:menu.c **** yy += 8;
733 .LM68:
734 0326 185F subi r17,lo8(-(8))
736 .LM69:
737 0328 E394 inc r14
738 032a C4CF rjmp .L42
739 .L41:
191:menu.c **** }
192:menu.c ****
193:menu.c **** return(1);
741 .LM70:
742 032c 81E0 ldi r24,lo8(1)
743 032e 90E0 ldi r25,hi8(1)
744 .L25:
745 /* epilogue: frame size=0 */
746 0330 DF91 pop r29
747 0332 CF91 pop r28
748 0334 1F91 pop r17
749 0336 0F91 pop r16
750 0338 FF90 pop r15
751 033a EF90 pop r14
752 033c DF90 pop r13
753 033e CF90 pop r12
754 0340 BF90 pop r11
755 0342 AF90 pop r10
756 0344 0895 ret
757 /* epilogue end (size=11) */
758 /* function GUI_SMenuDraw size 221 (200) */
766 .Lscope4:
771 .global GUI_SMenuSelect
773 GUI_SMenuSelect:
194:menu.c **** }
195:menu.c ****
196:menu.c ****
197:menu.c ****
198:menu.c **** /****************************************************************************
199:menu.c **** * 名称:GUI_SMenuSelect()
200:menu.c **** * 功能:选择新的子菜单。
201:menu.c **** * 入口参数:men 子菜单句柄
202:menu.c **** * old_no 原先选择的子菜单项
203:menu.c **** * new_no 现要选择的子菜单项
204:menu.c **** * 出口参数:无
205:menu.c **** ****************************************************************************/
206:menu.c **** void GUI_SMenuSelect(SMENU *men, uint8 old_no, uint8 new_no)
207:menu.c **** { WINDOWS *mwin;
775 .LM71:
776 /* prologue: frame size=0 */
777 0346 7F92 push r7
778 0348 8F92 push r8
779 034a 9F92 push r9
780 034c AF92 push r10
781 034e BF92 push r11
782 0350 CF92 push r12
783 0352 DF92 push r13
784 0354 EF92 push r14
785 0356 FF92 push r15
786 0358 0F93 push r16
787 035a 1F93 push r17
788 035c CF93 push r28
789 /* prologue end (size=12) */
790 035e 4C01 movw r8,r24
791 0360 C42E mov r12,r20
208:menu.c **** uint8 xx, yy;
209:menu.c ****
210:menu.c **** /* 参数过滤 */
211:menu.c **** if(old_no==new_no) return;
793 .LM72:
794 0362 6417 cp r22,r20
795 0364 09F4 brne .+2
796 0366 73C0 rjmp .L44
212:menu.c **** xx = men->no;
798 .LM73:
799 0368 FC01 movw r30,r24
800 036a 1381 ldd r17,Z+3
213:menu.c **** if( (old_no>xx) || (new_no>xx) ) return;
802 .LM74:
803 036c 1617 cp r17,r22
804 036e 08F4 brsh .+2
805 0370 6EC0 rjmp .L44
806 0372 1417 cp r17,r20
807 0374 08F4 brsh .+2
808 0376 6BC0 rjmp .L44
214:menu.c ****
215:menu.c **** /* 设置新的选择的子菜单项 */
216:menu.c **** men->state = new_no;
810 .LM75:
811 0378 4287 std Z+10,r20
217:menu.c ****
218:menu.c **** /* 进行菜单反相显示 */
219:menu.c **** mwin = men->win;
813 .LM76:
814 037a A080 ld r10,Z
815 037c B180 ldd r11,Z+1
220:menu.c **** xx = mwin->x;
817 .LM77:
818 037e F501 movw r30,r10
819 0380 1081 ld r17,Z
221:menu.c **** xx += (men->mmenu_no)*MMENU_WIDTH;
821 .LM78:
822 0382 FC01 movw r30,r24
823 0384 9281 ldd r25,Z+2
824 0386 8CE1 ldi r24,lo8(28)
825 0388 989F mul r25,r24
826 038a C001 movw r24,r0
827 038c 1124 clr r1
828 038e 180F add r17,r24
222:menu.c **** if( (xx+SMENU_WIDTH) > (mwin->x + mwin->with - 1) )
830 .LM79:
831 0390 212F mov r18,r17
832 0392 3327 clr r19
833 0394 265D subi r18,lo8(-(42))
834 0396 3F4F sbci r19,hi8(-(42))
835 0398 F501 movw r30,r10
836 039a 9081 ld r25,Z
837 039c 8281 ldd r24,Z+2
838 039e 890F add r24,r25
839 03a0 912D mov r25,__zero_reg__
840 03a2 911D adc r25,__zero_reg__
841 03a4 0197 sbiw r24,1
842 03a6 8217 cp r24,r18
843 03a8 9307 cpc r25,r19
844 03aa 0CF4 brge .L48
223:menu.c **** { /* 以右下拉为原则显示子菜单,所以xx设置在左端 */
224:menu.c **** xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
846 .LM80:
847 03ac 1E50 subi r17,lo8(-(-14))
848 .L48:
225:menu.c **** }
226:menu.c **** xx++;
850 .LM81:
851 03ae 1F5F subi r17,lo8(-(1))
227:menu.c ****
228:menu.c **** /* 取消原子菜单选择 */
229:menu.c **** yy = mwin->y + 19 + 2;
853 .LM82:
854 03b0 F501 movw r30,r10
855 03b2 C181 ldd r28,Z+1
856 03b4 CB5E subi r28,lo8(-(21))
230:menu.c **** yy += old_no*8;
858 .LM83:
859 03b6 E62E mov r14,r22
860 03b8 FF24 clr r15
861 03ba C701 movw r24,r14
862 03bc 53E0 ldi r21,3
863 03be 880F 1: lsl r24
864 03c0 991F rol r25
865 03c2 5A95 dec r21
866 03c4 E1F7 brne 1b
867 03c6 C80F add r28,r24
231:menu.c **** GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+8, Windows_C);
869 .LM84:
870 03c8 8C2F mov r24,r28
871 03ca 885F subi r24,lo8(-(8))
872 03cc 48E2 ldi r20,lo8(40)
873 03ce 742E mov r7,r20
874 03d0 710E add r7,r17
875 03d2 0091 0000 lds r16,Windows_C
876 03d6 282F mov r18,r24
877 03d8 472D mov r20,r7
878 03da 6C2F mov r22,r28
879 03dc 812F mov r24,r17
880 03de 0E94 0000 call GUI_RectangleFill
232:menu.c **** GUI_PutNoStr(xx+1, yy+1, men->str[old_no], 8);
882 .LM85:
883 03e2 EE0C add r14,r14
884 03e4 FF1C adc r15,r15
885 03e6 E80C add r14,r8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -