控制/MCU
本文导读:ZDP1440是一款基于开源GUI引擎的图像显示专用驱动芯片,可以通过串口或者SPI与其他芯片通信,但本身没有多余的接口去外接按钮,本文将介绍通过与其他芯片通信,实现外接旋转按钮的功能。
在有的产品上,通常没有外接电阻电容触摸,通过外接实体按键来控制UI;对于一些极简的键盘类型,如:三键键盘、五键键盘以及旋转按钮,AWTK也有对应的方案支持。这类键盘通常通过控制焦点的移动然后触发“确认/取消”功能,下面介绍设置流程:
在AWTK Designer中,可以勾选focusable复选框:
勾选focusable复选框
启用了焦点停留后,还需指定每个页面的初始焦点;
widget_set_prop_bool(widget, WIDGET_PROP_FOCUSED, TRUE);
AWTK中将键盘分为三种类型:正常键盘、三键键盘和五键键盘;对于三键或五键键盘(有些变种带有数字键和功能键也归于此类)来说方向键既要用于导航(切换焦点),又要用于控件输入数据,所以需要引入一种状态(或称为模式):
ret_t application_init() {
system_info_set_keyboard_type(system_info(), KEYBOARD_3KEYS);
return RET_OK;
}
ret_t main_loop_post_key_event(main_loop_t* l, bool_t pressed, uint8_t key);
其中:上:TK_KEY_UP
下:TK_KEY_DOWN
左:TK_KEY_LEFT
右:TK_KEY_RIGHT
回车:TK_KEY_RETURN
我们可以使用ZDP1440内置的协议解析器,采用命令+数据的方式,传递键值:1 /**
2 * brief 收到键值
3 */
4 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);
新建简单UI
设置键盘类型为三键模式,添加协议解析器并加入解析数据和发送键值相关代码,生成固件下载至ZDP1440
资料分享
HMI-ZDP1440开发套件资料持续更新中,需要获取最新资料,可关注如下链接:
https://gitee.com/zlgmcuopen/HMI_ZDP1440D全部0条评论
快来发表一下你的评论吧 !