利用C语言结构体和指针实现多级菜单调参

利用函数结构体和函数体指针可以实现多级菜单的显示和按键调参


优点是可以使用较少的按键来实现多种功能的调参;
缺点是使用此方法比较占用flash内存,而且需要提前对要实现的功能和界面有个框架,否则在后期更改时候可能比较费事,在构想时候可以使用思维导图来理清自己想要设置的界面。


以下是详细过程:
首先可以在对应的.h文件中设置好所需要的结构体

typedef struct
{
	uint8 current;//当前状态索引号
	uint8 up;//向上翻索引号
	uint8 down;//向下翻索引号
	uint8 enter;//确认索引号
	uint8 back;//返回索引号
	void (*current_operation)(void);//函数指针,即对应当前函数应当执行的操作
}key_table;

在这里可以按照自己的按键数量进行实时的调整和定义设置。
然后可以在对应的.c文件定义相对应的结构体数组,函数类型要与定义的结构体相对应

key_table code_table[20]=
{
	{ 0, 0, 0, 1, 0,(*fun0)},
    { 1, 3, 2, 7, 0,(*fun1)},
    { 2, 1, 3, 7, 0,(*fun2)},
    { 3, 2, 1,11, 0,(*fun3)},
    { 4, 6, 5, 7, 1,(*fun4)},
	{ 5, 4, 6, 19, 1,(*fun5)},
	{ 6, 5, 4,10, 1,(*fun6)},
	//其余均为此格式,但并未给出
}

对于这样的格式,需要注意的是为了程序具有更好的可读性,可以使用数组一一对应。
例如{ 1, 3, 2, 7, 0,(*fun1)},中第一个数1代表的是函数fun1的函数内容,与结构体中定义的current也就是当前索引号相对应;第二个数3代表的是当up键按下收中也就是向上翻索引号对应的函数;第三个数2代表的是当向下翻索引号对应的函数;第四个数7代表的是enter也就是当确认键按下时候对应的函数;第五个数0back也就是返回键按下时候对应的函数;最后的fun1就是当前状态所对应的功能函数了。
即按照此结构体定义的从左到右依次为当前状态,向上翻索引号,向下翻索引号,确认索引号,返回索引号。

也就是说.h文件中结构体定义了几个按键则对应的数组中就需要几个函数与之一一对应

之后就可以书写对应的功能函数了,但是由于各个界面都要编写,所以建议可以专门设置一个.c文件来存放函数。

void fun0(void)//对应的功能函数
{
	//编写想要实现的功能
}
void fun1(void)//对应的功能函数
{
	//编写想要实现的功能
}
void fun2(void)//对应的功能函数
{
	//编写想要实现的功能
}
//...

需要注意的是在前面的结构体数组中使用了多少个功能函数则必须要有对应的函数与之相对应。且一般是从fun0开始书写,当进入显示界面时候也对应默认的一级界面显示的为fun0函数的内容。
另外,在使用按键的调参时候我们为了不占用cpu的资源可以使用定时扫描相应的按键标志位来实现对按键的实时控制。

  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值