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 + -
显示快捷键?