⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menusetup.s

📁 Atmega64单片机程序(完整工程)
💻 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 + -