你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何在显示设备上制作一个菜单?

[复制链接]
gaosmile 发布时间:2021-1-14 13:25
摘要:程序中菜单的种类与菜单化程序具有明显的优势,程序的实现方式通常有两种:一种是基于命令行方式,即通过输入指令驱动程序实现相应的功能;二是基于菜单方式,即通过选择不同的菜单实现程序的不同功能。前者的最大缺点是必须精确掌握指令,对操作者而言,它不是十分方便;后者,则只要通过选择不同的菜单项,就可以实现不同的功能,因此,它便于操作,成为程序实现的主流方式。
  h1 v5 a1 ]1 l6 I7 ?; Q% n
菜单(menu)已经被广泛应用于各种程序中。可以毫不夸张地说,几乎所有程序都使用菜单驱动方式。因而,掌握基于菜单的程序开发是十分必要的。程序中使用的菜单种类繁多,常见的有:弹出菜单、下拉菜单、图标菜单、多级菜单等,界面形式也五花八门。本例中我们通过一个显示屏和两个按键和led小灯就可以实现,当然显示设备可以是TFT彩屏也可以是0.96寸OLED小屏或者其他的显示设备,按键也可以用触摸屏代替,LED灯是对应菜单的响应操作,当然也可以用其他的器件代替。因为思路是一样的,大家可以举一反三的自行设计。! E' W$ Y1 Y# l8 }' j, Z
9 T, V" z" O. g1 A2 n; O
1、菜单设计! w3 u/ `1 _' _! e7 r6 `$ X% @
通过 一 个按键控制箭头上下移动, 即该键相当于上下移动光标控制键;通过另外一 个按键选中当前菜单项, 该键相当于回车确认键。按键1用于实现光标移动功能(箭头上下移动),按键2用于实现选择确认(回车键)功能。( h3 ^, @( B) g" F
1 B/ f) A8 L- r; [1 G: |& e' o
# q& l% n! D2 X2 ?. `
2、实现思路

菜单的实现方式有多种。就上述菜单而言,可以通过以下方法实现。

(1)首先,显示上述初始画面。
(2)然后,不停地捕捉按键1或按键2。如果是按键1,则首先清屏,然后将箭头放在菜单的第二项位置,整个菜单显示出来,这样感觉是光标下移了;如果光标已经位于最后一个菜单项,则移到第一个菜单项。如果是按键2,则表示选中光标所在的菜单项,则执行对应的功能。菜单的切换其实与动画的原理有点类似。
8 g  F* k; A6 W8 `* d1 Z; n& x4 O
- n& q% X/ t# b2 G
3、硬件电路
& h! {* w2 B2 j硬件部分非常简单,只涉及两个按键、两个LED。按照所使用的实验板的原理图,对应的引脚关系为:(1)KEY1与引脚PA0相连,KEY2与引脚PC5相连。(2)LED0与引脚PA8相连,LED1与引脚PD2相连。(3)显示设备用自己现有的屏幕作为显示,TFT彩屏和oled都可以。" F8 r* k8 |/ U: n3 z8 y6 x+ d
4 I* u3 J4 b1 ?

% F/ r- ]3 R* R4 Z' y/ C4、程序流程图

先画好程序流程图,整理好显示思路与逻辑,之后按照步骤写出对应函数的驱动代码。最后下载实验显示即可。

微信图片_20210114132423.png
5、具体代码% n7 o& ^9 I; Q* p9 j0 g( j! W8 I
这里设置了三个菜单,菜单显示函数如下:void DisplayMenu(u8 t), K4 n4 }/ |/ G+ E$ v' `  O# e
{ , I5 v9 d# J; b* k
switch(t)
* T5 F2 ]% v, s {
8 a: g! y( a9 Z" s: A  case 1:
& {+ [6 u( w  w( z   LCD_Clear(WHITE);   
3 m1 E  E- I* v# ]   LCD_ShowString(20,20,200,24,24,(u8*)"Select:");
9 R+ n; x$ n, O$ r0 p" b) P' x   LCD_ShowString(20,50,200,24,24,(u8*)"-->");
$ I+ u2 r  q$ [( F7 S3 j6 v% m+ X   LCD_ShowString(60,50,200,24,24,(u8*)"light led0");) ?/ O3 M* Y7 J4 r# T$ D) P
   LCD_ShowString(60,80,200,24,24,(u8*)"light led1");# G5 {1 v" S3 A( H& I
   LCD_ShowString(60,110,200,24,24,(u8*)"light two led");  n( C; e& x2 H* Z
   break;  
7 S5 G( D, W$ t3 o6 [/ R  case 2:
; t) d( J" X0 C" r3 c) d   LCD_Clear(WHITE);   1 L; [  Y8 T8 H; r
   LCD_ShowString(20,20,200,24,24,(u8*)"Select:");8 S- Z1 T9 F$ l: y
   LCD_ShowString(60,50,200,24,24,(u8*)"light led0");/ N$ D  |" B' |! b' h
   LCD_ShowString(20,80,200,24,24,(u8*)"-->");* C: B- \/ ^5 @
   LCD_ShowString(60,80,200,24,24,(u8*)"light led1");
& _" g, t+ B+ p" ?7 s   LCD_ShowString(60,110,200,24,24,(u8*)"light two led");  
% B# S! ^4 S- I! [; c6 a   break;2 Z7 m3 l7 Y& ~" r
  case 3:
5 b5 Q. n* q1 L2 r3 e2 |) {   LCD_Clear(WHITE);   # G) P2 \, A7 u/ l" r
   LCD_ShowString(20,20,200,24,24,(u8*)"Select:");
& n# r$ \# C% P: r8 m3 i! U# [   LCD_ShowString(60,50,200,24,24,(u8*)"light led0");
7 Y* s3 T7 W4 h! g5 k# C   LCD_ShowString(60,80,200,24,24,(u8*)"light led1");
( a7 {5 S1 }$ V/ G0 }* Z  k   LCD_ShowString(20,110,200,24,24,(u8*)"-->");
: \% m7 f8 ~4 K! N3 J* L   LCD_ShowString(60,110,200,24,24,(u8*)"light two led");# K* x6 {" a& x: l& I
   break;2 n9 |% k0 S; k4 u4 x2 x
}
, ?/ q; B1 O+ i( R}
6 n, m/ |) E0 ?; X
接着就是检测按键按下以及处理函数DisplayMenu(1);//显示初始菜单1$ a2 d& _1 r( h
while(1)
; n5 n$ X7 l7 m& D{5 m8 r! j% P1 ?/ G! g5 t
t=KEY_Scan(0);//按键检测哪一个按键按下" F$ ~+ S9 D6 T2 M$ e" l
switch(t)" G! @. D2 H5 H, s' Z4 ]
{
$ K' f/ E! `) W  case 1:    //KEY1 确定按键按下7 ^8 b; l$ x' {
    flag=0;
7 y- j# S1 x* v  Q& _& i    ExecuteFunction(cur);//执行确定按键操作
1 q% V4 U2 W- |1 T2 a* p) K9 Z    break;) j: R" I7 `8 L. _) F$ T6 @* R
  case 2: flag=1;  //KEY2 下移按键按下
( a, m- Q# ]4 s- ^7 r5 y" \      if(cur==3) //如果是最后一个菜单      
7 m% \6 G$ }; h7 u* z; \: {       cur=1;   //重新指向菜单1
' l% B! o5 U2 j4 x0 r1 F5 ?$ A2 |      else        //如果不是最后一个菜单
. f& T) \3 Z$ I. Q4 B2 i       cur++;  //重新指向菜单+15 L' l! F+ ~6 E
      break;  / H- q4 u, T+ I8 G9 G! j# ?) t
} ; ^) t- ^& _1 p3 o1 e1 v9 N9 O
if(flag)
% k7 c; S1 |1 ~6 Z4 a2 M" R4 o {7 H! Z, E# |; A% b3 A7 c5 |, N4 o
  DisplayMenu(cur);//显示对应菜单画面/ G/ @: V' B# R: N: E
  flag=0;
, |3 y% H; S/ ?8 V/ W3 e" L }# V5 D0 e' |% ?5 x1 ^9 i4 N
} ( P( G, g1 m7 H3 a* n

最终结果如下:

微信图片_20210114132430.gif
总结:菜单的切换就是不断地检测相应的按键按下,首先清屏,然后将箭头放在菜单的第二项,或者跳转到第二个画面,如果光标处于最后一个菜单项或者处于最后一个画面,则移动到第一个菜单项。按下—清屏—显示,三步即可。
5 ^" B. v' @% X/ S

& m+ J' t+ B: h. B) t6 s" I% ]) b
赞 收藏 评论0 发布时间:2021-1-14 13:25

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版