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

📄 keyboard.c

📁 很好的一个菜单处理程序
💻 C
字号:

#include<stdio.h>
#include<stdlib.h>

typedef unsigned char uchar;

#define SIZE_OF_KEYBD_MENU 20     //菜单长度

volatile uchar KeyFuncIndex=0;
volatile uchar Keyvalue=0;        //键值


void (*KeyFuncPtr)(); //按键功能指针

typedef  struct
{
  uchar KeyStateIndex;       //当前状态索引号
  uchar KeyDnState;          //按下"向下"键时转向的状态索引号
  uchar KeyUpState;          //按下"向上"键时转向的状态索引号
  uchar KeyLState;           //左
  uchar KeyRState;
  uchar KeyCrState;          //按下"回车"键时转向的状态索引号
  uchar KeyEscState;         //按下"Esc"键时的转向状态

  void (*DspOperate)();      //当前状态应该执行的菜单显示功能

} KbdTabStruct;

KbdTabStruct KeyTab[SIZE_OF_KEYBD_MENU]=
{
  { 0, 1, 1, 1, 1, 1, 1, (*GDDZ)},                    //顶层    只显示一个屏保, 按任意键进入 第二层第一个菜单

  { 1, 2, 2, 2, 2, 3, 0, (*DspUserInfo)},             //第二层  函数实现显示第二层的第一个菜单  回车显示第三层DspUserInfo的第一个菜单(反白显示)
  { 2, 1, 1, 1, 1, 7, 0, (*DspServiceInfo)},          //第二层  函数实现显示第二层的第二个菜单  回车显示第三层DspServiceInfo的第一个菜单(反白显示)

  { 3,  4,  6,  6,  4, 11,  1, (*DspVoltInfo)},       //第三层>>DspUserInfo的展开, 向上就翻转,向下反白显示第二个菜单
  { 4,  5,  3,  3,  5,  4,  1, (*DspCurrInfo)},       //第三层>>DspUserInfo的展开
  { 5,  6,  4,  4,  6,  5,  1, (*DspFreqInfo)},       //第三层>>DspUserInfo的展开
  { 6,  3,  5,  5,  3,  6,  1, (*DspCableInfo)},      //第三层>>DspUserInfo的展开

  { 7,  8, 10, 10,  8,  7,  2, (*DspSetVoltLevel)},   //第三层>>DspServiceInfo的展开
  { 8,  9,  7,  7,  9,  8,  2, (*DspEightTwo)},
  { 9, 10,  8,  8, 10,  9,  2, (*DspNineThree)},
  {10,  7,  9,  9,  7, 10,  2, (*DspTenFour)},

  {11, 11, 11, 11, 11, 11,  3, (*OperateThrOne)}      //进入第三层菜单进行设置
};

void GetKeyInput(void)
{
  Keyvalue=P1&0x07;                //去掉高5bit
  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].DspOperate;

(*KeyFuncPtr)();                  //执行当前按键的操作
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -