加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

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

2021/04/29
813
阅读需 10 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

前阵子收到了正点原子赠送的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

正点原子

正点原子

广州市星翼电子科技有限公司(正点原子)是一家从事嵌入式开发平台、智能仪表、IoT物联网和企业服务等软硬件研发、销售一体化的国家高新技术企业。公司成立于2012年,是国内知名度较高的嵌入式开发平台供应商,产品远销东南亚欧美各国,国内数百家高校实验室和培训机构采用正点原子开发平台作为实验教学平台,服务了超过100万电子工程师。

广州市星翼电子科技有限公司(正点原子)是一家从事嵌入式开发平台、智能仪表、IoT物联网和企业服务等软硬件研发、销售一体化的国家高新技术企业。公司成立于2012年,是国内知名度较高的嵌入式开发平台供应商,产品远销东南亚欧美各国,国内数百家高校实验室和培训机构采用正点原子开发平台作为实验教学平台,服务了超过100万电子工程师。收起

查看更多

相关推荐

电子产业图谱

本科毕业于华南理工大学,现美国卡罗尔工商管理硕士研究生在读,曾就职于世界名企伟易达、联发科技等,多年嵌入式产品开发经验,在智能玩具、安防产品、平板电脑、手机开发有丰富的实战开发经验,现任深圳市云之手科技有限公司副总经理、研发总工程师。