代码拉取完成,页面将自动刷新
/***********************************************************************
SMenu主模块实现
此模块使用对像以支持可能的多例化,建议使用ARM等针对对像有优化功能的MCU内核
(实测使用对像,比直接单例化合使全局变量更节省代码)
***********************************************************************/
#ifndef _SMENU_H
#define _SMENU_H
#ifdef SUPPORT_EX_PREINCLUDE//不支持Preinlude時
#include "Preinclude.h"
#endif
/***********************************************************************
说明
***********************************************************************/
//菜单共分三层:
//第一层为菜单选择:此时可选择进入或退出,显示建议为:
// 数码管时:可提示显示一组操作字符
// 点阵屏时:第1行可显示主菜单类型及序号,第2行显示菜单文本提示
//第二层为参数显示,可一次性读入显示值,也可实时更新显示值,显示建议为:
// 数码管时:显示具体参数
// 点阵屏时:第1行显示此参数名称,第2行显示具体参数
//第三层为参数调节:当第二层非只读时,按确认键进入,显示建议为:
// 数码管时:焦点位置着重显示(全亮或闪动方式)
// 点阵屏时:第1行显示此参数名称,第2行反显示被调整位
/***********************************************************************
相关配置
***********************************************************************/
//本模块可选时,使用此定义
//#define SUPPORT_SMENU
//支持像素化时定义,否则默认支持4位数码管, 需在全局里定义
//#define SUPPORT_SMENU_PIXEL //支持像素化时
//不支持像素化,直接调用Led.h模块时需定义
//#define SUPPORT_SMENU_LED //模拟时
//#define SUPPORT_SMENU_OTHER //直接调用Led.h类似模块时
//4键模式,否则为全导航+数字键0~9模式(此模块不支持长按与保持模式)
//#define SUPPORT_SMENU_4KEY
//逻辑调整模式时,是否支持不可见性
//支持后,pMenu->User.Min对应位置1用于禁止该位不可被选择
//此功能在像素化显示时,用于移至该位上进行只读功能提示,特殊情况置1禁止
//#define SUPPORT_SMENU_LOGIC_INVISIBLE
//二进制或十进制调整模式用户带数字键时,因不对应故不支持数值调整
//这里用于增加强制支持
//#define SUPPORT_SMENU_FORCE_NUM
/***********************************************************************
相关结构-菜单管理器
//与用户交互部见在SMenu.h里定义
***********************************************************************/
#include "SMenuUser.h"
#include "SMenuKey.h"
//用于菜单系统运行管理,用户禁止直接访问
struct _SMenu{
//当前所处层,见定义0:不在菜单,否则在1,2,3菜单中
unsigned char Layer;
//当前处于第几个菜单位置
unsigned char Index;
//缓冲的最后键值,用于减少系统嵌套调用
unsigned char Key;
//相关标志,见定义
unsigned char Flag;
//参数调整时,参数的内部变量:
unsigned char WrIndex;//调整数值时的位置
unsigned char WrMaxPos;//调整数值时的最大范围,含
signed short OrgAdj; //进入调用时的调整项原始值
//用户挂接的菜单查找表,首位为查找表大小. 可使用此机制实现权限访问
const unsigned char *pLUT;
//用户交互接口阵列
const struct _SMenuFun *const *pFunAry;
//正在调整的参数
struct _SMenuUser User;
};
//其中,菜单层次见SMenu中的层次定义:
//相关标志定义为:
#define SMENU_ID_MASK 0x0F //多组显示时,管理器ID号
#define SMENU_REFRESH_NOW 0x20 //立即刷新标志
#define SMENU_ENTER_FAST_WR 0x40 //进菜单后,直接进入调整模式,如密码输入
//闪动位强制消隐显示标志,否则按键将使闪动位强制显示,此标志在调用DISP后自动取消
#define SMENU_FLASH_HIDDEN 0x80
/***********************************************************************
主要行为函数
***********************************************************************/
//----------------------------初始化函数----------------------------
//开机时调用
void SMenu_Init(struct _SMenu *pMenu,
unsigned char Id); //分配的ID号
//--------------------------任务函数--------------------------
//将此函数放入系统250mS进程中,用于更新实时值的显示
void SMenu_Task(struct _SMenu *pMenu);
//--------------------------快速任务函数--------------------------
//将此函数放入系统快速进程中,用于处理键值
void SMenu_FastTask(struct _SMenu *pMenu);
//----------------------进入菜单初始化函数--------------------------
//由主界面准备进入菜单时调用挂接的菜单查找表并完成内部初始化
//pLUT: pFunAry的查找表项,首位为个数,后跟对应项ID
//还需调用SMenu_Key(SMENU_KEY_ENTER)才能正式进入菜单
void SMenu_EnterInit(struct _SMenu *pMenu,
const struct _SMenuFun *const *pFunAry,//不能为NULL
const unsigned char *pLUT);//不能为NULL
//----------------------进入菜单后直接到写模式--------------------------
//SMenu_EnterInit()后,如直接输入密码等情况可调用
#define SMenu_EnterFastWr(pmng) do{(pmng)->Flag |= SMENU_ENTER_FAST_WR;}while(0)
//----------------------------退出菜单函数--------------------------
//在菜单状态,外部强制退出菜单时调用此函数
void SMenu_Exit(struct _SMenu *pMenu);
//-------------------------接键处理函数-----------------------------
//在菜单系统中有按键时调用。
#define SMenu_Key(pmng, key) do{(pmng)->Key = key;}while(0)
/***********************************************************************
属性及辅助函数
***********************************************************************/
//------------------------更新菜单显示函数--------------------------
//调用可手动刷新
void SMenu_UpdateDisp(struct _SMenu *pMenu,
signed char IsKey);//是否为按键更新(外部应为0)
//------------------------重新装载用户数据--------------------------
//非实时刷新状态,外部数据有改变时可调用
void SMenu_ReloadUser(struct _SMenu *pMenu);
//------------------------获得正在调整项菜单指针阵列----------------
//可用于判断当前位置以显示对应图标提示等,菜单内才可调用
#define SMenu_pGetCurFunAry(mng) ((mng)->pFunAry)
//------------------------获得正在调整项菜单指针------------------------
//可用于判断当前位置以显示对应图标提示等,菜单内才可调用
#define SMenu_pGetCurFun(mng) ((mng)->pFunAry[SMenu_GetId(mng)])
//-------------------------得到当前菜单ID号--------------------
unsigned char SMenu_GetId(const struct _SMenu *pMenu);
//---------------------------得到菜单层次------------------------
//正在调整值在菜单未切换时不会改变
//unsigned char SMenu_GetLayer(struct _SMenu *pMenu);
#define SMenu_GetLayer(mng) ((mng)->Layer)
//--------------------得到当前菜单的层次内位置---------------------
//unsigned char SMenu_GetIndex(struct _SMenu *pMenu);
#define SMenu_GetIndex(mng) ((mng)->Index)
//-------------------------得到当前调整位------------------------
//unsigned char SMenu_GetWrIndex(struct _SMenu *pMenu);
#define SMenu_GetWrIndex(mng) ((mng)->WrIndex)
//-------------------------得到调整前值-----------------------
//signed short SMenu_GetOrgAdj(struct _SMenu *pMenu);
#define SMenu_GetOrgAdj(mng) ((mng)->OrgAdj)
//---------------------------得到在调整值------------------------
//正在调整值在菜单未切换时不会改变
//unsigned short SMenu_GetAdj(struct _SMenu *pMenu);
#define SMenu_GetAdj(mng) ((mng)->Para.Adj)
//------------------判断是否在实时显示状态------------------------
signed char SMenu_IsRealDisp(struct _SMenu *pMenu);
/***********************************************************************
回调函数
***********************************************************************/
#ifdef SUPPORT_SMENU_PIXEL //像素化支持时
#include "SMenu_cbPixel.h"
#else //4位数码管时:
#ifdef SUPPORT_SMENU_LED //直接调用Led.h模块时
#include "SMenu_cbLed.h"
#endif
#ifdef SUPPORT_SMENU_OTHER //直接调用Led.h类似模块时
#include "SMenu_cbOther.h"
#endif
#endif
//---------------------------退出菜单系统通报-----------------------
void SMenu_cbExitNotify(unsigned char MngId);
#endif //_SMENU_H
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。