📄 menutop.s
字号:
cp R2,R22
brlo L70
; }
; Where=DispMax-1 ;
ldi R24,2
sts _Where,R24
; //当前位置依然末尾位置
; }
xjmp L67
L66:
; else
; {
; //单屏能显示完全部菜单项,"底部 下移"应当跳转到顶部反显(或者什么都不做)
; Where=0 ;
clr R2
sts _Where,R2
; //取消底部原有反显 项ItemBack 位置ItemNum-1
; BarDisp(*(DispItem+ItemBack),BarXOffset,(ItemNum-1)*BarYSize+BarYOffset,0);
std y+2,R2
lds R2,_ItemNum
ldi R24,16
mul R24,R2
mov R24,R0
subi R24,16
std y+0,R24
clr R18
ldi R24,2
mul R24,R20
movw R30,R0
lds R2,_DispItem
lds R3,_DispItem+1
add R30,R2
adc R31,R3
ldd R16,z+0
ldd R17,z+1
xcall _BarDisp
; //反显顶部 项Item 位置0
; BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);
ldi R24,1
std y+2,R24
lds R2,_Where
ldi R24,16
mul R24,R2
std y+0,R0
clr R18
lds R2,_Item
ldi R24,2
mul R24,R2
movw R30,R0
lds R2,_DispItem
lds R3,_DispItem+1
add R30,R2
adc R31,R3
ldd R16,z+0
ldd R17,z+1
xcall _BarDisp
; //反显
; }
L67:
; #ifdef RockBack
; }
L63:
; #else
; }
; else
; {
; Item=ItemBack ;
; //Restore
; }
; #endif
;
; Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);// jjx //维护滚动条
ldi R24,88
std y+2,R24
ldi R24,94
std y+0,R24
lds R18,_ItemNum
lds R16,_Item
xcall _Bar
; Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
clr R18
ldi R24,<_FatherIndex-1
ldi R25,>_FatherIndex-1
lds R30,_Layer
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _Jump2Menu
L59:
adiw R28,3
xcall pop_gset3
.dbline 0 ; func end
ret
.even
_DispIcoMenuInit::
sbiw R28,5
; }
;
; /*********************************************************
; *****************************************************************************
; * DispIcoMenuInit - 图标层菜单界面
; * DESCRIPTION: -
; * 共有5个函数
; DispIcoMenuInit DispIcoMenuUp DispIcoMenuDown
; DispIcoMenuLeft DispIcoMenuRight
; ******************************************************************************/
; void DispIcoMenuInit()
; {
;
; ItemNum=IcoMenu[language].TextNum ;//多少数据项
lds R2,_language
ldi R24,5
mul R24,R2
movw R30,R0
ldi R24,<_IcoMenu+2
ldi R25,>_IcoMenu+2
add R30,R24
adc R31,R25
lpm R30,Z
sts _ItemNum,R30
; DispItem=IcoMenu[language].Text ;//数据
ldi R24,5
mul R24,R2
movw R30,R0
ldi R24,<_IcoMenu
ldi R25,>_IcoMenu
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
sts _DispItem+1,R31
sts _DispItem,R30
;
; GUI_Clear();
xcall _GUI_Clear
; //-------------------
; if(Flash==FlashMode_AutoInit)
lds R24,_Flash
cpi R24,1
brne L79
; {
; //从0进入,初始化Item等值
; PUSH();
xcall _PUSH
; Item=0 ;
clr R2
sts _Item,R2
; Where=0 ;
sts _Where,R2
; }
L79:
; GUI_DispStringAtBar(*(DispItem+Item),0,1,LCD_XSIZE,GUI_TA_HCENTER);//菜单名字
ldi R24,16
std y+4,R24
ldi R24,97
std y+2,R24
ldi R24,1
std y+0,R24
clr R18
lds R2,_Item
ldi R24,2
mul R24,R2
movw R30,R0
lds R2,_DispItem
lds R3,_DispItem+1
add R30,R2
adc R31,R3
ldd R16,z+0
ldd R17,z+1
xcall _GUI_DispStringAtBar
; GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);//图标
ldi R24,16
std y+0,R24
ldi R18,32
lds R2,_Item
ldi R24,2
mul R24,R2
movw R30,R0
ldi R24,<_icos
ldi R25,>_icos
add R30,R24
adc R31,R25
lpm R16,Z+
lpm R17,Z
xcall _GUI_DrawIcon
;
; //显示按键对应的文字提示,1-->"选择"
; GUI_DispStringAt(*(Tip[language].Text+1),0,LCD_YSIZE-14);
ldi R24,54
std y+0,R24
clr R18
lds R2,_language
ldi R24,5
mul R24,R2
movw R30,R0
ldi R24,<_Tip
ldi R25,>_Tip
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ldd R16,z+2
ldd R17,z+3
xcall _GUI_DispStringAt
; //显示按键对应的文字提示,0-->"退出"
; GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);
ldi R24,54
std y+0,R24
ldi R18,73
lds R2,_language
ldi R24,5
mul R24,R2
movw R30,R0
ldi R24,<_Tip
ldi R25,>_Tip
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ldd R16,z+8
ldd R17,z+9
xcall _GUI_DispStringAt
;
; Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX); //jjx //维护滚动条
ldi R24,88
std y+2,R24
ldi R24,94
std y+0,R24
lds R18,_ItemNum
lds R16,_Item
xcall _Bar
; return ;
L77:
adiw R28,5
.dbline 0 ; func end
ret
.even
_DispIcoMenuUp::
xcall push_gset1
; }
;
; /*
; *****************************************************************************
; * DispIcoMenuUp - 图标层下确定键的行为
; * DESCRIPTION: -
; * 分发处理各个跳转
; * 第一层菜单的Up键处理
; * Return :
; ******************************************************************************/
; void DispIcoMenuUp()
; {
;
; switch(Item)
lds R20,_Item
clr R21
cpi R20,0
cpc R20,R21
breq L85
X5:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L86
cpi R20,2
ldi R30,0
cpc R21,R30
breq L87
cpi R20,3
ldi R30,0
cpc R21,R30
breq L88
cpi R20,4
ldi R30,0
cpc R21,R30
breq L89
cpi R20,5
ldi R30,0
cpc R21,R30
breq L90
xjmp L82
X6:
; {
L85:
; case 0 :
; {
; GUI_Clear();
xcall _GUI_Clear
; //功能
; Jump2Menu(MenuFuncIndex,FlashMode_AutoInit);
ldi R18,1
ldi R16,10
xcall _Jump2Menu
; return ;
xjmp L81
L86:
; }
; case 1 :
; {
; GUI_Clear();
xcall _GUI_Clear
; //参数
; Jump2Menu(MenuParaIndex,FlashMode_AutoInit);
ldi R18,1
ldi R16,15
xcall _Jump2Menu
; return ;
xjmp L81
L87:
; }
; case 2 :
; {
; GUI_Clear();
xcall _GUI_Clear
; //测量
; Jump2Menu(MenuMeasureIndex,FlashMode_AutoInit);
ldi R18,1
ldi R16,25
xcall _Jump2Menu
; return ;
xjmp L81
L88:
; }
; case 3 :
; {
; GUI_Clear();
xcall _GUI_Clear
; //语言
; Jump2Menu(MenuLanguageIndex,FlashMode_ManualInit);
ldi R18,2
ldi R16,20
xcall _Jump2Menu
; //在MenuLanguage.C中的DispMenuLanguageInit函数中修改Item Where!
; return ;
xjmp L81
L89:
; }
; case 4 :
; {
; GUI_Clear();
xcall _GUI_Clear
; //设置
; Jump2Menu(MenuSetupIndex,FlashMode_AutoInit);
ldi R18,1
ldi R16,30
xcall _Jump2Menu
; return ;
xjmp L81
L90:
; }
; case 5 :
; {
; Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
clr R18
ldi R24,<_FatherIndex-1
ldi R25,>_FatherIndex-1
lds R30,_Layer
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _Jump2Menu
; return ;
xjmp L81
L82:
; }
; default :
; {
; Jump2Menu(MenuTopIndex,FlashMode_NoAction);
clr R18
clr R16
xcall _Jump2Menu
; return ;
L81:
xcall pop_gset1
.dbline 0 ; func end
ret
.even
_DispIcoMenuDown::
; }
; }
; }
;
; void DispIcoMenuDown()
; {
; POP();
xcall _POP
L92:
.dbline 0 ; func end
ret
.even
_DispIcoMenuLeft::
sbiw R28,5
; }
;
; void DispIcoMenuLeft()
; {
; if(Item==0)
lds R2,_Item
tst R2
brne L94
; {
; Item=ItemNum-1 ;
lds R24,_ItemNum
subi R24,1
sts _Item,R24
; }
xjmp L95
L94:
; else
; {
; Item--;
lds R24,_Item
subi R24,1
sts _Item,R24
; }
L95:
;
; GUI_DispStringAtBar(*(DispItem+Item),0,1,LCD_XSIZE,GUI_TA_HCENTER);//菜单名字
ldi R24,16
std y+4,R24
ldi R24,97
std y+2,R24
ldi R24,1
std y+0,R24
clr R18
lds R2,_Item
ldi R24,2
mul R24,R2
movw R30,R0
lds R2,_DispItem
lds R3,_DispItem+1
add R30,R2
adc R31,R3
ldd R16,z+0
ldd R17,z+1
xcall _GUI_DispStringAtBar
; GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);//图标
ldi R24,16
std y+0,R24
ldi R18,32
lds R2,_Item
ldi R24,2
mul R24,R2
movw R30,R0
ldi R24,<_icos
ldi R25,>_icos
add R30,R24
adc R31,R25
lpm R16,Z+
lpm R17,Z
xcall _GUI_DrawIcon
;
; Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX); //jjx //维护滚动条
ldi R24,88
std y+2,R24
ldi R24,94
std y+0,R24
lds R18,_ItemNum
lds R16,_Item
xcall _Bar
; Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
clr R18
ldi R24,<_FatherIndex-1
ldi R25,>_FatherIndex-1
lds R30,_Layer
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _Jump2Menu
L93:
adiw R28,5
.dbline 0 ; func end
ret
.even
_DispIcoMenuRight::
sbiw R28,5
; }
;
; void DispIcoMenuRight(void)
; {
; if(Item==(ItemNum-1))
lds R24,_ItemNum
subi R24,1
lds R2,_Item
cp R2,R24
brne L98
; {
; Item=0 ;
clr R2
sts _Item,R2
; }
xjmp L99
L98:
; else
; {
; Item++;
lds R24,_Item
subi R24,255 ; addi 1
sts _Item,R24
; }
L99:
;
; GUI_DispStringAtBar(*(DispItem+Item),0,1,LCD_XSIZE,GUI_TA_HCENTER); //菜单名字
ldi R24,16
std y+4,R24
ldi R24,97
std y+2,R24
ldi R24,1
std y+0,R24
clr R18
lds R2,_Item
ldi R24,2
mul R24,R2
movw R30,R0
lds R2,_DispItem
lds R3,_DispItem+1
add R30,R2
adc R31,R3
ldd R16,z+0
ldd R17,z+1
xcall _GUI_DispStringAtBar
; GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);//图标
ldi R24,16
std y+0,R24
ldi R18,32
lds R2,_Item
ldi R24,2
mul R24,R2
movw R30,R0
ldi R24,<_icos
ldi R25,>_icos
add R30,R24
adc R31,R25
lpm R16,Z+
lpm R17,Z
xcall _GUI_DrawIcon
;
; Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX); //jjx //维护滚动条
ldi R24,88
std y+2,R24
ldi R24,94
std y+0,R24
lds R18,_ItemNum
lds R16,_Item
xcall _Bar
; Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
clr R18
ldi R24,<_FatherIndex-1
ldi R25,>_FatherIndex-1
lds R30,_Layer
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _Jump2Menu
L97:
adiw R28,5
.dbline 0 ; func end
ret
; BarNumPosX -> R3
; BarPosX -> R2
; ItemNum_ -> R1
; Item_ -> R0
.even
_Bar::
; }
;
; /*
; Bar的算法
; ___
; | |
; | |
; | |<-|-----BarLen
; | L
; | |
; | |
; | _|_
; Bar的滑动距离是L-BarLen
; 为了美观,可以在开始和结尾部分多流出来一些点,那么滑动距离要扣除这些点的长度,并在计算结果
; 得到0的时候,添加上上端要留出来的点BarRemainDot
; 2种显示方式:
; 一种是BarLen是定长的,
; 一种BarLen是根据显示总共的项数定下来的
; */
; void Bar(INT8U Item_,INT8U ItemNum_,INT8U BarPosX,INT8U BarNumPosX)
; {
; return;
L101:
.dbline 0 ; func end
ret
.even
_DispBuildTime::
sbiw R28,5
; }
;
;
; //编译时间
; void DispBuildTime(void)
; {
; GUI_DispStringAtBar("编译时间",0,1,LCD_XSIZE,GUI_TA_LEFT);
clr R2
std y+4,R2
ldi R24,97
std y+2,R24
ldi R24,1
std y+0,R24
clr R18
ldi R16,<L103
ldi R17,>L103
xcall _GUI_DispStringAtBar
; GUI_DispStringAt(__DATE__,24,16);
ldi R24,16
std y+0,R24
ldi R18,24
ldi R16,<L104
ldi R17,>L104
xcall _GUI_DispStringAt
; GUI_DispStringAt(__TIME__,24,32);
ldi R24,32
std y+0,R24
ldi R18,24
ldi R16,<L105
ldi R17,>L105
xcall _GUI_DispStringAt
L102:
adiw R28,5
.dbline 0 ; func end
ret
.area data(ram, con, rel)
L105:
.blkb 9
.area idata
.byte 50,49,58,53,48,58,48,55,0
.area data(ram, con, rel)
L104:
.blkb 12
.area idata
.byte 'M,'a,'y,32,50,54,32,50,48,48,56,0
.area data(ram, con, rel)
L103:
.blkb 9
.area idata
.byte 177,224,210,235,202,177,188,228,0
.area data(ram, con, rel)
L3:
.blkb 5
.area idata
.byte 178,203,181,165,0
.area data(ram, con, rel)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -