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