正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?...

点击上方「嵌入式云IOT技术圈」,选择「置顶公众号」第一时间查看嵌入式笔记!

前阵子收到了正点原子赠送的T100智能焊台以及DS100数字示波器,目前经过个人实际体验,总体感觉非常优秀,如下:

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第1张图片

1、正点原子T100智能焊台体验

将T100智能焊台做了一下简单组装,然后开启了一波操作和焊接:

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第2张图片

个人体验总结如下:

  • 体积较小,便于外出携带

  • 界面操作简单,参数设置功能丰富

  • 升温较快,控温稳定

  • 人性化的自动休眠和待机功能

  • 维护保养简单

2、正点原子T100智能焊台菜单框架

但是,作为软件工程师,我更有兴趣的是,它的界面是如何实现的?因为界面操作也是整个产品中非常重要的一部分,如下:

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第3张图片

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第4张图片

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第5张图片

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第6张图片

Q1.界面切换的软件设计思路

关于界面的切换的设计思想,可以参考如下文章:

C语言表驱动法编程实践(精华帖,建议收藏并实践)

C语言映射表在嵌入式串口解析、UI设计中的应用(值得收藏并实践的精华帖)

Q2.多语言版本的软件设计思路

如上,之前有小伙伴问过我一个问题,如何来设计多语言版本呢?正常面向全球出货的电子产品,那么它一定逃不过多语言版本,不同国家由于语言不同,导致上面显示的内容不一样,对于不同语言我们可以采用一个二维指针数组的方式来实现,第一维表示具体是哪国的语言,第二维表示具体要显示什么内容,例如:

const u8* Mulit_Language[3][LANGUAGE_NUM]=
{
  {
    "0.退出",
    "1.步进设置",
    "2.休眠温度",
    "3.休眠时间",
    "4.待机时间",
    "5.自动关机",
    "6.参数选择",
    "7.温度校准",
    "8.输出电源",
    "9.输出开关",
    "10.蜂鸣器",
    "11.语言选择",
    "12.恢复出厂",
  },
  {
    "0.Exit",
    "1.Step Set",
    "2.Sleep Temp",
    "3.Sleep Time",
    "4.Stdby Time",
    "5.Auto P_Off",
    "6.Param Sel",
    "7.Temp Calib",
    "8.Output Cur",
    "9.Output ON",
    "10.Beep ON",
    "11.Language",
    "12.Restore",
  },
  //后面还可以继续拓展别的语言
};

Q3.滑动菜单列表的软件设计思路

先来观察下这个界面包含什么信息:

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第7张图片

最上面是带填充色的标题显示,右边是一个滚动条,然后中间区域有一个指向当前项的手的图标还有具体的字符串项,当操作旋钮时,对应的项则被填充背景色,且对应项的字符串的前景色也发生改变,根据这个思路,我们可以得到设计软件应该有的一些信息:

  • 1.当前选中的位置,它应该是一个变量,可以改变

  • 2.这个菜单列表具体有多长,包含了多少个菜单列表项

  • 3.选中的时候长什么样?没有被选中的时候呢?

  • 4.选中的时候加载图标显示,没有被选中加载空图标

  • 5.菜单列表项显示的内容,具体每一项要显示什么东西

  • 6.当选中这个菜单项以后,按确认键后要触发什么操作?

  • 7.菜单之间的切换,分级,列表的话就有前、后的关系

  • 8.滚动条的实现,如何与列表信息关联?

接下来,将这些信息就可以抽象为一个结构体ListItem

typedef struct ListItem
{   
  //菜单显示时光标位置
 int8_t  item_cursor; 
  //菜单包含项目数
 uint8_t item_count;
  //显示菜单的状态 是否选中
 uint8_t item_is_select;
  //菜单项目选中的ICO数据地址
 const uint8_t *item_ico_display; 
  //菜单项目没选中的ICO数据地址
 const uint8_t *item_ico_un_display; 
  //菜单列表显示的文本内容
 const uint8_t *item_display_text;
  //跳转到对应的功能菜单
 void (*Jump_Menu)(void); 
  //切换到上一级菜单列表项
 struct ListItem* prev_item_list; 
  //切换到下一级菜单列表项
 struct ListItem* next_item_list; 
}List_Item_Typedef;

这里我们采用的是双向链表的设计思想对这个菜单进行维护和更新,根据这个结构体,继续完成一个菜单列表的控制函数与具体的结构体变量还有滚动条关联起来即可,关于滚动条我们需要单独去设计一个控件,由于篇幅原因,这里就不实现了;详细的设计过程写起来稍微有些复杂,我可以在后期单独用小熊派出一个专题来实现这个过程,并进行详细的讲解。

3、开源的GUI框架

现在GUI框架设计趋向于成熟,有很多大神也在Github和Gitee上开源了不少优秀的GUI框架,经过简单的移植(GUI是纯软件实现,只要硬件支持的操作就可以套用),我们可以拥有很多基础控件,比如按钮,进度条,图标,曲线等等,其中著名的有STemWin、LVGL、TouchGFX等等,但是针对正点原子T100焊台,其实只需要能够绘制单色的GUI框架即可,对于单色的GUI框架,我们在码云上可以轻松找到:

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第8张图片

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第9张图片

还有类似的:

针对单色显示屏的 GUI 解决方案SimpleGUI

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第10张图片

正点原子也有类似的产品,界面与T100智能焊台类似,源代码也是开源的,详情可以访问正点原子资料下载中心查看:

http://www.openedv.com/docs/tool/solder/solder.html

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第11张图片

当然,你还能搜索到更多相关的资源,通过学习这些资源你会发现,其实设计思想都差不多,只要掌握其中一个,了解其设计思想,相信有朝一日你也可以撸一个适合自己项目的GUI框架,关于菜单切换和界面实现,我之前也开源了一些项目,如下,有兴趣可自行学习或研究:

谈谈嵌入式应用软件人机界面开发的菜单框架编写

开源作品:基于RT-Thread 智慧农业监测系统产品级开发

TencentOS tiny危险气体探测仪产品级开发

基于TencentOS tiny云打印机&智能达特甲醛探测系统

4、开源的T12烙铁控制器

至于具体功能,比如焊台里PID算法是怎么处理的,功能是如何交互的,在码云上有位大佬,这位大佬现在还在读研究生,但已经能自己通过STM32把一把烙铁给造出来了,详细可以访问他的码云参考他的设计思路:

https://gitee.com/Cai-Zi/STM32_T12_Controller?_from=gitee_search

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第12张图片

正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?..._第13张图片

往期精彩

分享GitHub上一些嵌入式相关的高星开源项目

嵌入式相关开源项目、库、资料------持续更新中

带串口屏显示的Bootloader

谈谈做产品、做项目以及标准化相关的话题

觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

你可能感兴趣的:(嵌入式,编程语言,java,android,c++)