📄 menulanguage.s
字号:
.module MenuLanguage.C
.area text(rom, con, rel)
.even
_DispMenuLanguageInit::
sbiw R28,1
; /******************************************************************************
; * MenuLanguage.C - 语言切换模版
; ******************************************************************************/
; #include "SYS_Config.h"
; #include "GUI_Config.h"
; #include "GUI.H"
; #include "Menu.H"
;
; /*
; 这里是语言切换界面,这里也演示了如何通过提前修改Item Where
; void DispMenuLanguageInit()函数中:
; -----------------------------
; if(Flash == FlashMode_ManualInit){//首次进入本层菜单,调整Item where
; PUSH();
; Item = language;
; Where = Item;
; }
; -----------------------------
;
; */
; //语言
; //Bar型菜单
; void DispMenuLanguageInit()
; {
; //----------------------
; GUI_Clear();
xcall _GUI_Clear
; //--------------------
; //切换Bar显示内容
; //-----------------
; BarMenu = &MenuLanguage[language];
lds R2,_language
ldi R24,5
mul R24,R2
movw R2,R0
ldi R24,<_MenuLanguage
ldi R25,>_MenuLanguage
add R2,R24
adc R3,R25
sts _BarMenu+1,R3
sts _BarMenu,R2
; ItemNum = (*BarMenu).TextNum;
movw R30,R2
adiw R30,2
lpm R30,Z
sts _ItemNum,R30
; DispItem = (*BarMenu).Text;
movw R30,R2
lpm R0,Z+
lpm R1,Z
movw R30,R0
sts _DispItem+1,R31
sts _DispItem,R30
;
; //用户的初始化代码请放在这里
; //显示父菜单名字
;
; //显示按键对应的文字提示,1-->"选择"
; GUI_DispStringAt(*(Tip[language].Text+1),1,LCD_YSIZE-14);
ldi R24,54
std y+0,R24
ldi R18,1
lds R2,_language
ldi R24,5
mul R24,R2
movw R30,R0
ldi R24,<_Tip
ldi R25,>_Tip
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ldd R16,z+2
ldd R17,z+3
xcall _GUI_DispStringAt
; //显示按键对应的文字提示,0-->"退出"
; GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);
ldi R24,54
std y+0,R24
ldi R18,73
lds R2,_language
ldi R24,5
mul R24,R2
movw R30,R0
ldi R24,<_Tip
ldi R25,>_Tip
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ldd R16,z+8
ldd R17,z+9
xcall _GUI_DispStringAt
;
; if(Flash == FlashMode_ManualInit)
lds R24,_Flash
cpi R24,2
brne L2
; {//首次进入本层菜单,调整Item where
; PUSH();
xcall _PUSH
; Item = language;
lds R2,_language
sts _Item,R2
; Where = Item;
sts _Where,R2
; }
L2:
; //公共初始化部分
; BarMenuInit();
xcall _BarMenuInit
L1:
adiw R28,1
.dbline 0 ; func end
ret
.even
_DispMenuLanguageUp::
; }
; /*
; ************************************************************
; * FIXME!
; * 这里是做语言切换的
; * 但是这会有一个有意思的问题:
; * 我们的菜单保存机制是备份过去的父菜单的Text等信息的,因此即便是更换了语言,
; * 这个保存的信息依然没有被更换,就是说,在这里切换语言后,显示的父索引还是没有变
; * 改正方法:
; * 通常语言切换的地方就一个路径而已,因此更换语言后正确修改保存的信息...
; ************************************************************
; */
; void DispMenuLanguageUp()
; {
; //-----------
; PUSH();
xcall _PUSH
; //-------------------
; GUI_Clear();
xcall _GUI_Clear
; if(Item==0)
lds R2,_Item
tst R2
brne L5
; language = CH;
clr R2
sts _language,R2
xjmp L6
L5:
;
; else if(Item==1)
lds R24,_Item
cpi R24,1
brne L7
; language = EN;
ldi R24,1
sts _language,R24
L7:
L6:
;
; GUI_Delay(10);
ldi R16,10
ldi R17,0
xcall _GUI_Delay
;
; GUI_Clear();
xcall _GUI_Clear
; //-------------------
; POP();
xcall _POP
L4:
.dbline 0 ; func end
ret
.even
_DispMenuLanguageDown::
; //-------------------
; }
; void DispMenuLanguageDown()
; {
; POP();
xcall _POP
L9:
.dbline 0 ; func end
ret
.even
_DispMenuLanguageLeft::
; }
; void DispMenuLanguageLeft()
; {
; BarMenuLeft();
xcall _BarMenuLeft
L10:
.dbline 0 ; func end
ret
.even
_DispMenuLanguageRight::
; }
; void DispMenuLanguageRight()
; {
; BarMenuRight();
xcall _BarMenuRight
L11:
.dbline 0 ; func end
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -