📄 menu.c
字号:
#include <reg52.h>
#include "TypeDefines.h"
#include "delay.h"
#include "MENU.h"
#include "1335c51.h"
uchar idata KeyFuncIndex = 0;
uchar idata LastKeyIndex = 0;
void (*KeyFuncPtr)(); //按键功能函数指针
void (*ptr)();
typedef struct
{
uchar KeyStateIndex; //当前状态索引号
uchar KeyEsState; //按下“ESC”键时转向的状态索引号
uchar KeyMeState; //按下“MENU”键时转向的状态索引号
uchar KeyLeState; //按下“LEFT”键时转向的状态索引号
uchar KeyUpState; //按下“UP”键时转向的状态索引号
uchar KeyDnState; //按下“DOWN”键时转向的状态索引号
uchar KeyRiState; //按下“RIGHT”键时转向的状态索引号
uchar KeyCrState; //按下“ENTER”键时转向的状态索引号
void (*CurrentOperate)();//当前状应该执行的功能操作
}KbdTabStruct;
KbdTabStruct code KeyTab[SIZE_OF_KEYBD_MENU]=
{
// E M L U D R C *
{0, 0, 1, 0, 0, 0, 0, 0, &operation0},
{1, 0, 13, 10, 2, 3, 4, 13, &operation1},
{2, 0, 13, 10, 2, 3, 4, 13, &operation2},
{3, 0, 13, 10, 2, 3, 4, 13, &operation3},
{4, 0, 13, 1, 5, 6, 7, 13, &operation4},
{5, 0, 13, 1, 5, 6, 7, 13, &operation5},
{6, 0, 13, 1, 5, 6, 7, 13, &operation6},
{7, 0, 13, 4, 8, 9, 10,13, &operation7},
{8, 0, 13, 4, 8, 9, 10,13, &operation8},
{9, 0, 13, 4, 8, 9, 10,13, &operation9},
{10, 0, 13, 7, 11, 12, 1, 13, &operation10},
{11, 0, 13, 7, 11, 12, 1, 13, &operation11},
{12, 0, 13, 7, 11, 12, 1, 13, &operation12},
{13, 0, 25, 22, 14, 15, 16,25, &operation13},
{14, 0, 25, 22, 14, 15, 16,25, &operation14},
{15, 0, 25, 22, 14, 15, 16,25, &operation15},
{16, 0, 25, 13, 17, 18, 19,25, &operation16},
{17, 0, 25, 13, 17, 18, 19,25, &operation17},
{18, 0, 25, 13, 17, 18, 19,25, &operation18},
{19, 0, 25, 16, 20, 21, 22,25, &operation19},
{20, 0, 25, 16, 20, 21, 22,25, &operation20},
{21, 0, 25, 16, 20, 21, 22,25, &operation21},
{22, 0, 25, 19, 23, 24, 13,25, &operation22},
{23, 0, 25, 19, 23, 24, 13,25, &operation23},
{24, 0, 25, 19, 23, 24, 13,25, &operation24},
{25, 0, 0, 34, 26, 27, 28,0, &operation25},
{26, 0, 0, 34, 26, 27, 28,0, &operation26},
{27, 0, 0, 34, 26, 27, 28,0, &operation27},
{28, 0, 0, 25, 29, 30, 31,0, &operation28},
{29, 0, 0, 25, 29, 30, 31,0, &operation29},
{30, 0, 0, 25, 29, 30, 31,0, &operation30},
{31, 0, 0, 28, 32, 33, 34,0, &operation31},
{32, 0, 0, 28, 32, 33, 34,0, &operation32},
{33, 0, 0, 28, 32, 33, 34,0, &operation33},
{34, 0, 0, 31, 35, 36, 25,0, &operation34},
{35, 0, 0, 31, 35, 36, 25,0, &operation35},
{36, 0, 0, 31, 35, 36, 25,0, &operation36}
};
uchar GetKeyInput(void) //按键扫描及处理程序
{
uchar KeyValue;
/*
if(STOP==0)
{
delay_xms(30);
if(STOP==0)
{
return KEY_STOP;
}
}
else if(START==0)
{
delay_xms(30);
if(START==0)
{
return KEY_START;
}
}
else if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==0)&&(STOP==0)&&(START==0))
{
delay_xms(30);
if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==0)&&(STOP==0)&&(START==0))
{
return KEY_ADJUST;
}
}
*/
if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==1)) //按下“ESC”键
{
delay_xms(30);
if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==1))
{
KeyValue = 1;
}
}
else if((KEY_1==1)&&(KEY_2==1)&&(KEY_3==0)) //按下“MENU”键
{
delay_xms(30);
if((KEY_1==1)&&(KEY_2==1)&&(KEY_3==0))
{
KeyValue = 2;
}
}
else if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==0)) //按下“LEFT”键
{
delay_xms(30);
if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==0))
{
KeyValue = 3;
}
}
else if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==1)) //按下“UP”键
{
delay_xms(30);
if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==1))
{
KeyValue = 4;
}
}
else if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==1)) //按下“DOWN”键
{
delay_xms(30);
if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==1))
{
KeyValue = 5;
}
}
else if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==0)) //按下“RIGHT”键
{
delay_xms(30);
if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==0))
{
KeyValue = 6;
}
}
else if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==0)) //按下“ENTER”键
{
delay_xms(30);
if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==0))
{
KeyValue = 7;
}
}
else
{
KeyValue = 0;
}
switch(KeyValue)
{
case 0: //没有键按下
{
return 0;
}
case 1: //按下“ESC”键,找出新的状态索引号
{
KeyFuncIndex = KeyTab[KeyFuncIndex].KeyEsState;
break;
}
case 2: //按下“MENU”键,找出新的状态索引号
{
KeyFuncIndex = KeyTab[KeyFuncIndex].KeyMeState;
break;
}
case 3: //按下“LEFT”键,找出新的状态索引号
{
KeyFuncIndex = KeyTab[KeyFuncIndex].KeyLeState;
break;
}
case 4: //按下“UP”键,找出新的状态索引号
{
KeyFuncIndex = KeyTab[KeyFuncIndex].KeyUpState;
break;
}
case 5: //按下“DOWN”键,找出新的状态索引号
{
KeyFuncIndex = KeyTab[KeyFuncIndex].KeyDnState;
break;
}
case 6: //按下“RIGHT”键,找出新的状态索引号
{
KeyFuncIndex = KeyTab[KeyFuncIndex].KeyRiState;
break;
}
case 7: //按下“ENTER”键,找出新的状态索引号
{
KeyFuncIndex = KeyTab[KeyFuncIndex].KeyCrState;
break;
}
default: //按键出错处理
return 1;
}
KeyFuncPtr = KeyTab[KeyFuncIndex].CurrentOperate;
(*KeyFuncPtr)(); //执行当前按键操作
LastKeyIndex=KeyFuncIndex;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -