menusetup.lis

来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 596 行 · 第 1/2 页

LIS
596
字号
                        .module MenuSetup.c
                        .area text(rom, con, rel)
                        .even
 0000           _DispMenuSetupInit::
 0000 2197              sbiw R28,1
 0002           ; /******************************************************************************
 0002           ;  * MenuSetup.C - "设置"菜单  菜单函数使用模版
 0002           ;  ******************************************************************************/
 0002           ; #include "MenuSetup.h" 
 0002           ; 
 0002           ; 
 0002           ; //设置
 0002           ; void DispMenuSetupInit()
 0002           ; {
 0002           ;     GUI_Clear();
 0002 0E940000          xcall _GUI_Clear
 0006           ;     //--------------------
 0006           ;     //切换Bar显示内容
 0006           ;     //---------------------
 0006           ;     BarMenu=&MenuSetup[language];
 0006 20900000          lds R2,_language
 000A 85E0              ldi R24,5
 000C 829D              mul R24,R2
 000E 1001              movw R2,R0
 0010 80E0              ldi R24,<_MenuSetup
 0012 90E0              ldi R25,>_MenuSetup
 0014 280E              add R2,R24
 0016 391E              adc R3,R25
 0018 30920100          sts _BarMenu+1,R3
 001C 20920000          sts _BarMenu,R2
 0020           ;     ItemNum=(*BarMenu).TextNum ;
 0020 F101              movw R30,R2
 0022 3296              adiw R30,2
 0024 E491              lpm R30,Z
 0026 E0930000          sts _ItemNum,R30
 002A           ;     DispItem=(*BarMenu).Text ;
 002A F101              movw R30,R2
 002C 0590              lpm R0,Z+
 002E 1490              lpm R1,Z
 0030 F001              movw R30,R0
 0032 F0930100          sts _DispItem+1,R31
 0036 E0930000          sts _DispItem,R30
 003A           ;     
 003A           ;     //用户的初始化代码请放在这里
 003A           ;       
 003A           ;       //显示按键对应的文字提示,1-->"选择"
 003A           ;     GUI_DispStringAt(*(Tip[language].Text+1),0,LCD_YSIZE-14);
 003A 86E3              ldi R24,54
 003C 8883              std y+0,R24
 003E 2227              clr R18
 0040 20900000          lds R2,_language
 0044 85E0              ldi R24,5
 0046 829D              mul R24,R2
 0048 F001              movw R30,R0
 004A 80E0              ldi R24,<_Tip
 004C 90E0              ldi R25,>_Tip
 004E E80F              add R30,R24
 0050 F91F              adc R31,R25
 0052 0590              lpm R0,Z+
 0054 1490              lpm R1,Z
 0056 F001              movw R30,R0
 0058 0281              ldd R16,z+2
 005A 1381              ldd R17,z+3
 005C 0E940000          xcall _GUI_DispStringAt
 0060           ;     //显示按键对应的文字提示,0-->"退出"
 0060           ;       GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);
 0060 86E3              ldi R24,54
 0062 8883              std y+0,R24
 0064 29E4              ldi R18,73
 0066 20900000          lds R2,_language
 006A 85E0              ldi R24,5
 006C 829D              mul R24,R2
 006E F001              movw R30,R0
 0070 80E0              ldi R24,<_Tip
 0072 90E0              ldi R25,>_Tip
 0074 E80F              add R30,R24
 0076 F91F              adc R31,R25
 0078 0590              lpm R0,Z+
 007A 1490              lpm R1,Z
 007C F001              movw R30,R0
 007E 0085              ldd R16,z+8
 0080 1185              ldd R17,z+9
 0082 0E940000          xcall _GUI_DispStringAt
 0086           ; 
 0086           ;     BarMenuInit();//公共初始化部分
 0086 0E940000          xcall _BarMenuInit
 008A           L1:
 008A 2196              adiw R28,1
 008C                   .dbline 0 ; func end
 008C 0895              ret
                        .even
 008E           _DispMenuSetupDown::
 008E           ; }
 008E           ; 
 008E           ; /*
 008E           ; *****************************************************************************
 008E           ; 菜单使用例程
 008E           ; 0.Jump2Menu + FlashMode_AutoInit/FlashMode_ManualInit
 008E           ;   跳转到任意菜单,FlashMode_AutoInit-->在BarMenuInit函数中执行PUSH;
 008E           ;   FlashMode_ManualInit-->子菜单的Init函数中PUSH,看例子:DispMenuLanguageInit
 008E           ; 1.PUSH + POP
 008E           ;   执行一些功能,并使用LCD后,回到原有界面,回到原有界面--包括反显位置都恢复
 008E           ; 2.Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
 008E           ;   执行一些功能,并使用LCD后,执行如上调用,回到原有界面--包括反显位置都恢复
 008E           ; 3.POP
 008E           ;   执行一些功能,并使用LCD后,回到上层菜单,恢复上层界面
 008E           ; 4.Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
 008E           ;   执行一定功能后,但不占用LCD的话,直接界面不动
 008E           ; 
 008E           ; *****************************************************************************
 008E           ; */
 008E           ; void DispMenuSetupDown(void)
 008E           ; {
 008E           ;     POP();
 008E 0E940000          xcall _POP
 0092           L2:
 0092                   .dbline 0 ; func end
 0092 0895              ret
                        .even
 0094           _DispMenuSetupLeft::
 0094           ; }
 0094           ; 
 0094           ; void DispMenuSetupLeft(void)
 0094           ; {
 0094           ;     BarMenuLeft();
 0094 0E940000          xcall _BarMenuLeft
 0098           L3:
 0098                   .dbline 0 ; func end
 0098 0895              ret
                        .even
 009A           _DispMenuSetupRight::
 009A           ; }
 009A           ; 
 009A           ; void DispMenuSetupRight(void)
 009A           ; {
 009A           ;     BarMenuRight();
 009A 0E940000          xcall _BarMenuRight
 009E           L4:
 009E                   .dbline 0 ; func end
 009E 0895              ret
                        .even
 00A0           _DispMenuSetupUp::
 00A0 0E940000          xcall push_gset1
 00A4 2597              sbiw R28,5
 00A6           ; }
 00A6           ; 
 00A6           ; void DispMenuSetupUp(void)
 00A6           ; {
 00A6           ;     switch(Item)
 00A6 40910000          lds R20,_Item
 00AA 5527              clr R21
 00AC 4030              cpi R20,0
 00AE 4507              cpc R20,R21
 00B0 81F0              breq L9
 00B2           X0:
 00B2 4130              cpi R20,1
 00B4 E0E0              ldi R30,0
 00B6 5E07              cpc R21,R30
 00B8 09F4              brne X2
 00BA 54C0              xjmp L14
 00BC           X2:
 00BC 4230              cpi R20,2
 00BE E0E0              ldi R30,0
 00C0 5E07              cpc R21,R30
 00C2 09F4              brne X3
 00C4 61C0              xjmp L16
 00C6           X3:
 00C6 4330              cpi R20,3
 00C8 E0E0              ldi R30,0
 00CA 5E07              cpc R21,R30
 00CC 09F4              brne X4
 00CE 75C0              xjmp L18
 00D0           X4:
 00D0 84C0              xjmp L6
 00D2           X1:
 00D2           ;     {
 00D2           L9:
 00D2           ;         case 0 ://时间设置选项
 00D2           ;         {
 00D2           ; 		    PUSH();
 00D2 0E940000          xcall _PUSH
 00D6           ;             GUI_Clear();
 00D6 0E940000          xcall _GUI_Clear
 00DA           ;                       if(language == CH)
 00DA 20900000          lds R2,_language
 00DE 2220              tst R2
 00E0 61F4              brne L10
 00E2           ;                           GUI_DispStringAtBar("时间设置",0,0,LCD_XSIZE,GUI_TA_HCENTER);
 00E2 80E1              ldi R24,16
 00E4 8C83              std y+4,R24
 00E6 81E6              ldi R24,97
 00E8 8A83              std y+2,R24
 00EA 2224              clr R2
 00EC 2882              std y+0,R2
 00EE 2227              clr R18
 00F0 00E0              ldi R16,<L12
 00F2 10E0              ldi R17,>L12
 00F4 0E940000          xcall _GUI_DispStringAtBar
 00F8 0BC0              xjmp L11
 00FA           L10:
 00FA           ; 			else
 00FA           ; 			    GUI_DispStringAtBar("Time Settings",0,0,LCD_XSIZE,GUI_TA_HCENTER);
 00FA 80E1              ldi R24,16
 00FC 8C83              std y+4,R24
 00FE 81E6              ldi R24,97
 0100 8A83              std y+2,R24
 0102 2224              clr R2
 0104 2882              std y+0,R2
 0106 2227              clr R18
 0108 00E0              ldi R16,<L13
 010A 10E0              ldi R17,>L13
 010C 0E940000          xcall _GUI_DispStringAtBar
 0110           L11:
 0110           ; 			
 0110           ; 			//显示按键对应的文字提示,1-->"确定"
 0110           ;             GUI_DispStringAt(*(Tip[language].Text+2),1,LCD_YSIZE-14);
 0110 86E3              ldi R24,54
 0112 8883              std y+0,R24
 0114 21E0              ldi R18,1
 0116 20900000          lds R2,_language
 011A 85E0              ldi R24,5
 011C 829D              mul R24,R2
 011E F001              movw R30,R0
 0120 80E0              ldi R24,<_Tip
 0122 90E0              ldi R25,>_Tip
 0124 E80F              add R30,R24
 0126 F91F              adc R31,R25
 0128 0590              lpm R0,Z+
 012A 1490              lpm R1,Z
 012C F001              movw R30,R0
 012E 0481              ldd R16,z+4
 0130 1581              ldd R17,z+5
 0132 0E940000          xcall _GUI_DispStringAt
 0136           ;             //显示按键对应的文字提示,0-->"退出"
 0136           ;               GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);
 0136 86E3              ldi R24,54
 0138 8883              std y+0,R24
 013A 29E4              ldi R18,73
 013C 20900000          lds R2,_language
 0140 85E0              ldi R24,5
 0142 829D              mul R24,R2
 0144 F001              movw R30,R0
 0146 80E0              ldi R24,<_Tip
 0148 90E0              ldi R25,>_Tip
 014A E80F              add R30,R24
 014C F91F              adc R31,R25
 014E 0590              lpm R0,Z+
 0150 1490              lpm R1,Z
 0152 F001              movw R30,R0
 0154 0085              ldd R16,z+8
 0156 1185              ldd R17,z+9
 0158 0E940000          xcall _GUI_DispStringAt
 015C           ;             
 015C           ;                       Time_Settings();//时间设置函数
 015C 53D0              xcall _Time_Settings
 015E           ;                       POP();//返回到父菜单
 015E 0E940000          xcall _POP
 0162           ;             break ;
 0162 4CC0              xjmp L7
 0164           L14:
 0164           ;         }
 0164           ;         case 1 :
 0164           ;         {
 0164           ;             //PUSH  -->POP
 0164           ;             PUSH();
 0164 0E940000          xcall _PUSH
 0168           ;             GUI_Clear();
 0168 0E940000          xcall _GUI_Clear
 016C           ;             GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
 016C 2224              clr R2
 016E 2882              std y+0,R2
 0170 2227              clr R18
 0172 00E0              ldi R16,<L15
 0174 10E0              ldi R17,>L15
 0176 0E940000          xcall _GUI_DispStringAt
 017A           ;             GUI_Delay(10000);
 017A 00E1              ldi R16,10000
 017C 17E2              ldi R17,39
 017E 0E940000          xcall _GUI_Delay
 0182           ;             POP();
 0182 0E940000          xcall _POP
 0186           ;             break ;
 0186 3AC0              xjmp L7
 0188           L16:
 0188           ;         }
 0188           ;         case 2 :
 0188           ;         {
 0188           ;             //ReFlash = 1
 0188           ;             GUI_Clear();
 0188 0E940000          xcall _GUI_Clear
 018C           ;             GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
 018C 2224              clr R2
 018E 2882              std y+0,R2
 0190 2227              clr R18
 0192 00E0              ldi R16,<L15
 0194 10E0              ldi R17,>L15
 0196 0E940000          xcall _GUI_DispStringAt
 019A           ;             GUI_Delay(10000);

⌨️ 快捷键说明

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