menupara.lis
来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 347 行
LIS
347 行
.module MenuPara.C
.area text(rom, con, rel)
.even
0000 _DispMenuParaInit::
0000 2197 sbiw R28,1
0002 ; /*这份代码经源码格式软件格式化过
0002 ; yang_hx@neusoft.com */
0002 ; /******************************************************************************
0002 ; * MenuPara.C - "参数"菜单 菜单函数使用模版
0002 ; ******************************************************************************/
0002 ; #include "SYS_Config.h"
0002 ; #include "GUI_Config.h"
0002 ; #include "GUI.H"
0002 ; #include "Menu.H"
0002 ;
0002 ;
0002 ; //参数
0002 ; void DispMenuParaInit()
0002 ; {
0002 ; //----------------------
0002 ; GUI_Clear();
0002 0E940000 xcall _GUI_Clear
0006 ; //--------------------
0006 ; //切换Bar显示内容
0006 ; //---------------------
0006 ; BarMenu=&MenuPara[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,<_MenuPara
0012 90E0 ldi R25,>_MenuPara
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),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 ; //公共初始化部分
0086 ; BarMenuInit();
0086 0E940000 xcall _BarMenuInit
008A L1:
008A 2196 adiw R28,1
008C .dbline 0 ; func end
008C 0895 ret
.even
008E _DispMenuParaUp::
008E 0E940000 xcall push_gset1
0092 2197 sbiw R28,1
0094 ; }
0094 ;
0094 ; /*
0094 ; *****************************************************************************
0094 ; 菜单使用例程
0094 ; 0.Jump2Menu + FlashMode_AutoInit/FlashMode_ManualInit
0094 ; 跳转到任意菜单,FlashMode_AutoInit-->在BarMenuInit函数中执行PUSH;
0094 ; FlashMode_ManualInit-->子菜单的Init函数中PUSH,看例子:DispMenuLanguageInit
0094 ; 1.PUSH + POP
0094 ; 执行一些功能,并使用LCD后,回到原有界面,回到原有界面--包括反显位置都恢复
0094 ; 2.Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
0094 ; 执行一些功能,并使用LCD后,执行如上调用,回到原有界面--包括反显位置都恢复
0094 ; 3.POP
0094 ; 执行一些功能,并使用LCD后,回到上层菜单,恢复上层界面
0094 ; 4.Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
0094 ; 执行一定功能后,但不占用LCD的话,直接界面不动
0094 ;
0094 ; *****************************************************************************
0094 ; */
0094 ; void DispMenuParaUp()
0094 ; {
0094 ; switch(Item)
0094 40910000 lds R20,_Item
0098 5527 clr R21
009A 4030 cpi R20,0
009C 4507 cpc R20,R21
009E 99F0 breq L6
00A0 X0:
00A0 4130 cpi R20,1
00A2 E0E0 ldi R30,0
00A4 5E07 cpc R21,R30
00A6 09F1 breq L8
00A8 4230 cpi R20,2
00AA E0E0 ldi R30,0
00AC 5E07 cpc R21,R30
00AE 79F1 breq L10
00B0 4330 cpi R20,3
00B2 E0E0 ldi R30,0
00B4 5E07 cpc R21,R30
00B6 09F4 brne X2
00B8 43C0 xjmp L12
00BA X2:
00BA 4430 cpi R20,4
00BC E0E0 ldi R30,0
00BE 5E07 cpc R21,R30
00C0 09F4 brne X3
00C2 4EC0 xjmp L14
00C4 X3:
00C4 59C0 xjmp L3
00C6 X1:
00C6 ; {
00C6 L6:
00C6 ; case 0 :
00C6 ; {
00C6 ; //Jump2Menu
00C6 ; GUI_Clear();
00C6 0E940000 xcall _GUI_Clear
00CA ; GUI_DispStringAt("Do Something \nthen Back to \nTop Menu!",0,0);
00CA 2224 clr R2
00CC 2882 std y+0,R2
00CE 2227 clr R18
00D0 00E0 ldi R16,<L7
00D2 10E0 ldi R17,>L7
00D4 0E940000 xcall _GUI_DispStringAt
00D8 ; GUI_Delay(5000);
00D8 08E8 ldi R16,5000
00DA 13E1 ldi R17,19
00DC 0E940000 xcall _GUI_Delay
00E0 ; Jump2Menu(MenuTopIndex,FlashMode_AutoInit);
00E0 21E0 ldi R18,1
00E2 0027 clr R16
00E4 0E940000 xcall _Jump2Menu
00E8 ; break ;
00E8 52C0 xjmp L4
00EA L8:
00EA ; }
00EA ; case 1 :
00EA ; {
00EA ; //PUSH -->POP
00EA ; PUSH();
00EA 0E940000 xcall _PUSH
00EE ; GUI_Clear();
00EE 0E940000 xcall _GUI_Clear
00F2 ; GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
00F2 2224 clr R2
00F4 2882 std y+0,R2
00F6 2227 clr R18
00F8 00E0 ldi R16,<L9
00FA 10E0 ldi R17,>L9
00FC 0E940000 xcall _GUI_DispStringAt
0100 ; GUI_Delay(5000);
0100 08E8 ldi R16,5000
0102 13E1 ldi R17,19
0104 0E940000 xcall _GUI_Delay
0108 ; POP();
0108 0E940000 xcall _POP
010C ; break ;
010C 40C0 xjmp L4
010E L10:
010E ; }
010E ; case 2 :
010E ; {
010E ; //ReFlash = 1
010E ; GUI_Clear();
010E 0E940000 xcall _GUI_Clear
0112 ; GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
0112 2224 clr R2
0114 2882 std y+0,R2
0116 2227 clr R18
0118 00E0 ldi R16,<L9
011A 10E0 ldi R17,>L9
011C 0E940000 xcall _GUI_DispStringAt
0120 ; GUI_Delay(5000);
0120 08E8 ldi R16,5000
0122 13E1 ldi R17,19
0124 0E940000 xcall _GUI_Delay
0128 ; Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
0128 23E0 ldi R18,3
012A 80E0 ldi R24,<_FatherIndex-1
012C 90E0 ldi R25,>_FatherIndex-1
012E E0910000 lds R30,_Layer
0132 FF27 clr R31
0134 E80F add R30,R24
0136 F91F adc R31,R25
0138 0081 ldd R16,z+0
013A 0E940000 xcall _Jump2Menu
013E ; break ;
013E 27C0 xjmp L4
0140 L12:
0140 ; }
0140 ; case 3 :
0140 ; {
0140 ; //POP
0140 ; GUI_Clear();
0140 0E940000 xcall _GUI_Clear
0144 ; GUI_DispStringAt("Do Something \nthen Back to \nFather Menu!",0,0);
0144 2224 clr R2
0146 2882 std y+0,R2
0148 2227 clr R18
014A 00E0 ldi R16,<L13
014C 10E0 ldi R17,>L13
014E 0E940000 xcall _GUI_DispStringAt
0152 ; GUI_Delay(5000);
0152 08E8 ldi R16,5000
0154 13E1 ldi R17,19
0156 0E940000 xcall _GUI_Delay
015A ; POP();
015A 0E940000 xcall _POP
015E ; break ;
015E 17C0 xjmp L4
0160 L14:
0160 ; }
0160 ; case 4 :
0160 ; {
0160 ; //No ReFlash
0160 ; //No Action Here!
0160 ; //Or The Action no need the LCD Disp
0160 ; Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
0160 2227 clr R18
0162 80E0 ldi R24,<_FatherIndex-1
0164 90E0 ldi R25,>_FatherIndex-1
0166 E0910000 lds R30,_Layer
016A FF27 clr R31
016C E80F add R30,R24
016E F91F adc R31,R25
0170 0081 ldd R16,z+0
0172 0E940000 xcall _Jump2Menu
0176 ; break ;
0176 0BC0 xjmp L4
0178 L3:
0178 ; }
0178 ; default :
0178 ; {
0178 ; Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
0178 2227 clr R18
017A 80E0 ldi R24,<_FatherIndex-1
017C 90E0 ldi R25,>_FatherIndex-1
017E E0910000 lds R30,_Layer
0182 FF27 clr R31
0184 E80F add R30,R24
0186 F91F adc R31,R25
0188 0081 ldd R16,z+0
018A 0E940000 xcall _Jump2Menu
018E ; return ;
018E L4:
018E L2:
018E 2196 adiw R28,1
0190 0E940000 xcall pop_gset1
0194 .dbline 0 ; func end
0194 0895 ret
.even
0196 _DispMenuParaDown::
0196 ; }
0196 ; }
0196 ; }
0196 ; void DispMenuParaDown()
0196 ; {
0196 ; POP();
0196 0E940000 xcall _POP
019A L17:
019A .dbline 0 ; func end
019A 0895 ret
.even
019C _DispMenuParaLeft::
019C ; }
019C ;
019C ; void DispMenuParaLeft()
019C ; {
019C ; BarMenuLeft();
019C 0E940000 xcall _BarMenuLeft
01A0 L18:
01A0 .dbline 0 ; func end
01A0 0895 ret
.even
01A2 _DispMenuParaRight::
01A2 ; }
01A2 ; void DispMenuParaRight()
01A2 ; {
01A2 ; BarMenuRight();
01A2 0E940000 xcall _BarMenuRight
01A6 L19:
01A6 .dbline 0 ; func end
01A6 0895 ret
.area data(ram, con, rel)
0000 L13:
0000 .blkb 41
.area idata
0000 446F20536F6D657468696E67200A7468 .byte 'D,'o,32,'S,'o,'m,'e,'t,'h,'i,'n,'g,32,10,'t,'h
0010 656E204261636B20746F200A46617468 .byte 'e,'n,32,'B,'a,'c,'k,32,'t,'o,32,10,'F,'a,'t,'h
0020 6572204D656E752100 .byte 'e,'r,32,'M,'e,'n,'u,33,0
.area data(ram, con, rel)
0029 L9:
0029 .blkb 39
.area idata
0029 446F20536F6D657468696E67200A7468 .byte 'D,'o,32,'S,'o,'m,'e,'t,'h,'i,'n,'g,32,10,'t,'h
0039 656E204261636B20746F200A54686973 .byte 'e,'n,32,'B,'a,'c,'k,32,'t,'o,32,10,'T,'h,'i,'s
0049 204D656E752100 .byte 32,'M,'e,'n,'u,33,0
.area data(ram, con, rel)
0050 L7:
0050 .blkb 38
.area idata
0050 446F20536F6D657468696E67200A7468 .byte 'D,'o,32,'S,'o,'m,'e,'t,'h,'i,'n,'g,32,10,'t,'h
0060 656E204261636B20746F200A546F7020 .byte 'e,'n,32,'B,'a,'c,'k,32,'t,'o,32,10,'T,'o,'p,32
0070 4D656E752100 .byte 'M,'e,'n,'u,33,0
.area data(ram, con, rel)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?