当前位置: 首页 > news >正文

零知开源——STM32F4实现ILI9486显示屏UI界面系列教程(三):记事本功能实现

在智能设备的人机交互界面中,记事本功能是基础且重要的应用场景。本教程将基于STM32F4和LVGL库,在3.5英寸ILI9486显示屏上实现完整的记事本功能,包含文本输入、虚拟键盘、内容清除等核心功能。

目录

一、硬件连接(同电子书教程)

二、软件UI组件实现 

三、零知IDE配置(同电子书教程) 

四、演示效果

五、常见问题解决 

六、总结与扩展 


一、硬件连接(同电子书教程)

硬件连接方式与电子书阅读器完全一致,请参考系列教程(一)的硬件连接部分。显示屏直接插入零知增强板专用接口,无需额外连线。

系列教程直达:零知开源——STM32F4实现ILI9486显示屏UI界面系列教程(一):电子书阅读器功能

ILI9486扩展板显示屏及记事本UI页面图: 

二、软件UI组件实现 

 2.1 核心功能实现

lv_obj_t *win = create_app_win("NotePad");lv_coord_t hres = lv_disp_get_hor_res(NULL);lv_coord_t vres = lv_disp_get_ver_res(NULL);lv_coord_t header_height = 32; // 标题栏高度// 创建文本区域lv_obj_t *ta = lv_ta_create(win, NULL);lv_obj_set_size(ta, hres - 40, (vres - header_height) / 2);lv_obj_align(ta, NULL, LV_ALIGN_IN_TOP_MID, 0, header_height + 10);lv_ta_set_text(ta, "");lv_ta_set_cursor_type(ta, LV_CURSOR_BLOCK);lv_ta_set_placeholder_text(ta, "Type your note here...");lv_ta_set_sb_mode(ta, LV_SB_MODE_AUTO);// 创建键盘 - 使用更小的键盘节省空间lv_obj_t *kb = lv_kb_create(win, NULL);lv_obj_set_size(kb, hres - 40, (vres - header_height) / 3);lv_obj_align(kb, ta, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);lv_kb_set_ta(kb, ta);// 创建按钮容器 - 简化按钮数量lv_obj_t *btn_cont = lv_cont_create(win, NULL);lv_cont_set_layout(btn_cont, LV_LAYOUT_ROW_M);lv_obj_set_size(btn_cont, hres - 40, 40);lv_obj_align(btn_cont, kb, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);// 只保留清除按钮节省空间lv_obj_t *btn_clear = lv_btn_create(btn_cont, NULL);lv_obj_t *btn_clear_label = lv_label_create(btn_clear, NULL);lv_label_set_text(btn_clear_label, "Clear");lv_obj_set_event_cb(btn_clear, note_clear_event_cb);lv_obj_set_user_data(btn_clear, ta);

 

2.2 文本区域功能详解

 光标控制

  LV_CURSOR_BLOCK:块状光标,提高可视性

  自动光标跟踪:滚动时保持光标可见

  触摸精确定位:点击任意位置移动光标

滚动优化

  自动滚动条管理(LV_SB_MODE_AUTO)

  平滑滚动动画

  长文本分页渲染

占位提示

  引导用户输入的提示文本

  输入内容时自动消失

  内容清空后重新显示

2.3 清除功能实现

// 清除按钮事件处理
static void note_clear_event_cb(lv_obj_t * btn, lv_event_t event)
{if(event == LV_EVENT_SHORT_CLICKED) {lv_obj_t *ta = (lv_obj_t *)lv_obj_get_user_data(btn);lv_ta_set_text(ta, "");}
}

 

三、零知IDE配置(同电子书教程) 

请参考系列教程(一)的零知IDE配置部分,确保: 

  • 正确配置LCD屏幕驱动
  • 启用触摸屏支持
  • 添加LVGL库依赖 

关键配置项:

#define LV_USE_TA            1
#define LV_USE_KB            1
#define LV_USE_ANIMATION     1    // 启用动画效果
#define LV_FONT_ROBOTO_16    1    // 启用默认字体

 

 触摸屏校准:

bool my_touchpad_read(lv_indev_drv_t * indev, lv_indev_data_t * data)
{static lv_coord_t last_x = 0;static lv_coord_t last_y = 0;data->state = ts.touched() ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;if(data->state == LV_INDEV_STATE_PR){TS_Point p = ts.getPoint();last_x = LV_HOR_RES-(p.y *LV_HOR_RES)/4095;       last_y = (p.x *LV_VER_RES)/4095;       Serial.print("touched:");Serial.print(last_x);Serial.print(",");Serial.println(last_y);}data->point.x = last_x;data->point.y = last_y;return false; 
}

四、演示效果

4.1 功能演示

  • 触摸键盘输入英文内容
  • 触摸文本区域移动光标
  • 滑动查看长文本内容
  • 点击清除按钮清空内容
  • 大小写和符号键盘切换

 

4.2 视频效果

STM32F4驱动ILI9486实现记事本功能

记事本界面包含文本编辑区、虚拟键盘和清除按钮 

4.3 性能指标

项目数值说明
键盘响应时间< 50ms从触碰到键盘弹出的延迟
内存占用32KB包括LVGL核心和文本缓冲区
输入响应延迟< 30ms按键到字符显示的时间
最大字符容量无限制动态内存管理
触摸精度±3像素键盘按键触发精度

 

五、常见问题解决 

▶ 输入卡顿/优化方法

// 在lv_conf.h中增加内存池大小
#define LV_MEM_SIZE (16U * 1024U)  // 增加至48KB
#define LV_DISP_DEF_REFR_PERIOD 30  // 降低刷新率至30ms 

六、总结与扩展 

6.1 实现总结

本教程实现了基础记事本功能:

  • 文本输入与编辑功能

  • 虚拟键盘输入支持

  • 一键清除内容

  • 滚动查看长文本

  • 触摸优化的用户界面

6.2 扩展建议 

// 1. 中文输入支持(需外置字库)
void init_chinese_font() {lv_font_t * cn_font = lv_font_load("S:/fonts/simhei_20.bin");static lv_style_t style;lv_style_init(&style);lv_style_set_text_font(&style, LV_STATE_DEFAULT, cn_font);lv_obj_add_style(ta, LV_TEXTAREA_PART_MAIN, &style);
}// 2. 保存到Flash
void save_to_flash() {const char* text = lv_ta_get_text(ta);// 使用W25Q128 Flash芯片存储w25qxx_write_str(0x1000, text);
}// 3. 添加时间戳
void add_timestamp() {char time_str[20];sprintf(time_str, "\n[%02d:%02d]", rtc.getHours(), rtc.getMinutes());lv_ta_add_text(ta, time_str);
}// 4. 云同步功能
void sync_to_cloud() {if(WiFi.status() == WL_CONNECTED) {httpClient.post("/api/notes", lv_ta_get_text(ta));}
}

 

6.3 下一步

在下一个系列教程中,我们将实现相册浏览功能,支持图片预览和大图查看模式。

 

✔零知开源是一个真正属于国人自己的开源软硬件平台,在开发效率上超越了Arduino平台并且更加容易上手,大大降低了开发难度。
✔零知开源在软件方面提供了完整的学习教程和丰富示例代码,让不懂程序的工程师也能非常轻而易举的搭建电路来创作产品,测试产品。快来动手试试吧!

✔访问零知开源平台,获取更多实战项目和教程资源吧!
www.lingzhilab.com 

http://www.lqws.cn/news/502525.html

相关文章:

  • bmc TrueSight 监控mysql配置
  • prometheus+grafana+Linux监控
  • Linux 中的信号处理方式详解
  • 【机器学习深度学习】多层神经网络的构成
  • 在仓颉开发语言中使用数据库
  • TCP/UDP协议深度解析(一):UDP特性与TCP确认应答以及重传机制
  • 计算机网络第九章——数据链路层《介质访问控制》
  • C++(面向对象编程——多态)
  • 曼昆《经济学原理》第九版 宏观经济学 第二十六章货币增长与通货膨胀
  • python中学物理实验模拟:摩檫力
  • BI财务分析 – 反映盈利水平利润占比的指标如何分析(下)
  • iwebsec靶场sqli注入(2)
  • [Linux] Linux用户和组管理
  • GoAdmin代码生成器实践
  • 大模型项目实战:业务场景和解决方案
  • TongWeb替换tomcat
  • Linux Sonic Agent 端部署(详细版)(腾讯云)
  • MySQL:深入总结锁机制
  • 系统架构设计的全方位视角:深入解析4+1视图模型及其应用实践
  • prometheus+grafana+MySQL监控
  • 飞算 JavaAI 插件炸场!一小时搭图书管理系统
  • 从拥塞控制算法热交换到内核错误修复
  • Golang Kratos 系列:业务分层的若干思考(一)
  • 从用户到社区Committer:小米工程师隋亮亮的Apache Fory成长之路
  • WPF/Net Core 简单显示PDF
  • Windows WSL安装Emscripten‌/emsdk(失败)
  • Netty内存池核心PoolArena源码解析
  • OSS监控体系搭建:Prometheus+Grafana实时监控流量、错误码、存储量(开源方案替代云监控自定义视图)
  • RAG大模型开发初探 || 动手大模型应用开发
  • 医疗AI数智立体化体系V2.0泛化多模块编程操作手册--架构师版(下)