OLED上多级界面的编写方式

OLED显示屏上多级界面的实现方式


author:calmuse

time:2017/11/30


我个人学习到多级界面的实现主要应该是每一级(或者说每一个画面)之间的跳转方式。我从网上的程序理解的大致关键,如下:
1.首先定义一个结构体

typedef struct
{
    u8 current;//当前状态索引号
    u8 next; //向下一个
    u8 enter; //确定
    void (*current_operation)(void); //当前状态应该执行的操作
} Menu_table;

结构体里包含了当前的状态索引号、按下next键后状态的索引号、按下确定键按键后状态的索引号,(这实际上取决于你为这个界面设计了多少个按键,我这里因为板子上只留了两个按键,所以只设计了next和enter两个按键),以及当前状态对应的函数,这个函数确定了你这一级的界面是什么样子的,我一开始对此不是很了解

2.接下来我来介绍索引号以及索引号的使用方法,这是程序思想的关键。先定义一个结构体数组

Menu_table  table[56]=
{
    {0,0,1,(*fun0)},//一级界面
    {1,2,0,(*fun1)},//二级界面第一行
    {2,3,4,(*fun2)},//二级界面第二行
    {3,1,5,(*fun3)},//二级界面第三行
    {4,4,1,(*fun4)},//三级界面
    {5,5,1,(*fun5)},//三级界面
};

u8  func_index = 0;//主程序此时所在界面的索引值

再定义这个函数,这是索引号随着按键按下改变的执行部分。

void  Menu_key_set(void)
{
  Get_key_next = get_button(button1);
  Get_key_enter = get_button(button2);
  if(Get_key_next == 1)
  {   
    func_index=table[func_index].next;
    OLED_Clear();
  }
  if(Get_key_enter == 1)
  {
    func_index=table[func_index].enter;
    OLED_Clear();
  }

  current_operation_index=table[func_index].current_operation;
  (*current_operation_index)();//执行当前操作函数
}

这个结构体数组,实际上就包含了界面设计的精髓,首先,我的思想是,首先我们在主界面(主界面只显示开机界面),这时按下next无反应,所以按下next,索引号仍然变为0,但按下enter键,界面进入第二级界面(第二级界面有三行,EXIT、function1、function2),在哪一行,哪一行高亮。所以数组中第一个是(0,0,1,(*fun0)),同理可得,进入第二行后,想将光标(假装是光标)移动,则按下next,令其索引号为3,按下enter,令其索引号为0(即是退回到了第一级界面了),所以数组中第二个是(1,2,0,*(fun1))。其他的基本相似。

  • 29
    点赞
  • 177
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
正在参加第十一届飞思卡尔或NXP杯智能车大赛,在k60的基础上完成了一些基于oled的用户界面。可以给大家很多的方便。 已完成的: 1:分屏。在宏中自定义中线位置,可以实现左右完全独立的分屏。 可以分别刷新,尤其适合跑uc/os操作系统的同学。 2:左右屏位置互换,因为恩师一直强调程序的通用性或可移植性,因此大部分变量还是在宏里面定义的,方便修改。其实之所以加上左右屏切换的功能,是因为今年我和两位学长一起参加的比赛,担心一开始的样子不符合他们的审美- -。所以也为了我自己方便修改... 3:对于列表的处理,已经封装成函数,只需要在传参时对应的把oled的行数上限和下限还有某行变量穿进去就行了,箭头会按照预期的想法执行,当然这也是在我的工程里实现的,对于不兼容的情况,我毕竟也考虑不了那么多。而且我未必会维护或更新这些代码了,因为我们未必会更改去年成熟的UI.里面对变量修改的代码有bug,具体体现在对浮点型的修改上,请大家自行把浮点数乘100或1000倍再做调整。 4:版权声明:现在用的很多代码都是直接找网上人家写好的,怀着一颗感恩的心来给大家分享自己的代码,希望大家尊重每个人的劳动成果,能把程序名之前注释内的声明保留下来。当然了,如果你修改了70%以上,我支持你写上自己的名字。 5:祝大家有一个好成绩。
在STM32驱动OLED多级界面,需要使用适当的库和技术来进行控制。以下为大致的实现步骤: 1. 首先,需要使用STM32提供的GPIO库和I2C库来配置和驱动OLED显示屏。通过GPIO配置OLED的引脚,使之能够连接到STM32的引脚上。使用I2C库来与OLED进行通信,发送和接收数据。 2. 创建多级界面的数据结构,以便于管理和存储多个界面的数据和状态。可以使用数组或链表等数据结构来保存不同界面的信息,如位置、大小、文本等。 3. 在主循环中,根据当前的界面状态从数据结构中获取相应的界面数据,并将其传输到OLED显示屏上。可以通过I2C发送命令和数据来设置OLED的显示参数,如清屏、显示文本等。 4. 在需要切换界面时,根据用户的操作或事件触发相应的界面切换函数。切换函数可以更改当前界面状态,从而在主循环中显示不同的界面。 5. 如果有需要,可以添加一些交互功能,如按钮或触摸屏等。通过GPIO库来初始化和读取按钮状态,或通过触摸屏驱动库来获取触摸位置,以便用户与多级界面进行交互。 6. 最后,为了提高系统的效率和响应速度,可以优化代码,减少对OLED的数据读写次数,提供渐变或过渡效果等。 通过以上步骤,可以在STM32上成功驱动OLED多级界面,使用户能够在显示屏上浏览和切换不同的界面、查看文本信息和图像等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值