menusetup.lis
来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 596 行 · 第 1/2 页
LIS
596 行
.module MenuSetup.c
.area text(rom, con, rel)
.even
0000 _DispMenuSetupInit::
0000 2197 sbiw R28,1
0002 ; /******************************************************************************
0002 ; * MenuSetup.C - "设置"菜单 菜单函数使用模版
0002 ; ******************************************************************************/
0002 ; #include "MenuSetup.h"
0002 ;
0002 ;
0002 ; //设置
0002 ; void DispMenuSetupInit()
0002 ; {
0002 ; GUI_Clear();
0002 0E940000 xcall _GUI_Clear
0006 ; //--------------------
0006 ; //切换Bar显示内容
0006 ; //---------------------
0006 ; BarMenu=&MenuSetup[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,<_MenuSetup
0012 90E0 ldi R25,>_MenuSetup
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 ; //显示按键对应的文字提示,1-->"选择"
003A ; GUI_DispStringAt(*(Tip[language].Text+1),0,LCD_YSIZE-14);
003A 86E3 ldi R24,54
003C 8883 std y+0,R24
003E 2227 clr R18
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 ; BarMenuInit();//公共初始化部分
0086 0E940000 xcall _BarMenuInit
008A L1:
008A 2196 adiw R28,1
008C .dbline 0 ; func end
008C 0895 ret
.even
008E _DispMenuSetupDown::
008E ; }
008E ;
008E ; /*
008E ; *****************************************************************************
008E ; 菜单使用例程
008E ; 0.Jump2Menu + FlashMode_AutoInit/FlashMode_ManualInit
008E ; 跳转到任意菜单,FlashMode_AutoInit-->在BarMenuInit函数中执行PUSH;
008E ; FlashMode_ManualInit-->子菜单的Init函数中PUSH,看例子:DispMenuLanguageInit
008E ; 1.PUSH + POP
008E ; 执行一些功能,并使用LCD后,回到原有界面,回到原有界面--包括反显位置都恢复
008E ; 2.Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
008E ; 执行一些功能,并使用LCD后,执行如上调用,回到原有界面--包括反显位置都恢复
008E ; 3.POP
008E ; 执行一些功能,并使用LCD后,回到上层菜单,恢复上层界面
008E ; 4.Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
008E ; 执行一定功能后,但不占用LCD的话,直接界面不动
008E ;
008E ; *****************************************************************************
008E ; */
008E ; void DispMenuSetupDown(void)
008E ; {
008E ; POP();
008E 0E940000 xcall _POP
0092 L2:
0092 .dbline 0 ; func end
0092 0895 ret
.even
0094 _DispMenuSetupLeft::
0094 ; }
0094 ;
0094 ; void DispMenuSetupLeft(void)
0094 ; {
0094 ; BarMenuLeft();
0094 0E940000 xcall _BarMenuLeft
0098 L3:
0098 .dbline 0 ; func end
0098 0895 ret
.even
009A _DispMenuSetupRight::
009A ; }
009A ;
009A ; void DispMenuSetupRight(void)
009A ; {
009A ; BarMenuRight();
009A 0E940000 xcall _BarMenuRight
009E L4:
009E .dbline 0 ; func end
009E 0895 ret
.even
00A0 _DispMenuSetupUp::
00A0 0E940000 xcall push_gset1
00A4 2597 sbiw R28,5
00A6 ; }
00A6 ;
00A6 ; void DispMenuSetupUp(void)
00A6 ; {
00A6 ; switch(Item)
00A6 40910000 lds R20,_Item
00AA 5527 clr R21
00AC 4030 cpi R20,0
00AE 4507 cpc R20,R21
00B0 81F0 breq L9
00B2 X0:
00B2 4130 cpi R20,1
00B4 E0E0 ldi R30,0
00B6 5E07 cpc R21,R30
00B8 09F4 brne X2
00BA 54C0 xjmp L14
00BC X2:
00BC 4230 cpi R20,2
00BE E0E0 ldi R30,0
00C0 5E07 cpc R21,R30
00C2 09F4 brne X3
00C4 61C0 xjmp L16
00C6 X3:
00C6 4330 cpi R20,3
00C8 E0E0 ldi R30,0
00CA 5E07 cpc R21,R30
00CC 09F4 brne X4
00CE 75C0 xjmp L18
00D0 X4:
00D0 84C0 xjmp L6
00D2 X1:
00D2 ; {
00D2 L9:
00D2 ; case 0 ://时间设置选项
00D2 ; {
00D2 ; PUSH();
00D2 0E940000 xcall _PUSH
00D6 ; GUI_Clear();
00D6 0E940000 xcall _GUI_Clear
00DA ; if(language == CH)
00DA 20900000 lds R2,_language
00DE 2220 tst R2
00E0 61F4 brne L10
00E2 ; GUI_DispStringAtBar("时间设置",0,0,LCD_XSIZE,GUI_TA_HCENTER);
00E2 80E1 ldi R24,16
00E4 8C83 std y+4,R24
00E6 81E6 ldi R24,97
00E8 8A83 std y+2,R24
00EA 2224 clr R2
00EC 2882 std y+0,R2
00EE 2227 clr R18
00F0 00E0 ldi R16,<L12
00F2 10E0 ldi R17,>L12
00F4 0E940000 xcall _GUI_DispStringAtBar
00F8 0BC0 xjmp L11
00FA L10:
00FA ; else
00FA ; GUI_DispStringAtBar("Time Settings",0,0,LCD_XSIZE,GUI_TA_HCENTER);
00FA 80E1 ldi R24,16
00FC 8C83 std y+4,R24
00FE 81E6 ldi R24,97
0100 8A83 std y+2,R24
0102 2224 clr R2
0104 2882 std y+0,R2
0106 2227 clr R18
0108 00E0 ldi R16,<L13
010A 10E0 ldi R17,>L13
010C 0E940000 xcall _GUI_DispStringAtBar
0110 L11:
0110 ;
0110 ; //显示按键对应的文字提示,1-->"确定"
0110 ; GUI_DispStringAt(*(Tip[language].Text+2),1,LCD_YSIZE-14);
0110 86E3 ldi R24,54
0112 8883 std y+0,R24
0114 21E0 ldi R18,1
0116 20900000 lds R2,_language
011A 85E0 ldi R24,5
011C 829D mul R24,R2
011E F001 movw R30,R0
0120 80E0 ldi R24,<_Tip
0122 90E0 ldi R25,>_Tip
0124 E80F add R30,R24
0126 F91F adc R31,R25
0128 0590 lpm R0,Z+
012A 1490 lpm R1,Z
012C F001 movw R30,R0
012E 0481 ldd R16,z+4
0130 1581 ldd R17,z+5
0132 0E940000 xcall _GUI_DispStringAt
0136 ; //显示按键对应的文字提示,0-->"退出"
0136 ; GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);
0136 86E3 ldi R24,54
0138 8883 std y+0,R24
013A 29E4 ldi R18,73
013C 20900000 lds R2,_language
0140 85E0 ldi R24,5
0142 829D mul R24,R2
0144 F001 movw R30,R0
0146 80E0 ldi R24,<_Tip
0148 90E0 ldi R25,>_Tip
014A E80F add R30,R24
014C F91F adc R31,R25
014E 0590 lpm R0,Z+
0150 1490 lpm R1,Z
0152 F001 movw R30,R0
0154 0085 ldd R16,z+8
0156 1185 ldd R17,z+9
0158 0E940000 xcall _GUI_DispStringAt
015C ;
015C ; Time_Settings();//时间设置函数
015C 53D0 xcall _Time_Settings
015E ; POP();//返回到父菜单
015E 0E940000 xcall _POP
0162 ; break ;
0162 4CC0 xjmp L7
0164 L14:
0164 ; }
0164 ; case 1 :
0164 ; {
0164 ; //PUSH -->POP
0164 ; PUSH();
0164 0E940000 xcall _PUSH
0168 ; GUI_Clear();
0168 0E940000 xcall _GUI_Clear
016C ; GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
016C 2224 clr R2
016E 2882 std y+0,R2
0170 2227 clr R18
0172 00E0 ldi R16,<L15
0174 10E0 ldi R17,>L15
0176 0E940000 xcall _GUI_DispStringAt
017A ; GUI_Delay(10000);
017A 00E1 ldi R16,10000
017C 17E2 ldi R17,39
017E 0E940000 xcall _GUI_Delay
0182 ; POP();
0182 0E940000 xcall _POP
0186 ; break ;
0186 3AC0 xjmp L7
0188 L16:
0188 ; }
0188 ; case 2 :
0188 ; {
0188 ; //ReFlash = 1
0188 ; GUI_Clear();
0188 0E940000 xcall _GUI_Clear
018C ; GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
018C 2224 clr R2
018E 2882 std y+0,R2
0190 2227 clr R18
0192 00E0 ldi R16,<L15
0194 10E0 ldi R17,>L15
0196 0E940000 xcall _GUI_DispStringAt
019A ; GUI_Delay(10000);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?