OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17729|回复: 24

LCD上制作人机界面(带有菜单式的)

[复制链接]

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
发表于 2011-12-7 10:57:33 | 显示全部楼层 |阅读模式

我做了文字显示,还有图片显示,我现在想在LCD上做一个人机的界面,比如我用按键KEY0的时候,它会弹出他的子菜单,这方面资料太少,尤其是关于ALIENTEk MiniSTM32这个开发板,希望哪位大侠或者原子大哥能够指点一下,不甚感激,真的很感激~

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2015-1-27
在线时间
43 小时
发表于 2016-6-4 10:54:43 | 显示全部楼层
给楼主一个思路吧!用结构体,我看到群里面的好多人采用上下键,对应着数字,对应着某一个函数,这个方案好理解,但是一旦需要中间再加一个菜单,整体的结构等于再写一遍,比较复杂。我提供的方案就是任意添加函数功能,菜单深度可以通过宏定义改,手头项目多,不能整理。楼主仅供参考。
#ifndef _MENU_H
#define _MENU_H
#include "stm32f10x.h"
//=================================================
#ifndef NULL
  #define  NULL ((void*)0)
#endif               

//逻辑状态
#ifndef FALSE  
   #define FALSE (0)
#endif       

#ifndef TRUE  
   #define TRUE (0)
#endif       
//==================================================
typedef struct MENU_ITEM_tag
{
    unsigned char menu_count ; //当前菜单数目
          unsigned char menu_enable; //当前菜单使能
    char *display_string;      //菜单标题
    void (*subs)();            //菜单函数
          struct MENU_ITEM_tag* children_menus; //子菜单
}MENU_ITEM_t;
//===================================================
//菜单结构体定义
MENU_ITEM_t   *pmenu_point;
//====================================================
struct
{
   MENU_ITEM_t *pparent_menu[4]; //指向父菜单的指针,最高为四级菜单
   unsigned char parent_count;//菜单层次,第二项为零,则该项菜单灰掉
         unsigned char menu_select[4];//上层次选择的菜单,进入下一级菜单前,记录本级菜单的显示位置
         unsigned char menu_display_start[4];//上层选择的菜单
}parent_manage;
//===========================================================================
//函数声明
void dtmb_freq_set(void);
void dtmb_vol_set(void);

void cable_freq_set(void);
void cable_symbol_set(void);
void cable_vol_set(void);

void fm1_freq_set(void);
void fm1_vol_set(void);
void fm2_freq_set(void);
void fm2_vol_set(void);

void area_set(void);
void device_num_set(void);

void dtmb_freq_read(void);
void dtmb_vol_read(void);

void cable_freq_read(void);
void cable_symbol_read(void);
void cable_vol_read(void);

void fm1_freq_read(void);
void fm1_vol_read(void);
void fm2_freq_read(void);
void fm2_vol_read(void);

void area_read(void);
void device_num_read(void);

void status_check(void);

void version_check(void);
//===========================================================================
//函数声明
//===========================================================================
MENU_ITEM_t dtmb_para[3] =
{// menu_count     DisplayString       subs          childrenmenu
{3,1,         "2-1-1 频率设置",     dtmb_freq_set,      NULL},
{3,1,         "2-1-2 音量设置",     dtmb_vol_set,       NULL},
{3,1,         "<<返回",              NULL,              NULL}
};
//============================================================================
//cable 参数设置菜单
MENU_ITEM_t cable_para[4]=
{// menu_count     DisplayString       subs          childrenmenu
  {4,1,           "2-2-1 频率设置",  cable_freq_set,   NULL},
  {4,1,           "2-2-2 符号设置",  cable_symbol_set, NULL},
        {4,1,           "2-2-3 音量设置",  cable_vol_set,    NULL},
        {4,1,           "<<返回",          NULL,             NULL}
};
//============================================================================
MENU_ITEM_t fm_para[5] =
{// menu_count     DisplayString       subs          childrenmenu
  {5,1,           "2-3-1 FM1频率",    fm1_freq_set,    NULL},
  {5,1,           "2-3-2 FM1音量",    fm1_vol_set,     NULL},
  {5,1,           "2-3-3 FM2频率",    fm2_freq_set,    NULL},
  {5,1,           "2-3-4 FM2音量",    fm2_vol_set,     NULL},
  {5,1,           "<<返回",           NULL,            NULL}       
};
//============================================================================
MENU_ITEM_t area_para[3] =
{
  {3,1,           "2-4-1 地址设置",   area_set,         NULL},
        {3,1,           "2-4-2 编号设置",   device_num_set,   NULL},       
        {3,1,           "<<返回",            NULL,            NULL}
};
//============================================================================
//设置参数菜单
MENU_ITEM_t para_set[5]=
{ // menu_count     DisplayString       subs          childrenmenu
   {5,1,             "2-1 地数设置",    NULL,             dtmb_para },
         {5,1,             "2-2 有线设置",    NULL,             cable_para},
         {5,1,             "2-3 调频设置",    NULL,             fm_para   },
         {5,1,             "2-4 地址设置",    NULL,             area_para },
         {5,1,             "<<返回",          NULL,             NULL},
};
//=============================================================================
//地数参数读取
MENU_ITEM_t read_dtmb_para[3] =
{
   {3,1,          "1-1-1 地数频率",   dtmb_freq_read,    NULL },
         {3,1,          "1-1-2 地数音量",   dtmb_vol_read,     NULL },
   {3,1,          "<< 返回",          NULL,              NULL },                       
};
//=============================================================================
MENU_ITEM_t read_cable_para[4] =
{
         {4,1,         "1-2-1 有线频率", cable_freq_read,      NULL},
   {4,1,         "1-2-2 符号率",   cable_symbol_read,    NULL},
         {4,1,         "1-2-3 有线音量", cable_vol_read,       NULL},
         {4,1,         "1-2-4 <<返回",   NULL,                 NULL},
};
//=============================================================================
MENU_ITEM_t read_fm_para[5] =
{
  {5,1,          "1-3-1 FM1频率",    fm1_freq_read ,      NULL},
        {5,1,          "1-3-2 FM1音量",    fm1_vol_read,        NULL},
        {5,1,          "1-3-3 FM2频率",    fm2_freq_read,       NULL},
        {5,1,          "1-3-4 FM2音量",    fm2_vol_read,        NULL},
  {5,1,          "1-3-5 <<返回",      NULL,               NULL}               
};
//=============================================================================
MENU_ITEM_t read_area_para[3] =
{
  {3,1,          "1-4-1 地址读取",   area_read,          NULL},
  {3,1,          "1-4-2 编号读取",   device_num_read,     NULL},
        {3,1,          "<<返回",             NULL,             NULL}       
};

//=============================================================================
//读取参数菜单
MENU_ITEM_t read_para[5] =
{
    {5,1,          "1-1 地数参数",     NULL,          read_dtmb_para   },
                {5,1,          "1-2 有线参数",     NULL,          read_cable_para  },
    {5,1,          "1-3 调频参数",     NULL,          read_fm_para     },
    {5,1,          "1-4 地址读取",     NULL,          read_area_para   },
    {5,1,          "<<返回",           NULL,           NULL            }               
};
//=============================================================================
//主菜单定义
MENU_ITEM_t main_menu[4] =
{ // menu_count     DisplayString       subs          childrenmenu
   {4,1,             "1 读取参数",      NULL,          read_para   },
   {4,1,             "2 设置参数",      NULL,          para_set    },
         {4,1,             "3 状态查看",      status_check,   NULL},
   {4,1,             "4 <<返回",        NULL,           NULL}                 
};
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-12-7 11:20:25 | 显示全部楼层
回复【楼主位】shuilian007:
---------------------------------
菜单,这东西说简单就简单,说复杂可以很复杂。
其实你可以模仿一下诺基亚的手机,那种200元左右的机型,菜单就按手机的来做就可以了。最简单。
具体实现,无非就是画点画线,需要自己多动脑子。不过确实国内好像没有专门教人如何写GUI的书本,比较遗憾。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

48

主题

376

帖子

0

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2011-3-18
在线时间
7 小时
发表于 2011-12-7 12:23:35 | 显示全部楼层
每天做10 hour,做 2個月就有效了,快不了,現在我就是這樣
回复 支持 反对

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
 楼主| 发表于 2011-12-7 14:55:48 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我现在只想做一个最简单的界面,不必要太复杂~不知道从何入手,原子大哥,希望你能多多指点~比如我用按键控制一个菜单,里面有子菜单,不用那么f复杂~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-12-7 15:12:57 | 显示全部楼层
回复【4楼】shuilian007:
---------------------------------
把你看到的转为你所要做的,就可以了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

248

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
463
金钱
463
注册时间
2011-2-11
在线时间
12 小时
发表于 2011-12-7 19:09:50 | 显示全部楼层
单窗口的GUI需求大吗?
还是做成多窗口的?感觉多窗口的太复杂了。
Openedv大力支持的开源RTOS  --Trochili RTOS(飞鸟)
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-12-7 19:21:31 | 显示全部楼层
回复【6楼】trochili:
---------------------------------
gui对内存需求还是蛮大的.
要想效果好,内存需求肯定就大.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2011-12-8 09:23:36 | 显示全部楼层
楼主,直接移植ucgui吧!!
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
 楼主| 发表于 2011-12-8 09:55:59 | 显示全部楼层
回复【8楼】Tardis:
---------------------------------
谢谢了,各位~
回复 支持 反对

使用道具 举报

15

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2011-9-28
在线时间
0 小时
发表于 2011-12-12 15:18:24 | 显示全部楼层
不用!如果界面不复杂,可用加载位图或JPGA图片就行!不用操作系统,不用ucGUI!如果涉及菜单嵌套就相对麻烦点,if和swtich嵌套就行,但不难,没技术含量!哈哈!我都实现了!
火拼狂赌
回复 支持 反对

使用道具 举报

7

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2012-9-25
在线时间
3 小时
发表于 2012-11-15 08:47:33 | 显示全部楼层
把看到的转为你要做的,就可以了,这应该是到了无招胜有招的境界了,厉害
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-11-15 10:59:01 | 显示全部楼层
做GUI说简单也很简单,说复杂也很复杂,得看个人兴趣,还有算法很重要,如果你想实现透明效果的话,算法可是得动脑筋了。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-5-23 15:15:08 | 显示全部楼层
楼主做好了mini板的吗?分享一个呀
合肥-文盲
回复 支持 反对

使用道具 举报

13

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-12-12
在线时间
13 小时
发表于 2014-5-24 08:20:43 | 显示全部楼层
回复【12楼】Tardis:
---------------------------------
能说说透明的话该怎么实现,能否给个思路?
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2014-5-26 19:03:18 | 显示全部楼层
回复【14楼】luofeng:
---------------------------------
简单,alpha值取百分比就得了,不是有RGB值吗?上面那层的RGB值乘百分比加背景色的RGB值就得出透明了,如果你要磨砂透明,那算法就复杂一点,磨砂透明效果的实现,是把当前像素点的周围8个像素点的RGB值,相加除以8,然后得出目标RGB值,再用透明那个算法和背景色混合就得出磨砂效果,这效果也叫高斯模糊
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-5-28 14:10:42 | 显示全部楼层
回复【10楼】hujiansheng121:
---------------------------------
分享一个你做成功的呀?mini板
合肥-文盲
回复 支持 反对

使用道具 举报

10

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-12-3
在线时间
0 小时
发表于 2014-5-28 14:15:45 | 显示全部楼层
回复【15楼】Tardis:
---------------------------------
我去 蛮高端的。哈
不用谢了……
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2014-5-30 22:57:43 | 显示全部楼层
回复【17楼】eling13:
---------------------------------
确实
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-29 14:36:09 | 显示全部楼层
这菜单都成盲区了,怎么都找不到参考资料的?
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-29 14:38:09 | 显示全部楼层
回复【3楼】mbass51:
---------------------------------
楼主厉害,现在效果怎样了?求分享下
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-8-16
在线时间
2 小时
发表于 2016-6-4 09:33:35 | 显示全部楼层
?/nane
回复 支持 反对

使用道具 举报

22

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2016-9-26
在线时间
59 小时
发表于 2016-12-20 00:13:22 | 显示全部楼层
淋哥儿 发表于 2016-6-4 10:54
给楼主一个思路吧!用结构体,我看到群里面的好多人采用上下键,对应着数字,对应着某一个函数,这个方案好 ...

谢谢分享
回复 支持 反对

使用道具 举报

8

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2017-1-14
在线时间
48 小时
发表于 2017-2-8 22:37:06 | 显示全部楼层
正点原子 发表于 2011-12-7 15:12
回复【4楼】shuilian007:
---------------------------------
把你看到的转为你所要做的,就可以了。

原子大哥的话好有哲理啊!到这论坛来没走错啊!我做多级菜单也就是这样想的。以后少不了向原子大哥学习了,还希望多赐教!不胜感激。
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-6-10
在线时间
8 小时
发表于 2020-6-23 19:40:24 | 显示全部楼层
mini板做成功了吗,楼主
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 10:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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