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 + -
显示快捷键?