menulanguage.lis

来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 209 行

LIS
209
字号
                        .module MenuLanguage.C
                        .area text(rom, con, rel)
                        .even
 0000           _DispMenuLanguageInit::
 0000 2197              sbiw R28,1
 0002           ; /******************************************************************************
 0002           ;  * MenuLanguage.C - 语言切换模版
 0002           ;  ******************************************************************************/
 0002           ; #include "SYS_Config.h"
 0002           ; #include "GUI_Config.h"
 0002           ; #include "GUI.H"
 0002           ; #include "Menu.H"
 0002           ; 
 0002           ; /*
 0002           ; 这里是语言切换界面,这里也演示了如何通过提前修改Item Where
 0002           ; void DispMenuLanguageInit()函数中:
 0002           ; -----------------------------
 0002           ;     if(Flash == FlashMode_ManualInit){//首次进入本层菜单,调整Item where
 0002           ;         PUSH();
 0002           ;         Item = language;
 0002           ;         Where = Item;
 0002           ;     }
 0002           ; -----------------------------
 0002           ; 
 0002           ; */
 0002           ; //语言
 0002           ; //Bar型菜单
 0002           ; void DispMenuLanguageInit()
 0002           ; {
 0002           ; //----------------------
 0002           ;     GUI_Clear();
 0002 0E940000          xcall _GUI_Clear
 0006           ; //--------------------
 0006           ; //切换Bar显示内容
 0006           ; //-----------------
 0006           ;     BarMenu = &MenuLanguage[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,<_MenuLanguage
 0012 90E0              ldi R25,>_MenuLanguage
 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           ; 
 003A           ;     //显示按键对应的文字提示,1-->"选择"
 003A           ;     GUI_DispStringAt(*(Tip[language].Text+1),1,LCD_YSIZE-14);
 003A 86E3              ldi R24,54
 003C 8883              std y+0,R24
 003E 21E0              ldi R18,1
 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           ;       if(Flash == FlashMode_ManualInit)
 0086 80910000          lds R24,_Flash
 008A 8230              cpi R24,2
 008C 41F4              brne L2
 008E           ;       {//首次进入本层菜单,调整Item where
 008E           ;         PUSH();
 008E 0E940000          xcall _PUSH
 0092           ;         Item = language;
 0092 20900000          lds R2,_language
 0096 20920000          sts _Item,R2
 009A           ;         Where = Item;
 009A 20920000          sts _Where,R2
 009E           ;     }
 009E           L2:
 009E           ;     //公共初始化部分
 009E           ;     BarMenuInit();
 009E 0E940000          xcall _BarMenuInit
 00A2           L1:
 00A2 2196              adiw R28,1
 00A4                   .dbline 0 ; func end
 00A4 0895              ret
                        .even
 00A6           _DispMenuLanguageUp::
 00A6           ; }
 00A6           ; /*
 00A6           ; ************************************************************
 00A6           ; *   FIXME!
 00A6           ; *   这里是做语言切换的
 00A6           ; *   但是这会有一个有意思的问题:
 00A6           ; *   我们的菜单保存机制是备份过去的父菜单的Text等信息的,因此即便是更换了语言,
 00A6           ; *   这个保存的信息依然没有被更换,就是说,在这里切换语言后,显示的父索引还是没有变
 00A6           ; *   改正方法:
 00A6           ; *   通常语言切换的地方就一个路径而已,因此更换语言后正确修改保存的信息...
 00A6           ; ************************************************************
 00A6           ; */
 00A6           ; void DispMenuLanguageUp()
 00A6           ; {
 00A6           ; //-----------
 00A6           ;     PUSH();
 00A6 0E940000          xcall _PUSH
 00AA           ; //-------------------
 00AA           ;     GUI_Clear();
 00AA 0E940000          xcall _GUI_Clear
 00AE           ;     if(Item==0)
 00AE 20900000          lds R2,_Item
 00B2 2220              tst R2
 00B4 21F4              brne L5
 00B6           ;         language = CH;
 00B6 2224              clr R2
 00B8 20920000          sts _language,R2
 00BC 07C0              xjmp L6
 00BE           L5:
 00BE           ;         
 00BE           ; 	else if(Item==1)
 00BE 80910000          lds R24,_Item
 00C2 8130              cpi R24,1
 00C4 19F4              brne L7
 00C6           ;         language = EN;
 00C6 81E0              ldi R24,1
 00C8 80930000          sts _language,R24
 00CC           L7:
 00CC           L6:
 00CC           ; 		
 00CC           ;     GUI_Delay(10);
 00CC 0AE0              ldi R16,10
 00CE 10E0              ldi R17,0
 00D0 0E940000          xcall _GUI_Delay
 00D4           ;       
 00D4           ;     GUI_Clear();
 00D4 0E940000          xcall _GUI_Clear
 00D8           ; //-------------------
 00D8           ;     POP();
 00D8 0E940000          xcall _POP
 00DC           L4:
 00DC                   .dbline 0 ; func end
 00DC 0895              ret
                        .even
 00DE           _DispMenuLanguageDown::
 00DE           ; //-------------------
 00DE           ; }
 00DE           ; void DispMenuLanguageDown()
 00DE           ; {
 00DE           ;     POP();
 00DE 0E940000          xcall _POP
 00E2           L9:
 00E2                   .dbline 0 ; func end
 00E2 0895              ret
                        .even
 00E4           _DispMenuLanguageLeft::
 00E4           ; }
 00E4           ; void DispMenuLanguageLeft()
 00E4           ; {
 00E4           ;     BarMenuLeft();
 00E4 0E940000          xcall _BarMenuLeft
 00E8           L10:
 00E8                   .dbline 0 ; func end
 00E8 0895              ret
                        .even
 00EA           _DispMenuLanguageRight::
 00EA           ; }
 00EA           ; void DispMenuLanguageRight()
 00EA           ; {
 00EA           ;     BarMenuRight();
 00EA 0E940000          xcall _BarMenuRight
 00EE           L11:
 00EE                   .dbline 0 ; func end
 00EE 0895              ret

⌨️ 快捷键说明

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