读书人

lcd多级菜单小问,该如何解决

发布时间: 2013-01-27 13:55:24 作者: rapoo

lcd多级菜单小问
本帖最后由 hy512 于 2012-12-31 23:21:36 编辑 请问单片机在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
------解决方案--------------------


LCD的翻页操作比较麻烦

读书人网 >单片机

热点推荐