|
在参考《华芯微特屏驱上位机使用手册v2024xxxx》完成平台的适配之后,就可以开始界面相关的布局,在布局完成后,需要通过编写应用代码来实现我们想要的功能。或许刚接触LVGL的小伙伴们就提出疑问了,我创建了一个按钮之后,如何实现这个按钮的功能呢?那么接下来的篇幅主要介绍如何注册按钮/图像按钮的回调函数,实现应用功能。 硬件平台:SWDM-QFP100-34SVEA3、JLT4301A(480x272) 仿真器:Jlink V9 软件平台:MDK5.33及以上 我们先使用UI Creator来搭建两个界面,如下图: 按照使用手册将ui.bin和cfg文件拷贝至spiflash后,Keil工程中添加ui_src文件夹,形成对应的软件框架后,然后我们来实现每个按钮旁边对应描述的一些功能,步骤如下:
步骤1:获取OBJ对象
/*step1: 获取Obj对象 */ btn_load_screen = synwit_ui_find_lv_obj(WIDGET_BUTTON1); btn_uart_send = synwit_ui_find_lv_obj(WIDGET_BUTTON2);
btn_modify_style= synwit_ui_find_lv_obj(WIDGET_BUTTON3);
步骤2:注册对象回调函数 /*step2: 注册按键回调 */ lv_obj_set_event_cb(btn_load_screen, btn_event_cb); lv_obj_set_event_cb(btn_uart_send, btn_event_cb); lv_obj_set_event_cb(btn_modify_style,btn_event_cb);
步骤3:编写回调函数 void btn_event_cb(lv_obj_t *obj, lv_event_t event) { /* 示例1:加载界面 */ if(obj == btn_load_screen){ if(event == LV_EVENT_CLICKED) { /* To do*/ synwit_ui_load_screen(SCREEN002); //跳转至界面2(SCREEN002) } } /* 示例2:发送数据 */ if(obj == btn_uart_send){ if(event == LV_EVENT_CLICKED) { /* To do */ uint8_t buf[] = {"hi from synwit"}; extern void uart_send_str(uint8_t *buf, uint32_t len); uart_send_str(buf, sizeof(buf)); //串口发送字符串 } } /* 示例3:修改样式 */ if(obj == btn_modify_style) { if(event == LV_EVENT_CLICKED) { /* To do */ static uint8_t state = 0; lv_obj_t *label_text = synwit_ui_find_lv_obj(WIDGET_LABEL1); if(state == 0){ lv_obj_set_style_local_text_color(label_text, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); //改变字体颜色 state = 1; }else if(state == 1){ lv_obj_set_style_local_text_color(label_text, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); //改变字体颜色 state = 0; } } } } 至此,我们完成了按键对象获取、注册回调函数、编写回调函数的流程,可以下载烧录到样板上查看效果,结合代码,我们不难看出,按下“l加载界面”时,界面会跳转至界面2;按下“串口发送”时,uart0会发送一串数据,将Demo板中CH340的TX RX与芯片M0 M1短接后,可在串口助手中查看发送的数据;按下“修改样式”时,右边的描述文字的颜色会发生改变。 附件:1、该Demo的UI Creator工程以及Keil工程 2、演示视频
|