⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menufsm.s

📁 Atmega64单片机程序(完整工程)
💻 S
📖 第 1 页 / 共 2 页
字号:
; */
; 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 + -