menutop.lis

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

LIS
1,561
字号
 04C4 E20D              add R30,R2
 04C6 F31D              adc R31,R3
 04C8 0081              ldd R16,z+0
 04CA 1181              ldd R17,z+1
 04CC 79DE              xcall _BarDisp
 04CE           ;                         if(Menu_j==(ItemNum-1))
 04CE 80910000          lds R24,_ItemNum
 04D2 8150              subi R24,1
 04D4 A816              cp R10,R24
 04D6 11F4              brne L56
 04D8           ;                         {
 04D8           ;                             Menu_j=0 ;
 04D8 AA24              clr R10
 04DA           ;                         }
 04DA 01C0              xjmp L57
 04DC           L56:
 04DC           ;                         else 
 04DC           ;                         {
 04DC           ;                             Menu_j++;
 04DC A394              inc R10
 04DE           ;                         }
 04DE           L57:
 04DE           L53:
 04DE 6395              inc R22
 04E0           L55:
 04E0 6330              cpi R22,3
 04E2 18F3              brlo L52
 04E4           ;                     }
 04E4           ;                     Where=0 ;
 04E4 2224              clr R2
 04E6 20920000          sts _Where,R2
 04EA           ;                     //当前位置依然在开头的0位置
 04EA           ;                 }
 04EA 2BC0              xjmp L49
 04EC           L48:
 04EC           ;                 else 
 04EC           ;                 {
 04EC           ;                     //单屏能显示完全部菜单项,"顶部 上移"应当跳转到底部(或者什么都不做)
 04EC           ;                     //当仅仅只有一项的时候,应当一直在Where=0的地方反显的!!!这里也能实现,因为最后是反显的函数
 04EC           ;                     Where=ItemNum-1 ;
 04EC 80910000          lds R24,_ItemNum
 04F0 8150              subi R24,1
 04F2 80930000          sts _Where,R24
 04F6           ;                     //取消顶部的原有的反显  项ItemBack  位置0
 04F6           ;                     BarDisp(*(DispItem+ItemBack),BarXOffset,0*BarYSize+BarYOffset,0);
 04F6 2224              clr R2
 04F8 2A82              std y+2,R2
 04FA 2882              std y+0,R2
 04FC 2227              clr R18
 04FE 82E0              ldi R24,2
 0500 849F              mul R24,R20
 0502 F001              movw R30,R0
 0504 20900000          lds R2,_DispItem
 0508 30900100          lds R3,_DispItem+1
 050C E20D              add R30,R2
 050E F31D              adc R31,R3
 0510 0081              ldd R16,z+0
 0512 1181              ldd R17,z+1
 0514 55DE              xcall _BarDisp
 0516           ;                     //反显根部  项Item  位置ItemNum-1
 0516           ;                     BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);
 0516 81E0              ldi R24,1
 0518 8A83              std y+2,R24
 051A 20900000          lds R2,_Where
 051E 80E1              ldi R24,16
 0520 829D              mul R24,R2
 0522 0882              std y+0,R0
 0524 2227              clr R18
 0526 20900000          lds R2,_Item
 052A 82E0              ldi R24,2
 052C 829D              mul R24,R2
 052E F001              movw R30,R0
 0530 20900000          lds R2,_DispItem
 0534 30900100          lds R3,_DispItem+1
 0538 E20D              add R30,R2
 053A F31D              adc R31,R3
 053C 0081              ldd R16,z+0
 053E 1181              ldd R17,z+1
 0540 3FDE              xcall _BarDisp
 0542           ;                     //反显
 0542           ;                 }
 0542           L49:
 0542           ;                 #ifdef RockBack 
 0542           ;             }
 0542           L45:
 0542           ;             #else 
 0542           ;         }
 0542           ;         else 
 0542           ;         {
 0542           ;             Item=ItemBack ;
 0542           ;             //Restore
 0542           ;         }
 0542           ;         
 0542           ;         #endif 
 0542           ;         
 0542           ;         Bar(Item,ItemNum,125,120);       //jjx              //维护滚动条
 0542 88E7              ldi R24,120
 0544 8A83              std y+2,R24
 0546 8DE7              ldi R24,125
 0548 8883              std y+0,R24
 054A 20910000          lds R18,_ItemNum
 054E 00910000          lds R16,_Item
 0552 7CD2              xcall _Bar
 0554           ;         Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
 0554 2227              clr R18
 0556 80E0              ldi R24,<_FatherIndex-1
 0558 90E0              ldi R25,>_FatherIndex-1
 055A E0910000          lds R30,_Layer
 055E FF27              clr R31
 0560 E80F              add R30,R24
 0562 F91F              adc R31,R25
 0564 0081              ldd R16,z+0
 0566 0E940000          xcall _Jump2Menu
 056A           L41:
 056A 2396              adiw R28,3
 056C 0E940000          xcall pop_gset3
 0570                   .dbline 0 ; func end
 0570 0895              ret
 0572           ;       ItemBack -> R20
 0572           ;         Menu_i -> R22
 0572           ;         Menu_j -> R10
                        .even
 0572           _BarMenuRight::
 0572 0E940000          xcall push_gset3
 0576 2397              sbiw R28,3
 0578           ; }
 0578           ; 
 0578           ; 
 0578           ; //Bar项菜单向右按键的行为
 0578           ; //维护Bar显示
 0578           ; void BarMenuRight(void)
 0578           ; {
 0578           ;     INT8U Menu_i ;//计数变量 在菜单函数中用到
 0578           ;     INT8U Menu_j ;//计数变量
 0578           ;     INT8U ItemBack ;
 0578           ;       
 0578           ;     ItemBack=Item ;//---维护Item
 0578 40910000          lds R20,_Item
 057C           ;     if(Item==(ItemNum-1))
 057C 80910000          lds R24,_ItemNum
 0580 8150              subi R24,1
 0582 4817              cp R20,R24
 0584 21F4              brne L60
 0586           ;     {
 0586           ;         Item=0 ;
 0586 2224              clr R2
 0588 20920000          sts _Item,R2
 058C           ;     }
 058C 05C0              xjmp L61
 058E           L60:
 058E           ;     else 
 058E           ;     {
 058E           ;         Item++;
 058E 80910000          lds R24,_Item
 0592 8F5F              subi R24,255    ; addi 1
 0594 80930000          sts _Item,R24
 0598           ;     }
 0598           L61:
 0598           ; 
 0598           ;     //---维护显示
 0598           ;     if(Where!=(DispMin-1))
 0598 80910000          lds R24,_DispMin
 059C 8150              subi R24,1
 059E 20900000          lds R2,_Where
 05A2 2816              cp R2,R24
 05A4 09F4              brne X3
 05A6 55C0              xjmp L62
 05A8           X3:
 05A8           ;     {
 05A8           ;         //当前位置不为最末,两次反显
 05A8           ;         if (LessCPUUseage==TRUE)
 05A8 80910000          lds R24,_LessCPUUseage
 05AC 8130              cpi R24,1
 05AE F1F4              brne L64
 05B0           ;               {
 05B0           ;              GUI_SetEnFont(En_6x12);
 05B0 0027              clr R16
 05B2 0E940000          xcall _GUI_SetEnFont
 05B6           ;              GUI_DispCharAt(' ',BarXOffset,(Where++)*BarYSize+BarYOffset);
 05B6 20900000          lds R2,_Where
 05BA 3324              clr R3
 05BC 822D              mov R24,R2
 05BE 8F5F              subi R24,255    ; addi 1
 05C0 80930000          sts _Where,R24
 05C4 00E1              ldi R16,16
 05C6 10E0              ldi R17,0
 05C8 9101              movw R18,R2
 05CA 0E940000          xcall empy16s
 05CE 0883              std y+0,R16
 05D0 2227              clr R18
 05D2 00E2              ldi R16,32
 05D4 0E940000          xcall _GUI_DispCharAt
 05D8           ;              GUI_DispCharAt('>',BarXOffset,Where*BarYSize+BarYOffset);
 05D8 20900000          lds R2,_Where
 05DC 80E1              ldi R24,16
 05DE 829D              mul R24,R2
 05E0 0882              std y+0,R0
 05E2 2227              clr R18
 05E4 0EE3              ldi R16,62
 05E6 0E940000          xcall _GUI_DispCharAt
 05EA           ;         }
 05EA ACC0              xjmp L63
 05EC           L64:
 05EC           ; 		else
 05EC           ; 		{ 
 05EC           ;                  //原来位置取消反显   项是ItemBack  位置Where
 05EC           ;              BarDisp(*(DispItem+ItemBack),BarXOffset,(Where++)*BarYSize+BarYOffset,0);
 05EC 2224              clr R2
 05EE 2A82              std y+2,R2
 05F0 20900000          lds R2,_Where
 05F4 3324              clr R3
 05F6 822D              mov R24,R2
 05F8 8F5F              subi R24,255    ; addi 1
 05FA 80930000          sts _Where,R24
 05FE 00E1              ldi R16,16
 0600 10E0              ldi R17,0
 0602 9101              movw R18,R2
 0604 0E940000          xcall empy16s
 0608 0883              std y+0,R16
 060A 2227              clr R18
 060C 82E0              ldi R24,2
 060E 849F              mul R24,R20
 0610 F001              movw R30,R0
 0612 20900000          lds R2,_DispItem
 0616 30900100          lds R3,_DispItem+1
 061A E20D              add R30,R2
 061C F31D              adc R31,R3
 061E 0081              ldd R16,z+0
 0620 1181              ldd R17,z+1
 0622 CEDD              xcall _BarDisp
 0624           ;                  //下移后的位置反显   项是Item      位置Where+1(Where++实现)
 0624           ;              BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);
 0624 81E0              ldi R24,1
 0626 8A83              std y+2,R24
 0628 20900000          lds R2,_Where
 062C 80E1              ldi R24,16
 062E 829D              mul R24,R2
 0630 0882              std y+0,R0
 0632 2227              clr R18
 0634 20900000          lds R2,_Item
 0638 82E0              ldi R24,2
 063A 829D              mul R24,R2
 063C F001              movw R30,R0
 063E 20900000          lds R2,_DispItem
 0642 30900100          lds R3,_DispItem+1
 0646 E20D              add R30,R2
 0648 F31D              adc R31,R3
 064A 0081              ldd R16,z+0
 064C 1181              ldd R17,z+1
 064E B8DD              xcall _BarDisp
 0650           ;                  //反显
 0650           ;         }
 0650           ;         
 0650           ;         #ifdef RockBack 
 0650           ;     }
 0650 79C0              xjmp L63
 0652           L62:
 0652           ;     else 
 0652           ;     {
 0652           ;         //当前位置为DispMax    底部  下移
 0652           ;         #ifdef DynamicBar 
 0652           ;         if((ItemNum>DispMax)||(BarDataMode==DynamicData))
 0652           ;         {
 0652           ;             //需要显示的Bar多于单屏可以显示的Bar,那么重新显示//08/29
 0652           ;             #else 
 0652           ;             if(ItemNum>DispMax)
 0652 83E0              ldi R24,3
 0654 20900000          lds R2,_ItemNum
 0658 8215              cp R24,R2
 065A 08F0              brlo X4
 065C 45C0              xjmp L66
 065E           X4:
 065E           ;             {
 065E           ;                 //需要显示的Bar多于单屏可以显示的Bar,那么重新显示
 065E           ;                 #endif 
 065E           ;                 #else 
 065E           ;             }
 065E           ;             else if(ItemBack!=(ItemNum-1))
 065E           ;             {
 065E           ;                 //当前位置为DispMax    如果原来显示位置不是最后一项,则 底部  下移
 065E           ;                 if(ItemNum>DispMax)
 065E           ;                 {
 065E           ;                     //需要显示的Bar多于单屏可以显示的Bar,那么重新显示
 065E           ;                     #endif 
 065E           ;                     Menu_j=Item ;
 065E A0900000          lds R10,_Item
 0662           ;                     Menu_i=DispMax ;
 0662 63E0              ldi R22,3
 0664           ;                     //项是 Item  位置是 DispMax
 0664           ;                     BarDisp(*(DispItem+Menu_j),BarXOffset,(Menu_i-1)*BarYSize+BarYOffset,1);
 0664 81E0              ldi R24,1
 0666 8A83              std y+2,R24
 0668 80E1              ldi R24,16
 066A 869F              mul R24,R22
 066C 802D              mov R24,R0
 066E 8051              subi R24,16
 0670 8883              std y+0,R24
 0672 2227              clr R18
 0674 82E0              ldi R24,2
 0676 8A9D              mul R24,R10
 0678 F001              movw R30,R0
 067A 20900000          lds R2,_DispItem
 067E 30900100          lds R3,_DispItem+1
 0682 E20D              add R30,R2
 0684 F31D              adc R31,R3
 0686 0081              ldd R16,z+0
 0688 1181              ldd R17,z+1
 068A 9ADD              xcall _BarDisp
 068C           ;                     if(Menu_j==0)
 068C AA20              tst R10
 068E 29F4              brne L68
 0690           ;                     {
 0690           ;                         Menu_j=ItemNum-1 ;

⌨️ 快捷键说明

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