ZDP1440系列小技巧丨如何使用机械按钮

企业   2024-04-26 11:43   广东  

本文导读

ZDP1440是一款基于开源GUI引擎的图像显示专用驱动芯片,可以通过串口或者SPI与其他芯片通信,但本身没有多余的接口去外接按钮,本文将介绍通过与其他芯片通信,实现外接旋转按钮的功能。

在有的产品上,通常没有外接电阻电容触摸,通过外接实体按键来控制UI;对于一些极简的键盘类型,如:三键键盘、五键键盘以及旋转按钮,AWTK也有对应的方案支持。这类键盘通常通过控制焦点的移动然后触发“确认/取消”功能,下面介绍设置流程:

1. 启用焦点停留

在没有触摸输入时,通过按键切换焦点来控制UI中的控件,该控件必须启用焦点停留功能。在AWTK中,除edit相关控件外,其余控件需指定控件的focusable属性为true;
  • 在AWTK Designer中,可以勾选focusable复选框:

勾选focusable复选框

2. 指定初始焦点

启用了焦点停留后,还需指定每个页面的初始焦点;

  • 在C代码中,可以这样指定:

widget_set_prop_bool(widget, WIDGET_PROP_FOCUSED, TRUE);

3. 设置键盘类型

AWTK中将键盘分为三种类型:正常键盘、三键键盘和五键键盘;对于三键或五键键盘(有些变种带有数字键和功能键也归于此类)来说方向键既要用于导航(切换焦点),又要用于控件输入数据,所以需要引入一种状态(或称为模式):

  • 在移动焦点的状态:方向键用于切换焦点;
  • 在非移动焦点的状态:方向键用于修改控件的值;
回车的作用:
  • 在按钮等支持用回车键激活的控件上,用于激活按钮,相当于点击事件;
  • 在编辑器等控件上,用于切换状态,用于改变方向键的作用;
旋转按钮处理方法等同于三键:左旋触发方向左键,右旋触发方向右键,按下触发回车键。
由于处理方式的不同,在初始化时需指定键盘的类型,建议将这部分代码放至application.capplication_init中,以旋转按钮为例:

ret_t application_init() {

system_info_set_keyboard_type(system_info(), KEYBOARD_3KEYS);

return RET_OK;

}

4.传递键值

由于ZDP1440无法外接旋转按钮,所以旋钮等键盘外设只能接在控制芯片上,通过串口/SPI向ZDP1440发送按钮状态,ZDP1440收到消息后通过对应接口发送键值及按键状态:

ret_t main_loop_post_key_event(main_loop_t* l, bool_t pressed, uint8_t key);

其中:
  • l为main_loop_t类型的指针,固定传入main_loop()
  • pressed为按键状态,1为按下、0为抬起
  • key为键值
注:PC端不支持此函数接口
对于三键及五键键盘来说,对应的键值宏定义为:

上:TK_KEY_UP

下:TK_KEY_DOWN

左:TK_KEY_LEFT

右:TK_KEY_RIGHT

回车:TK_KEY_RETURN

我们可以使用ZDP1440内置的协议解析器,采用命令+数据的方式,传递键值:

1   /**

 * \brief  收到键值

 */

  static void on_key_down(void)

5   {

6        char* cmd_data;                       // 存放命令后的数据

7        int data_len;                            // 存放命令后数据的长度

8        get_cmd_data(&cmd_data, &data_len); // 获取命令后的数据

9        uint8_t key = TK_KEY_UNKNOWN;

10      if(data_len == 1) {                    // 命令长读为1

11          switch((uint8_t)(cmd_data[0])) {   // 强制转换为无符号

12               case TK_KEY_UP:

13                    key = TK_KEY_UP;

14                    break;

15               case TK_KEY_DOWN:

16                   key = TK_KEY_DOWN;

17                    break;

18               case TK_KEY_RETURN:

19                    key = TK_KEY_RETURN;

20                    break;

21               default:

22                    break;

23            }

24        }

25        if (key != TK_KEY_UNKNOWN) {

26            main_loop_post_key_event(main_loop(), 1, key);

27            main_loop_post_key_event(main_loop(), 0, key);

28        }

29  }

30  /* 注册收到键值的回调函数 */

31  ZDP_REGISTER_CMD(keydn, on_key_down);

5.运行效果

按照上述操作,创建一个简单的UI,设置所有按钮支持焦点停留,设置初始焦点为第一个按钮,label显示上一次按下的按钮名称:

新建简单UI

设置键盘类型为三键模式,添加协议解析器并加入解析数据和发送键值相关代码,生成固件下载至ZDP1440,实际运行效果如下:

如何使用旋转按钮视频演示

资料分享

HMI-ZDP1440开发套件资料持续更新中,需要获取最新资料,可关注如下链接:

https://gitee.com/zlgmcuopen/HMI_ZDP1440D

购买链接

HMI-ZDP1440D开发套件已在微商城上架,点击链接即可购买。

技术交流群

如需加入技术交流群,请添加客服微信,我们将邀请您进群,与志同道合的朋友交流,并有专业技术人员为您答疑解惑。

合作咨询

长按识别如下二维码,添加立功科技官方客服。

立功科技

电话|400-888-2705

芯片与智能物联解决方案供应商

立功科技
芯片与智能物联解决方案供应商
 最新文章