显示驱动芯片ZDP1440系列小技巧 通过串口或者SPI 如何使用外接机械按钮

控制/MCU

1883人已加入

描述

本文导读: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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分