LCD触摸屏功能实现控制电机的设计

lcd屏显示实现触摸功能驱动320* 240 st7789的spi屏幕进行内容显示,显示文字和触控屏的基本使用;参考了:驱动模型中定义了可供上层应用调用的关键接口,如 读/写framebuffer 、开/关触控动作的操作画面 、获取屏幕设备信息 、 设置亮度/对比度/像素格式/方向等。
下图为触控屏的四个触控开/关四个电机的“按键”
图一(上电开机后显示)
图二(1号电机工作)
图三(2号电机工作)
图四(3号电机工作)
图五(4号电机工作)
图六(等待操作的状态)
显示触控屏的常用api接口 :
void display_get_capabilities(const struct device *dev, struct display_capabilities *capabilities)
参数说明
图七
显示屏设备树配置
&csk6002_9s_nano_pinctrl{ ... /* 显示屏spi接口配置 */ pinctrl_spi0_sclk_default: spi0_sclk_default { pinctrls = ; }; pinctrl_spi0_mosi_default: spi0_mosi_default { pinctrls = ; }; pinctrl_spi0_miso_default: spi0_miso_default { pinctrls = ; }; pinctrl_spi0_cs_default: spi0_cs_default { pinctrls = ; }; };触摸屏设备树配置
用到引脚:i2c0_scl(pb2)、i2c0_sda(pb3)。在 csk6011a_nano.overlay中完成外设接口的配置,具体实现如下:
在app/boards/目录下的csk6002_9s_nano.overlay文件并添加如下设备树配置:
图八
&csk6002_9s_nano_pinctrl{ // ... /* 触摸屏i2c接口配置 */ pinctrl_i2c0_scl_default: i2c0_scl_default{ pinctrls = ; }; pinctrl_i2c0_sda_default: i2c0_sda_default{ pinctrls = ; }; };&i2c0 { status = okay; pinctrl-0 = ; pinctrl-names = default; ft5336@0 { compatible = focaltech,ft5336; reg = ; label = ft5336; status = okay; int-gpios = ; };};日志串口设备树配置
本示例中将sdk默认的日志串口(gpioa_2、gpioa_3)中的gpioa_3复用为触控屏的int使能脚,因此将日志输出串口配置为gpiob_10 、gpiob_11,具体如下:
&csk6002_9s_nano_pinctrl{ /* 日志串口配置 */ pinctrl_uart0_rx_default: uart0_rx_default{ pinctrls = ; }; pinctrl_uart0_tx_default: uart0_tx_default{ pinctrls = ; }; ...};触摸屏组件配置
在prj.conf文件中打开触摸屏功能配置:
触摸配置
config_kscan=y
i2c功能配置
config_i2c=y
触摸屏屏驱动配置
config_kscan_bl6xxx=y
显示屏组件配置
在prj.conf文件中打开显示屏功能配置:
config_heap_mem_pool_size=16384config_log=ygpio功能配置
config_gpio=y
显示功能配置
config_display=y
spi功能配置
config_spi=y
st7789v显示屏驱动配置
config_st7789v=y
lcd屏显示实现
void main(void){ size_t x; size_t y; size_t rect_w; size_t rect_h; size_t h_step; size_t scale; size_t grey_count; uint8_t *buf; int32_t grey_scale_sleep; const struct device *display_dev; struct display_capabilities capabilities; struct display_buffer_descriptor buf_desc; size_t buf_size = 0; fill_buffer fill_buffer_fnc = null; log_inf(display sample for %s, display_dev_name); /* kscan初始化 */ kscan_init(); /* 获取display设备实例 */ display_dev = device_get_binding(display_dev_name); if (display_dev == null) { log_err(device %s not found. aborting sample., display_dev_name); return_from_main(1); } /* 获取显示功能 */ display_get_capabilities(display_dev, &capabilities); if (capabilities.screen_info & screen_info_mono_vtiled) { rect_w = 32; rect_h = 10; } else { rect_w = 2; rect_h = 1; } h_step = rect_h; scale = (capabilities.x_resolution / 8) / rect_h; rect_w *= scale; rect_h *= scale; if (capabilities.screen_info & screen_info_epd) { grey_scale_sleep = 10000; } else { grey_scale_sleep = 100; } buf_size = rect_w * rect_h; if (buf_size < (capabilities.x_resolution * h_step)) { buf_size = capabilities.x_resolution * h_step; } /* 色块配置 */ switch (capabilities.current_pixel_format) { case pixel_format_argb_8888: fill_buffer_fnc = fill_buffer_argb8888; buf_size *= 4; break; case pixel_format_rgb_888: fill_buffer_fnc = fill_buffer_rgb888; buf_size *= 3; break; case pixel_format_rgb_565: fill_buffer_fnc = fill_buffer_rgb565; buf_size *= 2; break; case pixel_format_bgr_565: fill_buffer_fnc = fill_buffer_bgr565; buf_size *= 2; break; case pixel_format_mono01: case pixel_format_mono10: fill_buffer_fnc = fill_buffer_mono; buf_size /= 8; break; default: log_err(unsupported pixel format. aborting sample.); return_from_main(1); } buf = k_malloc(buf_size); if (buf == null) { log_err(could not allocate memory. aborting sample.); return_from_main(1); } (void)memset(buf, 0xffu, buf_size); buf_desc.buf_size = buf_size; buf_desc.pitch = capabilities.x_resolution; buf_desc.width = capabilities.x_resolution; buf_desc.height = h_step; /*整屏填充白色背景*/ for (int idx = 0; idx name); return; } /* 注册回调,在k_callback中可看到对应的坐标与状态printk输出操作 */ kscan_config(kscan_dev, k_callback); /* 使能回调 */ kscan_enable_callback(kscan_dev);}void main(void){ kscan_init(); ...}编译的指令是:
lisa zep build
烧录的指令是:
lisa zep flash
结果触控屏显示了四个触控开关符,分别触摸对应显示在(led1符 led2符 led3符 led4符的下面触控开关)。四个功能(gpio) pwm 控制电机运行,后面补上(高发性的疫情过后,回公司上班补上,焊接上电机驱动板)。我们开发了一个pc上位机软件(视觉图分析用)。gc032a摄像头上传的图像以后可以在触控屏显(一个静态图)。
图十


阿童木磁栅尺读数头应用案例丨佛山某家具厂裁板机使用磁栅尺提高精度
微软研究团队公开了四个最新的虚拟现实研究成果
自动化立体仓库的设计要点概括
浅谈CAN FD总线协议帧格式
薄膜电容的发展空间和购买注意事项
LCD触摸屏功能实现控制电机的设计
ADC的奇怪FFT结果
高频PCB布线的设计与技巧
莱迪思半导体针对工业市场提供增强的视频桥接解决方案
行业首个基于地理位置感知控制智能家居系统曝光
索尼SBH56无线蓝牙耳机评测 做工精致细节到位
三电平全桥LLC电路工作原理
使用Nuke和OpenUSD将3D愿景变为现实
智能制药剖析:用于患者参与和保护的物联网连接NFC标签
研究团队克服OLED显示屏缺乏高效能蓝光的挑战
电路的作用有哪些
电阻器中什么时候需要降额
SIA报告称全球半导体市场去年销售额增长13.7%
联发科发布出新一代可透过USB Type-C介面进行手机充电的解决方案
蚌埠市正打造“中国智能传感谷”