📄 6.5.c
字号:
#include <reg51.h>
#include <stdio.h>
#define SIZE_OF_KEYBD_MENU 20
unsigned DummyJob=0;
unsigned DspUserInfo=0;
unsigned DspServiceInfo=0;
unsigned DspVoltInfo=0;
unsigned DspCurrInfo=0;
unsigned DspFreqInfo=0;
unsigned DspCableInfo=0;
unsigned DspSetVoltLevel=0;
unsigned KeyFuncIndex=0;
void (*KeyFuncPtr)(); //按键功能指针
typedef struct
{
unsigned char KeyStateIndex; //当前状态索引号
unsigned char KeyDnState; //按下"向下"键时转向的状态索引号
unsigned char KeyUpState; //按下"向上"键时转向的状态索引号
unsigned char KeyCrState; //按下"回车"键时转向的状态索引号
void (*CurrentOperate)(); //当前状态应该执行的功能操作
} KbdTabStruct;
KbdTabStruct code KeyTab[SIZE_OF_KEYBD_MENU]=
{
{ 0, 0, 0, 1,(&DummyJob)}, //顶层
{ 1, 2, 0, 3,(&DspUserInfo)}, //第二层
{ 2, 1, 1, 9,(&DspServiceInfo)}, //第二层
{ 3, 0, 0, 1,(&DspVoltInfo)}, //第三层>>DspUserInfo的展开
{ 4, 0, 0, 1,(&DspCurrInfo)}, //第三层>>DspUserInfo的展开
{ 5, 0, 0, 1,(&DspFreqInfo)}, //第三层>>DspUserInfo的展开
{ 6, 0, 0, 1,(&DspCableInfo)}, //第三层>>DspUserInfo的展开
//...........
{ 9, 0, 0, 1,(&DspSetVoltLevel)} //第三层>>DspServiceInfo的展开
//..........
};
void GetKeyInput(void)
{unsigned char KeyValue;
KeyValue=P1&0x07; //去掉高5位
// delay(50000);
switch(KeyValue)
{
case 1: //回车键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyCrState;
break;
}
case 2: //向上键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyUpState;
break;
}
case 4: //向下键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDnState;
break;
}
default: //按键错误的处理
//......
break;
}
KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate;
(*KeyFuncPtr)();//
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -