请问单片机在lcd上实现菜单结构体中的索引号是怎么确定的?程序:
typedef st ruct
{ uchar KeyStateIndex ; / / 当前状态索引号
uchar KeyDnState ; / / 按下“向下”键时转向的状态索引号
uchar KeyUpState ; / / 按下“向上”键时转向的状态索引号
uchar KeyCrState ; / / 按下“回车”键时转向的状态索引号
uchar KeyBackState ; / / 按下“退回”键时转向的状态索引号
void ( 3 CurrentOperate) ( ) ; / / 当前状态应该执行的功能操作} KbdTabSt ruct ;
# define SIZE - OF KEYBD - MENU 55 / / 菜单总长度
KbdTabSt ruct code KeyTab[ SIZE - OF - KEYBD - MENU ] =
{
{0 ,0 ,0 ,1 ,0 , ( 3 MainJob1) } ,
{1 ,7 ,2 ,8 ,0 , ( 3 Dsp Point) } , / / 第一层
{2 ,1 ,3 ,8 ,0 , ( 3 DspCurve) ) , / / 第一层
{3 ,2 ,4 ,36 ,0 , ( 3 Dsp Kout) } , / / 第一层
{4 ,3 ,5 ,50 ,0 , ( 3 DisCloseDown) } , / / 第一层
{5 ,4 ,6 ,8 ,0 , ( 3 ModifyPoint) } , / / 第一层
{6 ,5 ,7 ,52 ,0 , ( 3 SetCloseDown) } , / / 第一层
{7 ,6 ,1 ,0 ,0 , ( 3 Cancel) } , / / 第一层 … …
{52 ,53 ,53 ,0 ,1 , ( 3 OkSetCloseDown1) } ,
{53 ,52 ,52 ,0 ,1 , ( 3 OkSetCloseDown2) } ,
{54 ,0 ,0 ,0 ,0 , ( 3 Disable) } ,
} ;
void Get Keylnput (void){ switch ( status &0xf0) { case 0xe0 :/ / 回车键,找出新的菜单状态编号 …KeyFuncIndex = KeyTab[ KeyFuncIndex ] . KeyCrState ; … break ; case 0xb0 :/ / 向下键,找出新的菜单状态编号 … KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyDn2State ; … break ;case 0xd0 :/ / 向上键,找出新的菜单状态编号 … KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyUp2State ; … break ; case 0x70 :/ / 回退键,找出新的菜单状态编号 … KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyBack2State ; … break ; case 0 ; ret urn ; / / 错误的处理 break ; } KeyFuncPt r = KeyTab[ KeyFuncIndex ] . CurrentOperate ; ( 3 KeyFuncPt r) () ; / / 执行当前按键的操作}
------解决方案--------------------
不同的菜单,实现逻辑不一样,你得根据你的程序中是如何用索引的,来确定索引的含义。这玩意哪有通用的。我自己做的一个嵌入式系统上的菜单,就是自己开发的一个独立控件,跟你的什么索引机制完全不同。
------解决方案--------------------
索引是自己定的。根据自己项目中的实际需求来定。
------解决方案--------------------
找KbdTabStruct的typedef
------解决方案--------------------