搜索
bottom↓
12
返回列表 发新帖
楼主: zcllom

再挖一个仿真+两条有价值回复献给此地:单片机+LCD显示菜单(C源程序+proteus仿真) (众

[复制链接]

出0入0汤圆

发表于 2011-3-29 21:54:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-29 21:59:34 | 显示全部楼层
mark!!!!

出0入0汤圆

发表于 2011-3-31 16:41:55 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2011-4-2 10:40:34 | 显示全部楼层
支持下

出0入0汤圆

发表于 2011-4-6 16:11:41 | 显示全部楼层
很不错!Mark!

出0入0汤圆

发表于 2011-4-14 19:39:25 | 显示全部楼层
我做了修改的
使用时周期性调用 MenuUpdata()

可以返回时 返回上层进入时的位置
结构体 位于FLASH
可以显示 小数 整数 负数.....
子函数更好的调用
.......
/*************************************************************/
menu.h

#ifndef _MENU_H
#define _MENU_H


/***********************
* 函数声明 *
***********************/
void ShowMenu(void);
void MenuUpadta(void);




/**********************
* 目录结构体定义 *
**********************/
struct MenuItem
{
    unsigned char MaxCount;
    unsigned char * __flash Title;         //菜单标题
    void (*Subs)(void);                                   //节点函数
    __flash struct MenuItem * __flash ChildMenus; //子节点

}  ;
void task2(void);

/***********************
* 全局变量声明区 *
***********************/

__flash extern struct MenuItem TimeMenu[3];
__flash  extern struct MenuItem MainMenu[4];


extern struct MenuItem __flash*  MenuPoint  ;//结构体指针,指向结构体后由内部函数指针指向功能函数
extern struct MenuItem __flash* LastMenuPoint;
extern unsigned char UserChoose;          //用户所选菜单项
extern unsigned char LastUserChoose;  // 用来保存返回时的UserChoose
extern unsigned MaxItems;                                     //同级最大菜单数
extern const unsigned char ShowCount;                //同屏显示菜单数
extern unsigned char IsBottom;
//unsigned char DisplayStart1;
#endif

/************************end of the file******************************************/


/**************************   menu.c  ********************************************/

#include"common.h"
#include "key.h"
#include "1602.h"
#include "mymenu.h"




/***********************
* 结构体区 *
***********************/
//----------------------以下为例子,请根据实际情况修改---------------------------
__flash  struct MenuItem MainMenu[4]=
{                  // DisplayString         Subs        ChildrenMenus
         {        4, "1.Time Set",                 0,                        TimeMenu,                        },
         {        4 ,"2.Date Set",                 task2,                Null,                                },
         {        4 ,"3.AlertSet",                  0,                        Null,                                },
         {  4 ,"4.Back",                          0,                        Null,                        },
};

__flash  struct MenuItem TimeMenu[3]=
{          //         MaxCount    DisplayString        Subs        ChildMenus
         {            3, "1.",                         0,                        Null,                                },
         {            3,   "2.",                          0,                        Null,                                },
         {            3,"3.",                           0,                        Null,                                },
};




/***********************
* 全局变量区 *
***********************/
struct MenuItem __flash *MenuPoint = MainMenu; //结构体指针,指向结构体后由内部函数指针指向功能函数
struct MenuItem __flash* LastMenuPoint=MainMenu;
unsigned char UserChoose = 0;          //用户所选菜单项
unsigned char LastUserChoose = 0;  // 用来保存返回时的UserChoose
unsigned MaxItems;                                     //同级最大菜单数
const unsigned char ShowCount=2;                //同屏显示菜单数
unsigned char IsBottom=0;
unsigned char DisplayStart1=0;

unsigned char size=0;
void task2(void)
{
   //static unsigned int i=0;
   LcmPutUint16(0,0,size);
   //i++;


}

/***********************
*显示函数区 *
***********************/
void ShowMenu(void)
{
         unsigned char n;
         unsigned char DisplayPoint = 0; //显示指针

         MaxItems = MenuPoint[0].MaxCount;
         DisplayPoint = DisplayStart1;
         for(n=0;DisplayPoint<MaxItems&&n<ShowCount;n++)
                 {if(DisplayPoint==UserChoose)
                                 LcmPutChar(0,n,0);
                 LcmPutString(1,n,MenuPoint[DisplayPoint++].Title);

                  }
/*
    static unsigned int i=0;
   LcmPutUint16(0,0,i);
   i++;
   */
}
void MenuUpadta(void)
{
        // 菜单函数的执行
        if(IsBottom)
        {

            (*MenuPoint[UserChoose].Subs)();


           if(KeyNum==ESC)
           {


           IsBottom=0;
           CLC();
           }


            return;
        }



                if(KeyNum)
                {
                   switch(KeyNum)
                   {
                                                   case UP:
                                                         UserChoose --;
                                                         if (UserChoose ==255)
                                                         {
                                                                   UserChoose = 0;//上翻截至,如果要回滚赋值MaxItems-1
                                                         }
                                                         break;
                                                case ESC:
                                                         {
                                                                   MenuPoint = LastMenuPoint;
                                                                UserChoose = LastUserChoose;
                             }
                                                        break;
                                                case DOWN:
                                                         UserChoose ++;
                                                         if (UserChoose == MaxItems)
                                                         {
                                                           UserChoose = MaxItems-1;//下翻截至,如要回滚赋值为0
                                                         }
                                                         break;
                                                case ENTER:
                                                         if (MenuPoint[UserChoose].Subs != Null)
                                                         {
                                                           IsBottom=1;
                                                         }
                                                         else if (MenuPoint[UserChoose].ChildMenus != Null)
                                                         {
                               LastMenuPoint=MenuPoint;
                                                           MenuPoint = MenuPoint[UserChoose].ChildMenus;
                                                           LastUserChoose = UserChoose;
                                                           UserChoose = 0;
                             }
                                                         break;

                                           default:break;
                        }
                        /************************* SET  DisplayStart **********************/
                        if (UserChoose%ShowCount==0)           //一屏只能显示ShowCount行
                          DisplayStart1 = UserChoose;
                        else if(UserChoose%ShowCount==1)
                           DisplayStart1 = UserChoose-1;                   //实现滚屏的关键
                        CLC();                           //液晶清屏,根据不同液晶函数自行修改


                }
                ShowMenu();
}

出0入0汤圆

发表于 2011-4-14 23:08:14 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-4-14 23:53:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-15 08:05:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-15 15:37:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-2 22:09:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-21 19:12:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-21 21:13:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-1 10:38:48 | 显示全部楼层
MARK!!

出0入0汤圆

发表于 2011-8-1 21:12:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-1 21:20:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-3 19:15:03 | 显示全部楼层
学习了!!谢谢~!!

出0入0汤圆

发表于 2011-8-4 14:41:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-4 02:21:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-4 11:03:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-4 20:36:34 | 显示全部楼层
都mark

出0入0汤圆

发表于 2011-10-5 11:03:52 | 显示全部楼层
MARK,怎么像傻孩子的模式

出0入0汤圆

发表于 2011-10-19 13:32:34 | 显示全部楼层
mark lcd menu
头像被屏蔽

出0入0汤圆

发表于 2011-10-19 14:20:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-21 17:01:35 | 显示全部楼层
谢了!

出0入4汤圆

发表于 2011-11-30 19:27:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-6 09:49:31 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-2-6 10:14:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-18 13:26:25 | 显示全部楼层
记一下号

出0入0汤圆

发表于 2012-2-18 14:06:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-21 21:29:39 | 显示全部楼层
好东西真不少。谢啦。

出0入0汤圆

发表于 2012-2-27 18:25:08 | 显示全部楼层

出0入0汤圆

发表于 2012-2-28 08:59:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-28 10:33:46 | 显示全部楼层
mark

出0入30汤圆

发表于 2012-2-28 10:41:19 | 显示全部楼层
MARK

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-7 23:47

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

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