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

 

 

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

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

 

 

个人体验总结如下:

  • 体积较小,便于外出携带界面操作简单,参数设置功能丰富升温较快,控温稳定人性化的自动休眠和待机功能维护保养简单

 

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

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

 

 

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.滑动菜单列表的软件设计思路

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

 

 

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

 

  • 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框架,我们在码云上可以轻松找到:

 

 

还有类似的:

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

 

 

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

 

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

 

 

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

 

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

 

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

 

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

 

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

 

4、开源的T12烙铁控制器

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

 

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