menutop.lis

来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 1,561 行 · 第 1/5 页

LIS
1,561
字号
 0690 80910000          lds R24,_ItemNum
 0694 8150              subi R24,1
 0696 A82E              mov R10,R24
 0698           ;                     }
 0698 01C0              xjmp L69
 069A           L68:
 069A           ;                     else 
 069A           ;                     {
 069A           ;                         Menu_j--;
 069A AA94              dec R10
 069C           ;                     }
 069C           L69:
 069C           ;                     //显示其他项
 069C           ;                     for(Menu_i=DispMax-1;Menu_i>0;Menu_i--)
 069C 62E0              ldi R22,2
 069E 1DC0              xjmp L73
 06A0           L70:
 06A0           ;                     {
 06A0           ;                         BarDisp(*(DispItem+Menu_j),BarXOffset,(Menu_i-1)*BarYSize+BarYOffset,0);
 06A0 2224              clr R2
 06A2 2A82              std y+2,R2
 06A4 80E1              ldi R24,16
 06A6 869F              mul R24,R22
 06A8 802D              mov R24,R0
 06AA 8051              subi R24,16
 06AC 8883              std y+0,R24
 06AE 2227              clr R18
 06B0 82E0              ldi R24,2
 06B2 8A9D              mul R24,R10
 06B4 F001              movw R30,R0
 06B6 20900000          lds R2,_DispItem
 06BA 30900100          lds R3,_DispItem+1
 06BE E20D              add R30,R2
 06C0 F31D              adc R31,R3
 06C2 0081              ldd R16,z+0
 06C4 1181              ldd R17,z+1
 06C6 7CDD              xcall _BarDisp
 06C8           ;                         if(Menu_j==0)
 06C8 AA20              tst R10
 06CA 29F4              brne L74
 06CC           ;                         {
 06CC           ;                             Menu_j=ItemNum-1 ;
 06CC 80910000          lds R24,_ItemNum
 06D0 8150              subi R24,1
 06D2 A82E              mov R10,R24
 06D4           ;                         }
 06D4 01C0              xjmp L75
 06D6           L74:
 06D6           ;                         else 
 06D6           ;                         {
 06D6           ;                             Menu_j--;
 06D6 AA94              dec R10
 06D8           ;                         }
 06D8           L75:
 06D8           L71:
 06D8 6A95              dec R22
 06DA           L73:
 06DA 2224              clr R2
 06DC 2616              cp R2,R22
 06DE 00F3              brlo L70
 06E0           ;                     }
 06E0           ;                     Where=DispMax-1 ;
 06E0 82E0              ldi R24,2
 06E2 80930000          sts _Where,R24
 06E6           ;                     //当前位置依然末尾位置
 06E6           ;                 }
 06E6 2EC0              xjmp L67
 06E8           L66:
 06E8           ;                 else 
 06E8           ;                 {
 06E8           ;                     //单屏能显示完全部菜单项,"底部 下移"应当跳转到顶部反显(或者什么都不做)
 06E8           ;                     Where=0 ;
 06E8 2224              clr R2
 06EA 20920000          sts _Where,R2
 06EE           ;                     //取消底部原有反显   项ItemBack  位置ItemNum-1
 06EE           ;                     BarDisp(*(DispItem+ItemBack),BarXOffset,(ItemNum-1)*BarYSize+BarYOffset,0);
 06EE 2A82              std y+2,R2
 06F0 20900000          lds R2,_ItemNum
 06F4 80E1              ldi R24,16
 06F6 829D              mul R24,R2
 06F8 802D              mov R24,R0
 06FA 8051              subi R24,16
 06FC 8883              std y+0,R24
 06FE 2227              clr R18
 0700 82E0              ldi R24,2
 0702 849F              mul R24,R20
 0704 F001              movw R30,R0
 0706 20900000          lds R2,_DispItem
 070A 30900100          lds R3,_DispItem+1
 070E E20D              add R30,R2
 0710 F31D              adc R31,R3
 0712 0081              ldd R16,z+0
 0714 1181              ldd R17,z+1
 0716 54DD              xcall _BarDisp
 0718           ;                     //反显顶部 项Item  位置0
 0718           ;                     BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);
 0718 81E0              ldi R24,1
 071A 8A83              std y+2,R24
 071C 20900000          lds R2,_Where
 0720 80E1              ldi R24,16
 0722 829D              mul R24,R2
 0724 0882              std y+0,R0
 0726 2227              clr R18
 0728 20900000          lds R2,_Item
 072C 82E0              ldi R24,2
 072E 829D              mul R24,R2
 0730 F001              movw R30,R0
 0732 20900000          lds R2,_DispItem
 0736 30900100          lds R3,_DispItem+1
 073A E20D              add R30,R2
 073C F31D              adc R31,R3
 073E 0081              ldd R16,z+0
 0740 1181              ldd R17,z+1
 0742 3EDD              xcall _BarDisp
 0744           ;                     //反显
 0744           ;                 }
 0744           L67:
 0744           ;                 #ifdef RockBack 
 0744           ;             }
 0744           L63:
 0744           ;             #else 
 0744           ;         }
 0744           ;         else 
 0744           ;         {
 0744           ;             Item=ItemBack ;
 0744           ;             //Restore
 0744           ;         }
 0744           ;         #endif 
 0744           ;         
 0744           ;         Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);// jjx                    //维护滚动条
 0744 88E5              ldi R24,88
 0746 8A83              std y+2,R24
 0748 8EE5              ldi R24,94
 074A 8883              std y+0,R24
 074C 20910000          lds R18,_ItemNum
 0750 00910000          lds R16,_Item
 0754 7BD1              xcall _Bar
 0756           ;         Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
 0756 2227              clr R18
 0758 80E0              ldi R24,<_FatherIndex-1
 075A 90E0              ldi R25,>_FatherIndex-1
 075C E0910000          lds R30,_Layer
 0760 FF27              clr R31
 0762 E80F              add R30,R24
 0764 F91F              adc R31,R25
 0766 0081              ldd R16,z+0
 0768 0E940000          xcall _Jump2Menu
 076C           L59:
 076C 2396              adiw R28,3
 076E 0E940000          xcall pop_gset3
 0772                   .dbline 0 ; func end
 0772 0895              ret
                        .even
 0774           _DispIcoMenuInit::
 0774 2597              sbiw R28,5
 0776           ; }
 0776           ; 
 0776           ; /*********************************************************  
 0776           ; *****************************************************************************
 0776           ; * DispIcoMenuInit - 图标层菜单界面
 0776           ; * DESCRIPTION: -
 0776           ; * 共有5个函数
 0776           ; DispIcoMenuInit    DispIcoMenuUp   DispIcoMenuDown
 0776           ; DispIcoMenuLeft    DispIcoMenuRight
 0776           ; ******************************************************************************/
 0776           ; void DispIcoMenuInit()
 0776           ; {
 0776           ;         
 0776           ;         ItemNum=IcoMenu[language].TextNum ;//多少数据项
 0776 20900000          lds R2,_language
 077A 85E0              ldi R24,5
 077C 829D              mul R24,R2
 077E F001              movw R30,R0
 0780 80E0              ldi R24,<_IcoMenu+2
 0782 90E0              ldi R25,>_IcoMenu+2
 0784 E80F              add R30,R24
 0786 F91F              adc R31,R25
 0788 E491              lpm R30,Z
 078A E0930000          sts _ItemNum,R30
 078E           ;         DispItem=IcoMenu[language].Text ;//数据
 078E 85E0              ldi R24,5
 0790 829D              mul R24,R2
 0792 F001              movw R30,R0
 0794 80E0              ldi R24,<_IcoMenu
 0796 90E0              ldi R25,>_IcoMenu
 0798 E80F              add R30,R24
 079A F91F              adc R31,R25
 079C 0590              lpm R0,Z+
 079E 1490              lpm R1,Z
 07A0 F001              movw R30,R0
 07A2 F0930100          sts _DispItem+1,R31
 07A6 E0930000          sts _DispItem,R30
 07AA           ;         
 07AA           ;         GUI_Clear();
 07AA 0E940000          xcall _GUI_Clear
 07AE           ;         //-------------------
 07AE           ;         if(Flash==FlashMode_AutoInit)
 07AE 80910000          lds R24,_Flash
 07B2 8130              cpi R24,1
 07B4 31F4              brne L79
 07B6           ;         {
 07B6           ;             //从0进入,初始化Item等值
 07B6           ;             PUSH();
 07B6 A2DC              xcall _PUSH
 07B8           ;             Item=0 ;
 07B8 2224              clr R2
 07BA 20920000          sts _Item,R2
 07BE           ;             Where=0 ;
 07BE 20920000          sts _Where,R2
 07C2           ;         }
 07C2           L79:
 07C2           ;         GUI_DispStringAtBar(*(DispItem+Item),0,1,LCD_XSIZE,GUI_TA_HCENTER);//菜单名字
 07C2 80E1              ldi R24,16
 07C4 8C83              std y+4,R24
 07C6 81E6              ldi R24,97
 07C8 8A83              std y+2,R24
 07CA 81E0              ldi R24,1
 07CC 8883              std y+0,R24
 07CE 2227              clr R18
 07D0 20900000          lds R2,_Item
 07D4 82E0              ldi R24,2
 07D6 829D              mul R24,R2
 07D8 F001              movw R30,R0
 07DA 20900000          lds R2,_DispItem
 07DE 30900100          lds R3,_DispItem+1
 07E2 E20D              add R30,R2
 07E4 F31D              adc R31,R3
 07E6 0081              ldd R16,z+0
 07E8 1181              ldd R17,z+1
 07EA 0E940000          xcall _GUI_DispStringAtBar
 07EE           ;         GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);//图标
 07EE 80E1              ldi R24,16
 07F0 8883              std y+0,R24
 07F2 20E2              ldi R18,32
 07F4 20900000          lds R2,_Item
 07F8 82E0              ldi R24,2
 07FA 829D              mul R24,R2
 07FC F001              movw R30,R0
 07FE 80E0              ldi R24,<_icos
 0800 90E0              ldi R25,>_icos
 0802 E80F              add R30,R24
 0804 F91F              adc R31,R25
 0806 0591              lpm R16,Z+
 0808 1491              lpm R17,Z
 080A 0E940000          xcall _GUI_DrawIcon
 080E           ;         
 080E           ;         //显示按键对应的文字提示,1-->"选择"
 080E           ;         GUI_DispStringAt(*(Tip[language].Text+1),0,LCD_YSIZE-14);
 080E 86E3              ldi R24,54
 0810 8883              std y+0,R24
 0812 2227              clr R18
 0814 20900000          lds R2,_language
 0818 85E0              ldi R24,5
 081A 829D              mul R24,R2
 081C F001              movw R30,R0
 081E 80E0              ldi R24,<_Tip
 0820 90E0              ldi R25,>_Tip
 0822 E80F              add R30,R24
 0824 F91F              adc R31,R25
 0826 0590              lpm R0,Z+
 0828 1490              lpm R1,Z
 082A F001              movw R30,R0
 082C 0281              ldd R16,z+2
 082E 1381              ldd R17,z+3
 0830 0E940000          xcall _GUI_DispStringAt
 0834           ;         //显示按键对应的文字提示,0-->"退出"
 0834           ;           GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);
 0834 86E3              ldi R24,54
 0836 8883              std y+0,R24
 0838 29E4              ldi R18,73
 083A 20900000          lds R2,_language
 083E 85E0              ldi R24,5
 0840 829D              mul R24,R2
 0842 F001              movw R30,R0
 0844 80E0              ldi R24,<_Tip
 0846 90E0              ldi R25,>_Tip
 0848 E80F              add R30,R24
 084A F91F              adc R31,R25
 084C 0590              lpm R0,Z+
 084E 1490              lpm R1,Z
 0850 F001              movw R30,R0
 0852 0085              ldd R16,z+8
 0854 1185              ldd R17,z+9
 0856 0E940000          xcall _GUI_DispStringAt
 085A           ; 
 085A           ;         Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);   //jjx                  //维护滚动条
 085A 88E5              ldi R24,88
 085C 8A83              std y+2,R24
 085E 8EE5              ldi R24,94
 0860 8883              std y+0,R24
 0862 20910000          lds R18,_ItemNum
 0866 00910000          lds R16,_Item
 086A F0D0              xcall _Bar
 086C           ;         return ;
 086C           L77:
 086C 2596              adiw R28,5
 086E                   .dbline 0 ; func end
 086E 0895              ret
                        .even
 0870           _DispIcoMenuUp::
 0870 0E940000          xcall push_gset1
 0874           ;     }
 0874           ;     
 0874           ; /*
 0874           ; *****************************************************************************
 0874           ; * DispIcoMenuUp - 图标层下确定键的行为
 0874           ; * DESCRIPTION: -
 0874           ; * 分发处理各个跳转
 0874           ; * 第一层菜单的Up键处

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?