📄 menusetup.s
字号:
.module MenuSetup.c
.area text(rom, con, rel)
.even
_DispMenuSetupInit::
sbiw R28,1
; /******************************************************************************
; * MenuSetup.C - "设置"菜单 菜单函数使用模版
; ******************************************************************************/
; #include "MenuSetup.h"
;
;
; //设置
; void DispMenuSetupInit()
; {
; GUI_Clear();
xcall _GUI_Clear
; //--------------------
; //切换Bar显示内容
; //---------------------
; BarMenu=&MenuSetup[language];
lds R2,_language
ldi R24,5
mul R24,R2
movw R2,R0
ldi R24,<_MenuSetup
ldi R25,>_MenuSetup
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),0,LCD_YSIZE-14);
ldi R24,54
std y+0,R24
clr R18
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
;
; BarMenuInit();//公共初始化部分
xcall _BarMenuInit
L1:
adiw R28,1
.dbline 0 ; func end
ret
.even
_DispMenuSetupDown::
; }
;
; /*
; *****************************************************************************
; 菜单使用例程
; 0.Jump2Menu + FlashMode_AutoInit/FlashMode_ManualInit
; 跳转到任意菜单,FlashMode_AutoInit-->在BarMenuInit函数中执行PUSH;
; FlashMode_ManualInit-->子菜单的Init函数中PUSH,看例子:DispMenuLanguageInit
; 1.PUSH + POP
; 执行一些功能,并使用LCD后,回到原有界面,回到原有界面--包括反显位置都恢复
; 2.Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
; 执行一些功能,并使用LCD后,执行如上调用,回到原有界面--包括反显位置都恢复
; 3.POP
; 执行一些功能,并使用LCD后,回到上层菜单,恢复上层界面
; 4.Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
; 执行一定功能后,但不占用LCD的话,直接界面不动
;
; *****************************************************************************
; */
; void DispMenuSetupDown(void)
; {
; POP();
xcall _POP
L2:
.dbline 0 ; func end
ret
.even
_DispMenuSetupLeft::
; }
;
; void DispMenuSetupLeft(void)
; {
; BarMenuLeft();
xcall _BarMenuLeft
L3:
.dbline 0 ; func end
ret
.even
_DispMenuSetupRight::
; }
;
; void DispMenuSetupRight(void)
; {
; BarMenuRight();
xcall _BarMenuRight
L4:
.dbline 0 ; func end
ret
.even
_DispMenuSetupUp::
xcall push_gset1
sbiw R28,5
; }
;
; void DispMenuSetupUp(void)
; {
; switch(Item)
lds R20,_Item
clr R21
cpi R20,0
cpc R20,R21
breq L9
X0:
cpi R20,1
ldi R30,0
cpc R21,R30
brne X2
xjmp L14
X2:
cpi R20,2
ldi R30,0
cpc R21,R30
brne X3
xjmp L16
X3:
cpi R20,3
ldi R30,0
cpc R21,R30
brne X4
xjmp L18
X4:
xjmp L6
X1:
; {
L9:
; case 0 ://时间设置选项
; {
; PUSH();
xcall _PUSH
; GUI_Clear();
xcall _GUI_Clear
; if(language == CH)
lds R2,_language
tst R2
brne L10
; GUI_DispStringAtBar("时间设置",0,0,LCD_XSIZE,GUI_TA_HCENTER);
ldi R24,16
std y+4,R24
ldi R24,97
std y+2,R24
clr R2
std y+0,R2
clr R18
ldi R16,<L12
ldi R17,>L12
xcall _GUI_DispStringAtBar
xjmp L11
L10:
; else
; GUI_DispStringAtBar("Time Settings",0,0,LCD_XSIZE,GUI_TA_HCENTER);
ldi R24,16
std y+4,R24
ldi R24,97
std y+2,R24
clr R2
std y+0,R2
clr R18
ldi R16,<L13
ldi R17,>L13
xcall _GUI_DispStringAtBar
L11:
;
; //显示按键对应的文字提示,1-->"确定"
; GUI_DispStringAt(*(Tip[language].Text+2),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+4
ldd R17,z+5
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
;
; Time_Settings();//时间设置函数
xcall _Time_Settings
; POP();//返回到父菜单
xcall _POP
; break ;
xjmp L7
L14:
; }
; case 1 :
; {
; //PUSH -->POP
; PUSH();
xcall _PUSH
; GUI_Clear();
xcall _GUI_Clear
; GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
clr R2
std y+0,R2
clr R18
ldi R16,<L15
ldi R17,>L15
xcall _GUI_DispStringAt
; GUI_Delay(10000);
ldi R16,10000
ldi R17,39
xcall _GUI_Delay
; POP();
xcall _POP
; break ;
xjmp L7
L16:
; }
; case 2 :
; {
; //ReFlash = 1
; GUI_Clear();
xcall _GUI_Clear
; GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
clr R2
std y+0,R2
clr R18
ldi R16,<L15
ldi R17,>L15
xcall _GUI_DispStringAt
; GUI_Delay(10000);
ldi R16,10000
ldi R17,39
xcall _GUI_Delay
; Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
ldi R18,3
ldi R24,<_FatherIndex-1
ldi R25,>_FatherIndex-1
lds R30,_Layer
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _Jump2Menu
; break ;
xjmp L7
L18:
; }
; case 3 :
; {
; //POP
; GUI_Clear();
xcall _GUI_Clear
; GUI_DispStringAt("Do Something \nthen Back to \nFather Menu!",0,0);
clr R2
std y+0,R2
clr R18
ldi R16,<L19
ldi R17,>L19
xcall _GUI_DispStringAt
; GUI_Delay(10000);
ldi R16,10000
ldi R17,39
xcall _GUI_Delay
; POP();
xcall _POP
; break ;
xjmp L7
L6:
; }
; default :
; {
; GUI_Clear();
xcall _GUI_Clear
; GUI_Delay(10000);
ldi R16,10000
ldi R17,39
xcall _GUI_Delay
; Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
clr R18
ldi R24,<_FatherIndex-1
ldi R25,>_FatherIndex-1
lds R30,_Layer
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _Jump2Menu
; return ;
L7:
L5:
adiw R28,5
xcall pop_gset1
.dbline 0 ; func end
ret
; save_Minute -> R20
; save_Hour -> R22
.even
_Time_Settings::
xcall push_gset2
sbiw R28,5
; }
; }
; }
;
;
; void Time_Settings(void)
; {
; INT8U save_Hour,save_Minute ;
;
; save_Hour=Hour ;
lds R22,_Hour
; save_Minute=Minute ;
lds R20,_Minute
;
; Key_Deal_Flag=0 ;
clr R2
sts _Key_Deal_Flag,R2
xjmp L23
L22:
; while(1)
; {
; GUITextMode=GUI_TEXTMODE_REVERSE ;
ldi R24,1
sts _GUITextMode,R24
; GUI_Display_Time(24,32);
ldi R18,32
ldi R16,24
xcall _GUI_Display_Time
; GUITextMode=GUI_TEXTMODE_NORMAL ;
clr R2
sts _GUITextMode,R2
;
; if(Key_Deal_Flag==1)
lds R24,_Key_Deal_Flag
cpi R24,1
breq X5
xjmp L25
X5:
; {
; if(Keyvalue==Key_Left)
lds R24,_Keyvalue
cpi R24,19
brne L27
; {
; Minute++;
lds R24,_Minute
subi R24,255 ; addi 1
sts _Minute,R24
; if(Minute>59)
ldi R24,59
lds R2,_Minute
cp R24,R2
brlo X6
xjmp L28
X6:
; {
; Minute=0 ;
clr R2
sts _Minute,R2
; Hour++;
lds R24,_Hour
subi R24,255 ; addi 1
sts _Hour,R24
; if(Hour>23)
ldi R24,23
lds R2,_Hour
cp R24,R2
brlo X7
xjmp L28
X7:
; Hour=0 ;
clr R2
sts _Hour,R2
; }
; }
xjmp L28
L27:
; else if(Keyvalue==Key_Right)
lds R24,_Keyvalue
cpi R24,20
brne L33
; {
; Minute--;
lds R24,_Minute
subi R24,1
sts _Minute,R24
; if(Minute==255)
cpi R24,255
breq X8
xjmp L34
X8:
; {
; Minute=59 ;
ldi R24,59
sts _Minute,R24
; Hour--;
lds R24,_Hour
subi R24,1
sts _Hour,R24
; if(Hour==255)
cpi R24,255
brne L34
; Hour=23 ;
ldi R24,23
sts _Hour,R24
; }
; }
xjmp L34
L33:
; //确认键
; else if(Keyvalue==Key_Up)
lds R24,_Keyvalue
cpi R24,18
brne L39
; {
; GUI_Clear();
xcall _GUI_Clear
; if(language==CH)
lds R2,_language
tst R2
brne L41
; GUI_DispStringAtBar("时间已设置",0,32,LCD_XSIZE,GUI_TA_HCENTER);
ldi R24,16
std y+4,R24
ldi R24,97
std y+2,R24
ldi R24,32
std y+0,R24
clr R18
ldi R16,<L43
ldi R17,>L43
xcall _GUI_DispStringAtBar
xjmp L42
L41:
; else
; GUI_DispStringAtBar("Time is set",0,32,LCD_XSIZE,GUI_TA_HCENTER);
ldi R24,16
std y+4,R24
ldi R24,97
std y+2,R24
ldi R24,32
std y+0,R24
clr R18
ldi R16,<L44
ldi R17,>L44
xcall _GUI_DispStringAtBar
L42:
;
; GUI_Delay(3000);
ldi R16,3000
ldi R17,11
xcall _GUI_Delay
;
; break ;
xjmp L24
L39:
;
; }
; //退出键
; else if(Keyvalue==Key_Down)
lds R24,_Keyvalue
cpi R24,17
brne L45
; {
; Hour=save_Hour ;
sts _Hour,R22
; Minute=save_Minute ;
sts _Minute,R20
;
; break ;
xjmp L24
L45:
L34:
L28:
; }
; Key_Deal_Flag=0 ;
clr R2
sts _Key_Deal_Flag,R2
; }
L25:
L23:
xjmp L22
L24:
; }
; Key_Deal_Flag=0 ;
clr R2
sts _Key_Deal_Flag,R2
L21:
adiw R28,5
xcall pop_gset2
.dbline 0 ; func end
ret
.area data(ram, con, rel)
L44:
.blkb 12
.area idata
.byte 'T,'i,'m,'e,32,'i,'s,32,'s,'e,'t,0
.area data(ram, con, rel)
L43:
.blkb 11
.area idata
.byte 202,177,188,228,210,209,201,232,214,195,0
.area data(ram, con, rel)
L19:
.blkb 41
.area idata
.byte 'D,'o,32,'S,'o,'m,'e,'t,'h,'i,'n,'g,32,10,'t,'h
.byte 'e,'n,32,'B,'a,'c,'k,32,'t,'o,32,10,'F,'a,'t,'h
.byte 'e,'r,32,'M,'e,'n,'u,33,0
.area data(ram, con, rel)
L15:
.blkb 39
.area idata
.byte 'D,'o,32,'S,'o,'m,'e,'t,'h,'i,'n,'g,32,10,'t,'h
.byte 'e,'n,32,'B,'a,'c,'k,32,'t,'o,32,10,'T,'h,'i,'s
.byte 32,'M,'e,'n,'u,33,0
.area data(ram, con, rel)
L13:
.blkb 14
.area idata
.byte 'T,'i,'m,'e,32,'S,'e,'t,'t,'i,'n,'g,'s,0
.area data(ram, con, rel)
L12:
.blkb 9
.area idata
.byte 202,177,188,228,201,232,214,195,0
.area data(ram, con, rel)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -