28613|74

4997

帖子

19

TA的资源

裸片初长成(初级)

楼主
 

LCD单层菜单翻滚的实现 [复制链接]

 

在很多项目中我们都需要菜单,特别是多层菜单应用比较广泛,但是写一个能够很方便移植的多层菜单非常麻烦,我们这里就先研究一下单层菜单的翻滚的实现方式。

 

下面就以一个例子来说明此菜单的具体实现方法:

 

1. 假设本菜单使用在128*64的点阵LCM上。

 

2. 菜单显示为3行,一行为菜单项目名称。

 

3. 菜单选择项反白显示。

 

4. 一个采用5个按键:UP,DOWN,OK,LEFT,RIGHT。及上、下、左、右和确定键。

 

那么菜单可能产生的效果应该有以下18种情况:

 

 

 

 

        从上面的图不难看出,8个菜单项,每次显示3项,最多有6种可能,而每一只种又有3种光标显示,所以一共就有18中显示状态。那么如果我们要通过上下按键来实现这几种菜单的显示,我们就必须找到它们之间的规律。认真看看图,看它们究竟有什么样的规律,开动你的大脑吧!!!!!!!!

 

 

下面把它们的规律找出来:

 

1.横着3项菜单内容相同,只是光标位置不同,所以我们把横着相同的用页表示,一共分为6也Page = 0~5。

 

2.竖着6项光标相同,一共有3种可能,用Cursor = 0~2表示。

 

我们把每个菜单Page和Cursor已经这两个参数的和Sum表示出来,那么我们就能完全掌握它们的所有规律的了。。。。。。。。。

 

 

我们可以看出Sum相同的菜单,其光标位置是相同的,所以,我们只有控制好Cursor和Page两个变量就可以实现菜单的翻滚了。。。。。。

 

 


很多网友不太理解菜单的翻滚方式,这里

特做了两个简单的动画,一个上一直按上键,一个是一直按下键的动画,其他按键方式内同。。。。。。。。。。


上键 

下键

[ 本帖最后由 zhaojun_xf 于 2012-11-21 17:34 编辑 ]
此帖出自NXP MCU论坛

最新回复

为什么我看不到代码   详情 回复 发表于 2021-11-23 21:54
点赞 关注(24)
个人签名我的博客
 

回复
举报

4997

帖子

19

TA的资源

裸片初长成(初级)

推荐
 

有了上面的理论基础,下面的代码实现并不难:

 

1.定义菜单结构体:

 

// 菜单参数

  1. typedef struct _MENU_PRMT
    {
         uint8 Cursor;             // 光标值(当前光标位置)
         uint8 PageNo;             // 菜单页(显示开始项)
         uint8 Index;             // 菜单索引(当前选择的菜单项)
         uint8 DispNum;             // 显示项数(每页可以现在菜单项)
         uint8 MaxPage;             // 最大页数(最大有多少种显示页)
    } MENU_PRMT;

  2. extern MENU_PRMT MenuPrmt;

复制代码

 

  1. // 菜单执行
    typedef struct _MENU_TABLE
    {
         uint8 *MenuItem;            // 菜单项目名称
         void (*ItemHook)(void);                    // 要运行的菜单函数
    } MENU_TABLE;

复制代码

2.菜单项定义 MENU_TABLE MMenu[M_MENU_NUM] = // 管理菜单 { {"1.时间设定 ", App_SetClock}, // 时钟设置 {"2.系统参数 ", App_SetSysPrmt}, // 参数设置 {"3.教学参数 ", App_SetTeachPrmt}, // 教学参数 {"4.下载参数 ", App_DownloadPrmt}, // 下载参数 {"5.清除存储 ", App_ClearStorage}, // 清除存储 {"6.校对速度 ", App_ProofSpeed}, // 速度校对 {"7.退出管理 ", App_ExitMenu}, // 退出管理 {"8.其他设置 ", App_Other}, // 其他设置 }; 3.初始化菜单参数 /************************************************************************************** * FunctionName : AppMenuPrmtInit() * Description : 初始化菜单参数 * EntryParameter : None * ReturnValue : None **************************************************************************************/ void AppMenuPrmtInit(void) { MenuPrmt.Cursor = 0; // 光标清零 MenuPrmt.PageNo = 0; // 页清零 MenuPrmt.Index = 0; // 索引清零 } 4.菜单显示设置 /************************************************************************************** * FunctionName : App_MenuSet() * Description : 设置菜单显示 * EntryParameter : num - 页菜单显示项,page - 最多页数 * ReturnValue : None **************************************************************************************/ void App_MenuSet(uint8 num, uint8 page) { MenuPrmt.DispNum = num; // 页最多显示项目数 MenuPrmt.MaxPage = page; // 最多页数 } 5.菜单显示 /************************************************************************************** * FunctionName : App_MenuDisplay() * Description : 显示菜单 * EntryParameter : page - 显示页,dispNum - 每一页的显示项,cursor - 光标位置 * ReturnValue : None **************************************************************************************/ void App_MenuDisplay(MENU_TABLE *menu, uint8 page, uint8 dispNum, uint8 cursor) { uint8 i; for (i=0; i 本帖最后由 zhaojun_xf 于 2012-1-4 07:42 编辑 ]
此帖出自NXP MCU论坛

点评

菜单显示那里,for(i=0;那里缺了点东西吧······):) :)  详情 回复 发表于 2013-8-23 17:42
真的是 好东西啊!!  详情 回复 发表于 2013-4-20 12:57
楼主,你贴出的程序很详细,非常感谢你的分享!但是就是最后我有点没看明白,你能给我讲讲吗?主要是这一段 if (SysPrmt.KeyValue != KV_NO)  详情 回复 发表于 2012-10-23 21:39
 
个人签名我的博客
 
 

回复

140

帖子

0

TA的资源

一粒金砂(高级)

推荐
 
来做个板凳
此帖出自NXP MCU论坛
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

4
 

以上意见实现了,单层菜单的滚动效果,思路非常简单,实现也很容易。有了上面的单层菜单实现的基础,要实现多层菜单就不难了,只需要注意几个方面:

 

1.实现菜单的上下层切换连接,也就是说在菜单中定义两个函数指针,一个指向上层菜单(父菜单),一个指向下层菜单(子菜单)。

 

2.从上层往下层移动时需要保护好上层菜单的参数不变,而从下层往上层时,应该清零下层菜单参数,以便下次进入下层菜单时从,下层菜单的起始处开始。

 

3.一个菜单定义一个结构体,保证参数便于存储,保存状态。

 

[ 本帖最后由 zhaojun_xf 于 2012-1-4 07:58 编辑 ]
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

152

帖子

1

TA的资源

一粒金砂(中级)

5
 
看到了
此帖出自NXP MCU论坛
 
 
 

回复

2056

帖子

0

TA的资源

五彩晶圆(初级)

6
 
好东西!
此帖出自NXP MCU论坛
 
 
 

回复

391

帖子

1

TA的资源

一粒金砂(高级)

7
 
学习了
此帖出自NXP MCU论坛
 
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

8
 
很透彻   关注
此帖出自NXP MCU论坛
 
 
 

回复

206

帖子

0

TA的资源

一粒金砂(高级)

9
 

一般不是这样做的

我们是这样的
page0:
1
2
3
光标1->2->3    光标到3后按down键,翻页
page1:
4
5
6
光标4->5->6    光标到6后按down键,翻页
page2:
7
8
9
光标7->8->9    光标到9后按down键,翻页
此帖出自NXP MCU论坛
 
 
 

回复

391

帖子

0

TA的资源

纯净的硅(高级)

10
 
仁者见仁智者见智
此帖出自NXP MCU论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

11
 
楼主辛苦了:carnation:
此帖出自NXP MCU论坛
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(高级)

12
 
大力支持,以后希望有更多的知识共享,我也争取可以发表自己的一点小收获!
此帖出自NXP MCU论坛
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

13
 

回复 10楼 ljt8015 的帖子

按照你这种分页显示效果并不连贯,手机一般都是我这样分页显示的
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

803

帖子

0

TA的资源

一粒金砂(高级)

14
 
MARK.
此帖出自NXP MCU论坛
 
 
 

回复

308

帖子

0

TA的资源

纯净的硅(中级)

15
 
mark一下,等等慢慢看。。
此帖出自NXP MCU论坛
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(中级)

16
 

非常感谢楼主

非常感谢,求之难得的好贴
此帖出自NXP MCU论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

17
 
非常感谢,难得的好贴
此帖出自NXP MCU论坛
 
 
 

回复

471

帖子

0

TA的资源

一粒金砂(高级)

18
 
学习了
此帖出自NXP MCU论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(高级)

19
 

回复 沙发 zhaojun_xf 的帖子

楼主,你贴出的程序很详细,非常感谢你的分享!但是就是最后我有点没看明白,你能给我讲讲吗?主要是这一段
        if (SysPrmt.KeyValue != KV_NO)                                                                                        // 有按键
        {                                                        
                if (App_MenuMove(SysPrmt.KeyValue) == 0x00)                                                                // 菜单移动
                {
                        LCMClearScreen(LCM_WHITE);                                                                                // 清屏
                        MMenu[MenuPrmt.Index].ItemHook();                                                        // 执行相应项
                }

                SysPrmt.KeyValue = KEY_NO;                                                                                        // 清除按键值
        }
此帖出自NXP MCU论坛

点评

判断是否有按键,有按键相应菜单移动,如果是OK键,返回0x00,清屏,执行选择项  详情 回复 发表于 2012-10-24 13:21
 
 
 

回复

5304

帖子

453

TA的资源

五彩晶圆(高级)

20
 
如果楼主  拍个视频,能够看下LCD上效果应该更好!
此帖出自NXP MCU论坛

点评

没有拍视频的习惯。。。。。。。  详情 回复 发表于 2012-10-30 09:33
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表