智能汽车在调试中需要与操作人员进行交互,需要设计一个UI显示系统。功能完善设计简洁的UI不仅能够方便平时调试,也能够方便参赛选手根据赛场实际情况随机应变。
在本套例程中,UI结构体内包含两个执行函数,一个是UI.Disp()显示函数,一个是UI.Adjust()调整函数。显示函数在杂项周期中循环运行,通过OLED屏幕显示操作界面,调整函数在触发按键后运行,执行按键相应的操作。
UI界面的显示通过OLED屏幕相关的库函数执行,显示函数的结构如下:
显示函数主要通过嵌套的switch结构实现。ui.level是UI界面的层级,主界面在第0层级,次级界面在第1层级,开发者可以根据需求自行添加层级。ui.cursor数组储存了各层级的光标位置。在非0层级时需要通过判断上一层级的光标位置来确定应该显示的UI界面,如当UI界面位于第1层级时,显示内容由ui.cursor[0]即主界面光标所在位置决定。显示函数并非LPLD库函数,它们是OLED屏幕的开源显示代码,此处也通过结构体进行了封装。界面显示函数UI_DispUIStrings(uint8 strings[8][22])中调用的UI界面数组,如UI_Menu等,在UIString源文件中定义,一个UI显示界面定义需要满足[8][22]的大小格式,这是由屏幕的尺寸型号决定的,当屏幕尺寸型号改变时需要连同显示函数一起修改。
UI的调整函数结构如下:(www.xing528.com)
UI调整函数的思路与UI显示函数一致,只是结构中的内容是UI执行函数。此处唯一一个执行函数是发车函数RunCar(),它的执行条件是UI层级大于等于2。可以通过设置不同的执行条件来实现不同的功能。
由于同一PORT的GPIO接口外部中断源一致,按下按键之后需要判断具体中断来源。此处以“ok”按键为例,外部中断的代码如下:
触发外部中断后,通过寄存器值判断触发的按键,然后做一次消抖处理。如果判断按键按下,蜂鸣器计时赋值,按键延时赋值(避免重复按下按键),按键模式赋值,光标赋值,调用UI调整函数,最后清空按键中断标志位,这样就完成了按键的UI操作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。