📄 menufsm.s
字号:
; */
; const KbdTabStruct KeyTab[]=
; {
; // |-----------> Index
; // | Up
; // | | Down
; // | | | Left
; // | | | | Right --->功能函数
; // | | | | | |
; { 0, 1, 2, 3, 4,(*DispMenuTop)}, // 待机画面
; { 1, 0, 0, 0, 0,(*DispMenuTopUp)},
; { 2, 0, 0, 0, 0,(*DispMenuTopDown)},
; { 3, 0, 0, 0, 0,(*DispMenuTopLeft)},
; { 4, 0, 0, 0, 0,(*DispMenuTopRight)},
;
; { 5, 6, 7, 8, 9,(*DispIcoMenuInit)}, //图标层菜单
; { 6, 0, 0, 0, 0,(*DispIcoMenuUp)}, //
; { 7, 0, 0, 0, 0,(*DispIcoMenuDown)}, //
; { 8, 0, 0, 0, 0,(*DispIcoMenuLeft)}, //
; { 9, 0, 0, 0, 0,(*DispIcoMenuRight)},//
;
; {10,11,12,13,14,(*DispMenuFuncInit)}, //"功能"
; {11, 0, 0, 0, 0,(*DispMenuFuncUp)}, //
; {12, 0, 0, 0, 0,(*DispMenuFuncDown)}, //
; {13, 0, 0, 0, 0,(*DispMenuFuncLeft)}, //
; {14, 0, 0, 0, 0,(*DispMenuFuncRight)},//
;
; {15,16,17,18,19,(*DispMenuParaInit)}, //"参数"
; {16, 0, 0, 0, 0,(*DispMenuParaUp)}, //
; {17, 0, 0, 0, 0,(*DispMenuParaDown)}, //
; {18, 0, 0, 0, 0,(*DispMenuParaLeft)}, //
; {19, 0, 0, 0, 0,(*DispMenuParaRight)},//
;
; {20,21,22,23,24,(*DispMenuLanguageInit)}, //"语言"
; {21, 0, 0, 0, 0,(*DispMenuLanguageUp)}, //
; {22, 0, 0, 0, 0,(*DispMenuLanguageDown)}, //
; {23, 0, 0, 0, 0,(*DispMenuLanguageLeft)}, //
; {24, 0, 0, 0, 0,(*DispMenuLanguageRight)},//
;
; {25,26,27,28,29,(*DispMenuMeasureInit)}, //"测量"
; {26, 0, 0, 0, 0,(*DispMenuMeasureUp)}, //
; {27, 0, 0, 0, 0,(*DispMenuMeasureDown)}, //
; {28, 0, 0, 0, 0,(*DispMenuMeasureLeft)}, //
; {29, 0, 0, 0, 0,(*DispMenuMeasureRight)},//
;
; {30,31,32,33,34,(*DispMenuSetupInit)}, //"设置"
; {31, 0, 0, 0, 0,(*DispMenuSetupUp)}, //
; {32, 0, 0, 0, 0,(*DispMenuSetupDown)}, //
; {33, 0, 0, 0, 0,(*DispMenuSetupLeft)}, //
; {34, 0, 0, 0, 0,(*DispMenuSetupRight)},//
;
; #ifdef DynamicBar
; {35,36,37,38,39,(*DispMenuDataInit)}, //"Data"
; {36, 0, 0, 0, 0,(*DispMenuDataUp)}, //
; {37, 0, 0, 0, 0,(*DispMenuDataDown)}, //
; {38, 0, 0, 0, 0,(*DispMenuDataLeft)}, //
; {39, 0, 0, 0, 0,(*DispMenuDataRight)},//
; #endif
; }
; ;
;
; /****************************************************************************
; * CheckKey - 菜单键盘扫描函数
; * 有有效按键则执行对应的功能函数
; * 同时,若刷新标志有效,也执行相应的功能函数
; 返回0表示有效按键输入,否则当作无效按键
; ****************************************************************************/
;
; extern INT8U Keyvalue;
; extern INT8U Key_Deal_Flag;
;
; INT8U CheckKey(void)
; {
; INT8U IsKey ;
;
; IsKey=1 ;
ldi R20,1
; if(Key_Deal_Flag==1)
lds R24,_Key_Deal_Flag
cpi R24,1
breq X1
xjmp L3
X1:
; {
; IsKey=0 ;
clr R20
; switch(Keyvalue)
lds R22,_Keyvalue
clr R23
cpi R22,17
ldi R30,0
cpc R23,R30
brne X2
xjmp L11
X2:
cpi R22,18
ldi R30,0
cpc R23,R30
breq L8
cpi R22,19
ldi R30,0
cpc R23,R30
brne X3
xjmp L14
X3:
cpi R22,20
ldi R30,0
cpc R23,R30
brne X4
xjmp L17
X4:
xjmp L5
X0:
; {
L8:
; case Key_Up :
; {
; //向上键,找出新的菜单状态编号
; KeyFuncIndex=KeyTab[KeyFuncIndex].KeyUpState ;
lds R2,_KeyFuncIndex
ldi R24,7
mul R24,R2
movw R30,R0
ldi R24,<_KeyTab+1
ldi R25,>_KeyTab+1
add R30,R24
adc R31,R25
lpm R30,Z
sts _KeyFuncIndex,R30
; KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate ;
mov R2,R30
ldi R24,7
mul R24,R2
movw R30,R0
ldi R24,<_KeyTab+5
ldi R25,>_KeyTab+5
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
sts _KeyFuncPtr+1,R31
sts _KeyFuncPtr,R30
; (*KeyFuncPtr)();//执行当前按键的操作
xcall xicall
; break ;
xjmp L6
L11:
; }
; case Key_Down :
; {
; //向下键,找出新的菜单状态编号
; KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDnState ;
lds R2,_KeyFuncIndex
ldi R24,7
mul R24,R2
movw R30,R0
ldi R24,<_KeyTab+2
ldi R25,>_KeyTab+2
add R30,R24
adc R31,R25
lpm R30,Z
sts _KeyFuncIndex,R30
; KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate ;
mov R2,R30
ldi R24,7
mul R24,R2
movw R30,R0
ldi R24,<_KeyTab+5
ldi R25,>_KeyTab+5
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
sts _KeyFuncPtr+1,R31
sts _KeyFuncPtr,R30
; (*KeyFuncPtr)();//执行当前按键的操作
xcall xicall
; break ;
xjmp L6
L14:
; }
; case Key_Left :
; {
; //向左键,找出新的菜单状态编号
; KeyFuncIndex=KeyTab[KeyFuncIndex].KeyLState ;
lds R2,_KeyFuncIndex
ldi R24,7
mul R24,R2
movw R30,R0
ldi R24,<_KeyTab+3
ldi R25,>_KeyTab+3
add R30,R24
adc R31,R25
lpm R30,Z
sts _KeyFuncIndex,R30
; KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate ;
mov R2,R30
ldi R24,7
mul R24,R2
movw R30,R0
ldi R24,<_KeyTab+5
ldi R25,>_KeyTab+5
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
sts _KeyFuncPtr+1,R31
sts _KeyFuncPtr,R30
; (*KeyFuncPtr)();//执行当前按键的操作
xcall xicall
; break ;
xjmp L6
L17:
; }
; case Key_Right :
; {
; //向右键,找出新的菜单状态编号
; KeyFuncIndex=KeyTab[KeyFuncIndex].KeyRState ;
lds R2,_KeyFuncIndex
ldi R24,7
mul R24,R2
movw R30,R0
ldi R24,<_KeyTab+4
ldi R25,>_KeyTab+4
add R30,R24
adc R31,R25
lpm R30,Z
sts _KeyFuncIndex,R30
; KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate ;
mov R2,R30
ldi R24,7
mul R24,R2
movw R30,R0
ldi R24,<_KeyTab+5
ldi R25,>_KeyTab+5
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
sts _KeyFuncPtr+1,R31
sts _KeyFuncPtr,R30
; (*KeyFuncPtr)();//执行当前按键的操作
xcall xicall
; break ;
xjmp L6
L5:
; }
; default :IsKey=1 ;break ;//按键错误的处理
ldi R20,1
L6:
; }
; Key_Deal_Flag=0;
clr R2
sts _Key_Deal_Flag,R2
; }
L3:
; if(Flash)
lds R2,_Flash
tst R2
breq L20
; {
; //两个当中有任意一个不为零,那么执行一次,我们应该不会出现Flash和ReFlash都是1的情况
; KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate ;
lds R2,_KeyFuncIndex
ldi R24,7
mul R24,R2
movw R30,R0
ldi R24,<_KeyTab+5
ldi R25,>_KeyTab+5
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
sts _KeyFuncPtr+1,R31
sts _KeyFuncPtr,R30
; (*KeyFuncPtr)();//执行当前按键的操作
xcall xicall
; Flash=0 ; // ReFlash = 0;
clr R2
sts _Flash,R2
; }
L20:
; return IsKey ;
mov R16,R20
L2:
xcall pop_gset2
.dbline 0 ; func end
ret
.area bss(ram, con, rel)
_KeyFuncPtr::
.blkb 2
.area func_lit
PL_DispMenuSetupRight: .word `_DispMenuSetupRight
PL_DispMenuSetupLeft: .word `_DispMenuSetupLeft
PL_DispMenuSetupDown: .word `_DispMenuSetupDown
PL_DispMenuSetupUp: .word `_DispMenuSetupUp
PL_DispMenuSetupInit: .word `_DispMenuSetupInit
PL_DispMenuMeasureRight: .word `_DispMenuMeasureRight
PL_DispMenuMeasureLeft: .word `_DispMenuMeasureLeft
PL_DispMenuMeasureDown: .word `_DispMenuMeasureDown
PL_DispMenuMeasureUp: .word `_DispMenuMeasureUp
PL_DispMenuMeasureInit: .word `_DispMenuMeasureInit
PL_DispMenuLanguageRight: .word `_DispMenuLanguageRight
PL_DispMenuLanguageLeft: .word `_DispMenuLanguageLeft
PL_DispMenuLanguageDown: .word `_DispMenuLanguageDown
PL_DispMenuLanguageUp: .word `_DispMenuLanguageUp
PL_DispMenuLanguageInit: .word `_DispMenuLanguageInit
PL_DispMenuParaRight: .word `_DispMenuParaRight
PL_DispMenuParaLeft: .word `_DispMenuParaLeft
PL_DispMenuParaDown: .word `_DispMenuParaDown
PL_DispMenuParaUp: .word `_DispMenuParaUp
PL_DispMenuParaInit: .word `_DispMenuParaInit
PL_DispMenuFuncRight: .word `_DispMenuFuncRight
PL_DispMenuFuncLeft: .word `_DispMenuFuncLeft
PL_DispMenuFuncDown: .word `_DispMenuFuncDown
PL_DispMenuFuncUp: .word `_DispMenuFuncUp
PL_DispMenuFuncInit: .word `_DispMenuFuncInit
PL_DispIcoMenuRight: .word `_DispIcoMenuRight
PL_DispIcoMenuLeft: .word `_DispIcoMenuLeft
PL_DispIcoMenuDown: .word `_DispIcoMenuDown
PL_DispIcoMenuUp: .word `_DispIcoMenuUp
PL_DispIcoMenuInit: .word `_DispIcoMenuInit
PL_DispMenuTopRight: .word `_DispMenuTopRight
PL_DispMenuTopLeft: .word `_DispMenuTopLeft
PL_DispMenuTopDown: .word `_DispMenuTopDown
PL_DispMenuTopUp: .word `_DispMenuTopUp
PL_DispMenuTop: .word `_DispMenuTop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -