LVGL获取按下btnmatrix的序列
时间: 2023-12-29 08:05:06 浏览: 25
要获取按下 LVGL 中的 `btnmatrix` 控件的序列,可以使用 `lv_btnmatrix_get_selected_btns` 函数。该函数返回一个指向按下按钮序列的指针,序列以 `-1` 结尾。以下是示例代码:
```c
/* 获取按下 btnmatrix 的序列 */
lv_obj_t * btnmatrix = lv_btnmatrix_create(lv_scr_act(), NULL);
lv_btnmatrix_set_map(btnmatrix, btnmap);
lv_btnmatrix_set_btn_ctrl(btnmatrix, 0, LV_BTNMATRIX_CTRL_CHECK_STATE);
lv_btnmatrix_set_btn_ctrl(btnmatrix, 1, LV_BTNMATRIX_CTRL_CHECK_STATE);
lv_btnmatrix_set_btn_ctrl(btnmatrix, 2, LV_BTNMATRIX_CTRL_CHECK_STATE);
lv_btnmatrix_set_btn_ctrl(btnmatrix, 3, LV_BTNMATRIX_CTRL_CHECK_STATE);
lv_btnmatrix_set_btn_ctrl(btnmatrix, 4, LV_BTNMATRIX_CTRL_CHECK_STATE);
lv_btnmatrix_set_btn_ctrl(btnmatrix, 5, LV_BTNMATRIX_CTRL_CHECK_STATE);
lv_btnmatrix_set_btn_ctrl(btnmatrix, 6, LV_BTNMATRIX_CTRL_CHECK_STATE);
lv_btnmatrix_set_btn_ctrl(btnmatrix, 7, LV_BTNMATRIX_CTRL_CHECK_STATE);
/* 等待用户按下按钮 */
lv_event_t event;
while (1) {
event = lv_event_wait(btnmatrix, LV_EVENT_VALUE_CHANGED);
if (event == LV_EVENT_VALUE_CHANGED) {
/* 获取按下的按钮序列 */
const uint16_t * btns = lv_btnmatrix_get_selected_btns(btnmatrix);
printf("按下的按钮序列: ");
while (*btns != LV_BTNMATRIX_BTN_NONE) {
printf("%d ", *btns);
btns++;
}
printf("\n");
}
}
```
在上面的示例中,我们创建了一个 `btnmatrix` 控件,并使用 `lv_btnmatrix_set_btn_ctrl` 函数将每个按钮的控制器设置为 `LV_BTNMATRIX_CTRL_CHECK_STATE`,表示按钮可以被选中或取消选中。然后我们使用 `lv_event_wait` 函数等待用户按下按钮,并在回调函数中使用 `lv_btnmatrix_get_selected_btns` 函数获取按下的按钮序列。最后,我们将按钮序列打印到终端上。