📄 menu.lis
字号:
0026 ; { //MenuCount DisplayString Subs ChildrenMenus ParentMenus
0026 ; {5, "1.Time Set" , NullSubs, TimeMenu, Null},
0026 ; {5, "2.Voice Center", NullSubs, VoiceMenu, Null},
0026 ; {5, "3.Robot Control", NullSubs, RobotMenu, Null},
0026 ; {5, "4.Flash Option", NullSubs, FlashMenu, Null},
0026 ; {5, "5.Back", NullSubs, MainMenu, MainMenu},
0026 ; };
0026 ; //------------------------------------------------------------------------------
0026 ;
0026 ;
0026 ;
0026 ;
0026 ;
0026 ;
0026 ; /***********************
0026 ; * 全局变量声明区 *
0026 ; ***********************/
0026 ; struct MenuItem (*MenuPoint) = MainMenu; //结构体指针,指向结构体后由内部函数指针指向功能函数
0026 ; unsigned char DisplayStart = 0; //显示时的第一个菜单项
0026 ; unsigned char UserChoose = 0; //用户所选菜单项
0026 ; unsigned char DisplayPoint = 0; //显示指针
0026 ; unsigned MaxItems; //同级最大菜单数
0026 ; unsigned char ShowCount=2; //同屏显示菜单数
0026 ;
0026 ;
0026 ; /***********************
0026 ; *显示函数区 *
0026 ; ***********************/
0026 ; void ShowMenu(void)
0026 ; {
0026 .dbline 141
0026 ; unsigned char n;
0026 ; MaxItems = MenuPoint[0].MenuCount;//定义最大同级菜单
0026 E091D800 lds R30,_MenuPoint
002A F091D900 lds R31,_MenuPoint+1
002E 2080 ldd R2,z+0
0030 3324 clr R3
0032 30920100 sts _MaxItems+1,R3
0036 20920000 sts _MaxItems,R2
003A .dbline 142
003A ; DisplayPoint = DisplayStart;
003A 2090DA00 lds R2,_DisplayStart
003E 2092DC00 sts _DisplayPoint,R2
0042 .dbline 143
0042 ; for(n=0;DisplayPoint<MaxItems&&n<ShowCount;n++)
0042 4427 clr R20
0044 2EC0 xjmp L30
0046 L27:
0046 .dbline 144
0046 ; {if(DisplayPoint==UserChoose)
0046 .dbline 144
0046 2090DB00 lds R2,_UserChoose
004A 3090DC00 lds R3,_DisplayPoint
004E 3214 cp R3,R2
0050 51F4 brne L31
0052 .dbline 145
0052 ; LCD_write_string(0,n,"->");
0052 80E0 ldi R24,<L33
0054 90E0 ldi R25,>L33
0056 9983 std y+1,R25
0058 8883 std y+0,R24
005A 242F mov R18,R20
005C 3327 clr R19
005E 0027 clr R16
0060 1127 clr R17
0062 0E940000 xcall _LCD_write_string
0066 L31:
0066 .dbline 146
0066 2090DC00 lds R2,_DisplayPoint
006A 3324 clr R3
006C 822D mov R24,R2
006E 8F5F subi R24,255 ; addi 1
0070 8093DC00 sts _DisplayPoint,R24
0074 09E0 ldi R16,9
0076 10E0 ldi R17,0
0078 9101 movw R18,R2
007A 0E940000 xcall empy16s
007E F801 movw R30,R16
0080 2090D800 lds R2,_MenuPoint
0084 3090D900 lds R3,_MenuPoint+1
0088 E20D add R30,R2
008A F31D adc R31,R3
008C 2180 ldd R2,z+1
008E 3280 ldd R3,z+2
0090 3982 std y+1,R3
0092 2882 std y+0,R2
0094 242F mov R18,R20
0096 3327 clr R19
0098 02E0 ldi R16,2
009A 10E0 ldi R17,0
009C 0E940000 xcall _LCD_write_string
00A0 .dbline 148
00A0 L28:
00A0 .dbline 143
00A0 4395 inc R20
00A2 L30:
00A2 .dbline 143
00A2 20900000 lds R2,_MaxItems
00A6 30900100 lds R3,_MaxItems+1
00AA 4090DC00 lds R4,_DisplayPoint
00AE 5524 clr R5
00B0 4214 cp R4,R2
00B2 5304 cpc R5,R3
00B4 20F4 brsh L34
00B6 2090DD00 lds R2,_ShowCount
00BA 4215 cp R20,R2
00BC 20F2 brlo L27
00BE L34:
00BE .dbline -2
00BE L26:
00BE 2296 adiw R28,2
00C0 0E940000 xcall pop_gset1
00C4 .dbline 0 ; func end
00C4 0895 ret
00C6 .dbsym r n 20 c
00C6 .dbend
00C6 .dbfunc e Menu_Change _Menu_Change fV
00C6 ; KeyNum -> R20
.even
00C6 _Menu_Change::
00C6 0E940000 xcall push_gset1
00CA 402F mov R20,R16
00CC .dbline -1
00CC .dbline 153
00CC ; LCD_write_string(2,n,MenuPoint[DisplayPoint++].DisplayString);
00CC ;
00CC ; }
00CC ;
00CC ; }
00CC ;
00CC ; void Menu_Change(unsigned char KeyNum)
00CC ; {
00CC .dbline 154
00CC ; if(KeyNum)
00CC 4423 tst R20
00CE 09F4 brne X3
00D0 E4C0 xjmp L36
00D2 X3:
00D2 .dbline 155
00D2 ; {
00D2 .dbline 156
00D2 ; switch(KeyNum)
00D2 5527 clr R21
00D4 4733 cpi R20,55
00D6 E0E0 ldi R30,0
00D8 5E07 cpc R21,R30
00DA 09F4 brne X4
00DC 53C0 xjmp L47
00DE X4:
00DE 87E3 ldi R24,55
00E0 90E0 ldi R25,0
00E2 8417 cp R24,R20
00E4 9507 cpc R25,R21
00E6 54F0 brlt L57
00E8 L56:
00E8 4033 cpi R20,48
00EA E0E0 ldi R30,0
00EC 5E07 cpc R21,R30
00EE 09F4 brne X5
00F0 A8C0 xjmp L55
00F2 X5:
00F2 4333 cpi R20,51
00F4 E0E0 ldi R30,0
00F6 5E07 cpc R21,R30
00F8 81F0 breq L41
00FA AEC0 xjmp L39
00FC L57:
00FC 4234 cpi R20,66
00FE E0E0 ldi R30,0
0100 5E07 cpc R21,R30
0102 B9F0 breq L44
0104 4234 cpi R20,66
0106 E0E0 ldi R30,0
0108 5E07 cpc R21,R30
010A 0CF4 brge X6
010C A5C0 xjmp L39
010E X6:
010E L58:
010E 4634 cpi R20,70
0110 E0E0 ldi R30,0
0112 5E07 cpc R21,R30
0114 09F4 brne X7
0116 4AC0 xjmp L50
0118 X7:
0118 9FC0 xjmp L39
011A X0:
011A .dbline 157
011A ; {
011A L41:
011A .dbline 159
011A ; case UP:
011A ; UserChoose --;
011A 8091DB00 lds R24,_UserChoose
011E 8150 subi R24,1
0120 8093DB00 sts _UserChoose,R24
0124 .dbline 160
0124 ; if (UserChoose ==255)
0124 8F3F cpi R24,255
0126 09F0 breq X8
0128 97C0 xjmp L39
012A X8:
012A .dbline 161
012A ; {
012A .dbline 162
012A ; UserChoose = 0;//上翻截至,如果要回滚赋值MaxItems-1
012A 2224 clr R2
012C 2092DB00 sts _UserChoose,R2
0130 .dbline 163
0130 ; }
0130 .dbline 164
0130 ; break;
0130 93C0 xjmp L39
0132 L44:
0132 .dbline 166
0132 ; case Esc:
0132 ; if (MenuPoint[UserChoose].ParentMenus != Null)
0132 2090DB00 lds R2,_UserChoose
0136 89E0 ldi R24,9
0138 829D mul R24,R2
013A F001 movw R30,R0
013C 2090D800 lds R2,_MenuPoint
0140 3090D900 lds R3,_MenuPoint+1
0144 E20D add R30,R2
0146 F31D adc R31,R3
0148 2780 ldd R2,z+7
014A 3084 ldd R3,z+8
014C 2220 tst R2
014E 19F4 brne X1
0150 3320 tst R3
0152 09F4 brne X9
0154 81C0 xjmp L39
0156 X9:
0156 X1:
0156 .dbline 167
0156 ; {
0156 .dbline 168
0156 ; MenuPoint = MenuPoint[UserChoose].ParentMenus;
0156 2090DB00 lds R2,_UserChoose
015A 89E0 ldi R24,9
015C 829D mul R24,R2
015E F001 movw R30,R0
0160 2090D800 lds R2,_MenuPoint
0164 3090D900 lds R3,_MenuPoint+1
0168 E20D add R30,R2
016A F31D adc R31,R3
016C 2780 ldd R2,z+7
016E 3084 ldd R3,z+8
0170 3092D900 sts _MenuPoint+1,R3
0174 2092D800 sts _MenuPoint,R2
0178 .dbline 169
0178 ; UserChoose = 0;
0178 2224 clr R2
017A 2092DB00 sts _UserChoose,R2
017E .dbline 170
017E ; DisplayStart = 0;
017E 2092DA00 sts _DisplayStart,R2
0182 .dbline 171
0182 ; }
0182 .dbline 172
0182 ; break;
0182 6AC0 xjmp L39
0184 L47:
0184 .dbline 174
0184 ; case Down:
0184 ; UserChoose ++;
0184 8091DB00 lds R24,_UserChoose
0188 8F5F subi R24,255 ; addi 1
018A 8093DB00 sts _UserChoose,R24
018E .dbline 175
018E ; if (UserChoose == MaxItems)
018E 20900000 lds R2,_MaxItems
0192 30900100 lds R3,_MaxItems+1
0196 482E mov R4,R24
0198 5524 clr R5
019A 4214 cp R4,R2
019C 5304 cpc R5,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -