原创 用C51编写菜单的程序构架转

2007-3-14 09:59 5240 13 14 分类: 软件与OS


这是我在网上找到的一个程序,但它不能对各菜单项具体的参数调制。有哪位朋友


有的话,请给我一份。


/* Module :Kbdmenu.c
Date:------
Usage:P10~P12 use to DownKey,UpKey,CRKey
*/

#include
#include

#define SIZE_OF_KEYBD_MENU 20 //菜单长度


uchar KeyFuncIndex="0";
//uchar KeyFuncIndexNew="0";

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

typedef struct
{
uchar KeyStateIndex; //当前状态索引号
uchar KeyDnState; //按下"向下"键时转向的状态索引号
uchar KeyUpState; //按下"向上"键时转向的状态索引号
uchar 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)
{
uchar KeyValue;
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].CurrentOperate;
(*KeyFuncPtr)();//执行当前按键的操作
}
//其中KeyTab的设计颇费尽心机

文章评论1条评论)

登录后参与讨论

用户623752 2007-8-1 09:44

网上的都是这个程序呀
相关推荐阅读
用户1320060 2010-02-10 14:33
Keil μVision3 使用PC-Lint的方法
1. 打开Keil μVision3,并打开需要检查的Project。2. 打开Tools菜单,选择Setup PC-Lint...,打开PC-Lint Options窗口。3. 点击右上角的四个编辑...
用户1320060 2009-11-02 11:23
IAR产生HEX文件的设置
过程如下: project->options->linker output->output file->override default前面打勾        ->for...
用户1320060 2009-10-31 13:18
面向硬件构件底层驱动程序设计要求
1. 硬件构件     独立编程的实体就是硬件构件,硬件构件分为内部构件和外部构件,内部构件比如系统初始化、定时器、Flash、串口等,外部构件比如LED、开关、按钮、电机等。每个构件有独立模块。2....
用户1320060 2009-03-11 13:28
c语言-struct的相关问题
struct用法深入探索 作者: Cloudward 1. struct的巨大作用  面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大...
用户1320060 2009-01-10 20:21
3线双向零等待IO通讯机制zt
...
用户1320060 2008-10-14 07:36
PROTEL 99SE的打印设置
       现在市面上关于PTROTEL99SE的书很多,但都没有具体叙述有关电路图的打印设置方法。PROTEL99SE的打印设置较之以前的版本有了很多不同之处。特别是在实际做电路板时有些细节须注意...
我要评论
1
13
关闭 站长推荐上一条 /2 下一条