菜单程序.c
来自「简单的单片机多级菜单程序,这是个通用程序」· C语言 代码 · 共 73 行
C
73 行
#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 + =
减小字号Ctrl + -
显示快捷键?