搜索
bottom↓
回复: 2

求助,请问各位大侠,LCD用傻孩子菜单的最底层如何显示变量?

[复制链接]

出0入0汤圆

发表于 2011-10-31 13:03:28 | 显示全部楼层 |阅读模式
使用傻孩子的菜单模式,可以实现显示固定的字符,但是到最底层就不知道该如何显示变量了。用ASCII码的形式是可以显示变量,但是不知道如何才能融入傻孩子的菜单结构之中。
比如设置时间参数的时候,如何显示数字变量,还有设置日期和星期等等呢个。求各位大侠帮忙贴个例子。非常感谢。
以下是我使用的结构菜单,
/***********************  
* 函数声明 *  
***********************/  
void ShowMenu(void);
void Menu_Change(void);

/**********************  
* 目录结构体定义 *  
**********************/  
struct MenuItem
{  
unsigned char MenuCount;                 //当前层节点数
unsigned char *DisplayString;         //菜单标题
void (*Subs)();                                   //节点函数
struct MenuItem *ChildrenMenus; //子节点
struct MenuItem *ParentMenus;         //父节点
};  

/***********************  
* 调用子函数区 *  
***********************/  
void NullSubs(void)  
{  
}
//----------------------以下为例子,请根据实际情况修改---------------------------
/*
void TimeSet(void)
{
put_s("TimeSet");
}

void DateSet(void)
{
put_s("DateSet");
}

void AlertSet (void)
{
put_s("AlertSet");
}
//------------------------------------------------------------------------------
*/  



/***********************  
* 结构体区 *  
***********************/  
//----------------------以下为例子,请根据实际情况修改---------------------------
struct MenuItem code callMenu[4];
struct MenuItem code errorMenu[3];
struct MenuItem code funcMenu[4];
struct MenuItem code MainMenu[3];



struct MenuItem code callMenu[4]=
{  //MenuCount              DisplayString                        Subs                            ChildrenMenus                ParentMenus
         {4,                          "1.call records ",                         NullSubs,                        Null,                                MainMenu},
         {4,                         "2.miss calls",                          NullSubs,                        Null,                                MainMenu},
         {4,                         "3.received calls",                  NullSubs,                        Null,                                MainMenu},
     {4,                         "4.Dialled numbers",                  NullSubs,                        Null,                                MainMenu},
};         

struct MenuItem idata errorMenu[3]=
{  //MenuCount                 DisplayString                         Subs                                ChildrenMenus                ParentMenus
         {3,                          "1.error records",                 NullSubs,                        Null,                                MainMenu},
         {3,                         "2.extension error",         NullSubs,                        Null,                                MainMenu},
         {3,                         "3.sub error",                          NullSubs,                        Null,                                MainMenu},
};         

struct MenuItem idata funcMenu[4]=
{  //MenuCount                 DisplayString                         Subs                                ChildrenMenus                ParentMenus
         {4,                          "1.time set",                 NullSubs,                        Null,                                MainMenu},
         {4,                         "2.date set",                           NullSubs,                        Null,                                MainMenu},
         {4,                         "3.password set",             NullSubs,                        Null,                                MainMenu},
         {4,                           "4.name set",                     NullSubs,                        Null,                                MainMenu},

};         

struct MenuItem  idata MainMenu[3]=
{  //MenuCount                 DisplayString                         Subs                                ChildrenMenus                ParentMenus
         {3,                          "1.call records ",                 NullSubs,                        callMenu,                        Null},
         {3,                         "2.error records",                 NullSubs,                        errorMenu,                        Null},
         {3,                         "3.function set",                 NullSubs,                        funcMenu,                        Null},

};
         
//------------------------------------------------------------------------------


/***********************  
* 全局变量声明区 *  
***********************/  
struct MenuItem (*MenuPoint) = MainMenu; //结构体指针,指向结构体后由内部函数指针指向功能函数
unsigned char DisplayStart = 0; //显示时的第一个菜单项
unsigned char UserChoose = 0;          //用户所选菜单项
unsigned char DisplayPoint = 0; //显示指针
unsigned char MaxItems;                                     //同级最大菜单数
unsigned char ShowCount=2;                //同屏显示菜单数
unsigned char keyvalue;
unsigned char i;
uchar code tab[]={//共阴极0~f数码管编码
0x3f,0x06,0x5b,0x4f,     //0~3
0x66,0x6d,0x7d,0x07,    //4~7
0x7f,0x6d,0x77,0x7c,    //8~b
0x39,0x5e,0x79,0x71    //c~f
};        //共阴极

/***********************  
*显示函数区 *  
***********************/  
void ShowMenu(void)  
{
         unsigned char n;
         MaxItems = MenuPoint[0].MenuCount;//定义最大同级菜单
         DisplayPoint = DisplayStart;
         for(n=0;DisplayPoint<MaxItems&&n<ShowCount;n++)  
                 {if(DisplayPoint==UserChoose)
                          disp_string(0,n,"->");
                     disp_string(2,n,MenuPoint[DisplayPoint++].DisplayString);
                  
                 }

}

void Menu_Change(void)
{
                if(keyvalue)
                {
                    
           switch(keyvalue)  
                   {                     
                                                   case 12:                  //UP
                                                         P0=tab[i++];
                                                         UserChoose --;  
                                                         if (UserChoose ==255)
                                                         {  
                                                                   UserChoose = 0;//上翻截至,如果要回滚赋值MaxItems-1
                                                         }  
                                                         break;  
                                                case 11:                   //ESC
                                                         if (MenuPoint[UserChoose].ParentMenus != Null)  
                                                         {  
                                                                   MenuPoint = MenuPoint[UserChoose].ParentMenus;  
                                                                UserChoose = 0;  
                                                                DisplayStart = 0;  
                                                        }  
                                                        break;  
                                                case 13:                   //DOWN
                                                         UserChoose ++;  
                                                         if (UserChoose == MaxItems)  
                                                         {  
                                                           UserChoose = MaxItems-1;//下翻截至,如要回滚赋值为0  
                                                         }  
                                                         break;  
                                                case 14:                   //ENTER
                                                         if (MenuPoint[UserChoose].Subs != NullSubs)  
                                                         {  
                                                           (*MenuPoint[UserChoose].Subs)();  
                                                         }  
                                                         else if (MenuPoint[UserChoose].ChildrenMenus != Null)  
                                                         {  
                                                           MenuPoint = MenuPoint[UserChoose].ChildrenMenus;  
                                                           UserChoose = 0;  
                                                           DisplayStart = 0;  
                                                         }  
                                                         break;  
                                           case 21:  
                                                           MenuPoint = MainMenu;  
                                                        UserChoose = 0;  
                                                        DisplayStart = 0;  
                                                        break;  
                                           default:break;
                        }
                        keyvalue=0;
                        if (UserChoose%ShowCount==0)           //一屏只能显示ShowCount行
                          DisplayStart = UserChoose;
                        else if(UserChoose==1||UserChoose== 3)
                           DisplayStart = UserChoose-1;                   //实现滚屏的关键                                 
                                      write_com(0x01);                           //液晶清屏,根据不同液晶函数自行修改
                        delayms(5);                                                   //液晶为慢速器件
                        ShowMenu();  
                }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2011-11-1 09:03:14 | 显示全部楼层
都沉下去了,自己顶一下。

出0入0汤圆

发表于 2017-11-16 22:49:00 | 显示全部楼层
楼主 能发一份 傻孩子菜单的代码吗,谢谢先
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 06:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表