OLED菜单实现和智能车调参

使用结构体指针、函数指针和中断实现。

这是想法是因为扫描按键速度慢,KEA-128芯片已经没有可以用于定时中断的定时器而萌发出的。

因为KEA芯片主频低,我认为消抖在调车后期没有意义。




结构体:

struct ShowMenu{
	
 	void (*FunNow)(void);//函数指针
	
  	struct ShowMenu *Left;//结构体指针									struct ShowMenu *Up;
	struct ShowMenu *Right;
	struct ShowMenu *Down;
	
};

类似链表的实现方式将变量链接在一起,再用一个结构体指针指向调用函数,用按键改变结构体指针的指向,用来调用不同的函数,实现显示的目的。

变量声明:

extern struct ShowMenu MainMenu_1,MainMenu_2,MainMenu_3,MainMenu_4,*FunShowMenu;				
extern struct ShowMenu SecondaryMenu_1_1,SecondaryMenu_1_2,SecondaryMenu_1_3,SecondaryMenu_1_4;
extern struct ShowMenu SecondaryMenu_2_1,SecondaryMenu_2_2,SecondaryMenu_2_3,SecondaryMenu_2_4;
extern struct ShowMenu SecondaryMenu_3_1,SecondaryMenu_3_2,SecondaryMenu_3_3,SecondaryMenu_3_4;
extern struct ShowMenu SecondaryMenu_4_1,SecondaryMenu_4_2,SecondaryMenu_4_3,SecondaryMenu_4_4;

只写了主菜单(4项)和次级菜单(各4项)。接下来是初始化这一堆结构体。

为了方便链接结构体成环我写了一个函数。

#define LEN 4


void AddUp_Down ( struct ShowMenu *pointer,... ) { //结构体链接成环函数
    uint8 Num;
    va_list FormalParameter;                                             ///*类似pintf函数实现方式*///  //int printf ( const char * format, ... );
    struct ShowMenu *ExchangePointer=pointer;
    struct ShowMenu *ExchangePointer_a=pointer;
    struct ShowMenu *ExchangePointer_b=pointer;
    va_start ( FormalParameter,pointer );
    for ( Num=0; Num<LEN-1; Num++ ) {
        ExchangePointer_b=va_arg ( FormalParameter,struct ShowMenu * );
        ExchangePointer_a->Down=ExchangePointer_b;
        ExchangePointer_b->Up=ExchangePointer_a;
        ExchangePointer_a=ExchangePointer_b;
    }
    ExchangePointer->Up=ExchangePointer_b;
    ExchangePointer_b->Down=ExchangePointer;
    va_end ( FormalParameter );
}

中断里的部分代码,我使用的4个按键KBI中断。

uint32 FLAG=0;

void KBI0_IRQHandler ( void )
{
    FLAG = READ_KBI0_FLAG;
    if ( FLAG )
    {
        if ( FLAG&2048 ) { // Key_Up

            if ( FunShowMenu->Up ) {

                FunShowMenu=FunShowMenu->Up;
                ( *FunShowMenu->FunNow ) ();
            }


代码:https://github.com/DuXiangwen/KEA-128_-.git

  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Arduino OLED菜单是一种基于Arduino控制板和OLED显示屏的用户界面菜单。该菜单可以通过各种控制板(如Arduino Uno, Mega等)与不同尺寸的OLED显示屏(如128x64、0.96英寸等)配对使用。该菜单使用了Arduino的C++编程语言,并且通过简单的接线和中等难度的编程即可实现。 该菜单可以根据用户的需求进行定制和改造,如添加、删除和修改功能,修改菜单项名称和显示内容等。这个菜单可以实现一些小型的功能,例如控制LED,驱动电机,检测温度和湿度等。由于该菜单界面简洁、易于控制和使用,所以它被广泛应用于物联网、电子设备和自动化系统等领域。 在制作Arduino OLED菜单时,需要考虑以下几个方面:显示屏、控制板、菜单项的设计和菜单功能的实现等。使用OLED显示屏可以提供更好的显示效果和更广的视野,而控制板需要能够提供足够的计算能力和实际控制外设的能力。在菜单项的设计中应该考虑清楚,包括名称、参数、选项和对应功能。菜单功能的实现可以通过定义函数和逻辑判断语句来实现。 总的来说,Arduino OLED菜单是一种简单而实用的电子设备控制菜单,它可以方便地与各种外设和传感器协作,实现各种特定的功能。随着物联网和智能家居的快速发展,Arduino OLED菜单将发挥越来越重要的作用。 ### 回答2: Arduino OLED菜单是一种在Arduino开发板上使用的图形用户界面,可以用于创建交互式菜单和图形用户界面。它可以帮助开发者快速简单地构建用户界面,在Arduino上显示各种信息和数据,从而使Arduino与用户友好接口进行交互。 OLED菜单由多种元素组成,如文本,滚动文本,图像,进度条和可点击的对象。开发者可以使用这些元素创建自定义的用户界面,并将其显示在OLED上。Arduino OLED菜单实现可能会因基于所使用的硬件和库的不同而有所不同。 当Arduino开发板启动时,OLED菜单可能会显示一个初始菜单页面。该菜单页面可以包含多个菜单项,例如“设置”、“信息”、“控制”等,用户可以通过滚动或点击来浏览和选择不同菜单项。每个菜单选项可以连接到另一个菜单页面或一个特定的功能。开发者可以根据需要进行自定义,以满足应用程序的要求。 在一个Arduino项目中,OLED菜单可以帮助用户方便地操作和监控Arduino连接的硬件模块,例如传感器、执行器和其他外设。开发者可以将条目添加到菜单中,以直接访问它们的功能和状态。开发者还可以集成Arduino菜单与其他库和组件,例如图表库和通信库,以增强用户体验。 总而言之,Arduino OLED菜单是一种功能强大且易于使用的用户界面,用于在Arduino项目中显示数据和状态,并提供直观的交互方式。借助该工具,开发人员可以轻松构建可定制的用户界面,并与其项目的硬件模块进行交互。 ### 回答3: Arduino OLED菜单是一种能够帮助人们在Arduino平台上快速构建交互式菜单的解决方案。该方案基于OLED屏幕和Arduino控制器开发,允许用户通过几个简单的步骤来创建自定义菜单,以满足各种应用需求。 在构建一个基于Arduino OLED菜单的应用程序时,用户需要首先选定适合自己需求的OLED屏幕类型和Arduino控制器,然后在该控制器上加载并运行相关的代码库和示例代码。这些代码库中包含了多种不同的菜单样式和操作功能,并且可以在用户自定义代码中进行修改和扩展,以满足不同的需求。 使用Arduino OLED菜单,用户可以轻松地创建一个多级菜单结构来完成其应用程序的各项功能。这些菜单包括活动菜单、子菜单、设置菜单、可编辑项、可选择项等,使得用户可以快速且方便地进行各种设置和参数调整等操作。同时,该菜单还提供了一些强大的操作功能,比如滚动列表、多线程处理、定制主题等,以满足用户对菜单界面的各种要求。 总之,Arduino OLED菜单是一种实用、易用、灵活且高效的解决方案,它能够满足人们在控制器应用程序中对于交互式菜单的各种需求,同时可以随时根据各种场合进行定制和扩展。这是一个非常实用的技术,也是未来经常应用的一种技术。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值