文章目录
前言
一个系统最缺不了人机交互的界面,就像电脑显示器一样,如果没有显示器,电脑自然就失去了很多的有意思的地方,嵌入式系统更是如此,不管做多少最终还是要拿出来展示,要让人轻而易举的理解,要让自己展示的东西通俗易懂。本文章部分参考官网数据手册,只供学习,如有侵权,请联系我,马上删帖道歉!
一、LCD
1B 芯片内 LCD 控制器(Display Controller)的详细描述和配置。Display Controller 作为一个整体的模块,该模块读取指针数据和图像数据,通过对这些数据进行格 式转换、颜色抖动、gamma 调整等步骤产生最终的数据输出,同时为两个显示处理单元产生 同步信号和数据使能信号,最后将最终处理后的图像数据和同步信号发往显示接口。
特性:
⚫ 支持格式转换
⚫ 最大显示支持到 1920×1080@60Hz
⚫ 同步信号可编程
⚫ Gamma 调整查找表
⚫ VBLANK 同步
数据格式:
Display Controller 支持以下数据格式:
R4G4B4 -> 12 bits per pixel
R5G5B5 -> 15 bits per pixel
R5G6B5 -> 16 bits per pixel
R8G8B8 -> 24 bits per pixel (由此可见,内部并没有很大的字库,字体的大小最大24,如需更大需要文字取模)
寄存器:
更多LCD详解在:
链接:https://pan.baidu.com/s/15sifp9y_oxGASH_gAUsP2Q
提取码:1234
二、触摸屏芯片XPT2046
1.XPT2046
源代码:ls1x‐drv/spi/xpt2046/xpt1046.c
头文件:ls1x‐drv/include/spi/xpt2046.h
XPT2046 是否使用,在 bsp.h 中配置宏定义:
#define XPT2046_DRV
XPT2046 连接在 SPI0 的片选 1,在 xpt1046.c 中定义:
#define XPT2046_CS
XPT2046 的通信参数,在 XPT2046_read 函数中定义:
通信参数:
LS1x_SPI_mode_t tfr_mode = { baudrate: 2000000, bits_per_char: 8, lsb_first: false, clock_pha: true, clock_pol: true, clock_inv: true, clock_phs: false, }; /* 通信速率 20M */ /* 通信字节的位数 */ /* 低位先发送 */ /* spi 时钟相位 */ /* spi 时钟极性 */ /* true: 片选低有效 */ /* true: spi 接口模式, 时钟与数据发送同步 */
2.函数
驱动程序 xpt1046.c 实现的函数:
int XPT2046_initialize(void *dev, void *arg); 初始化
int W25X40_read(void *dev, void *buf, int size, void *arg); 读数据
#if (PACK_DRV_OPS) extern driver_ops_t *ls1x_xpt2046_drv_ops; #define ls1x_xpt2046_init(spi, arg) \ ls1x_xpt2046_drv_ops‐>init_entry(spi, arg) #define ls1x_xpt2046_read(spi, buf, size, arg) \ ls1x_xpt2046_drv_ops‐>read_entry(spi, buf, size, arg) #else #define ls1x_xpt2046_init(spi, arg) XPT2046_initialize(spi, arg) #define ls1x_xpt2046_read(spi, buf, size, arg XPT2046_read(spi, buf, size, arg) #endif 注:XPT2046 芯片设计在 LCD 转接板上,通过 40Pins FPC 接口和主板连接; XPT2046 的 PENIRQ 信号使用 GPIO54(UART2_RX)连接芯片: #define XPT2046_USE_GPIO_INT 0 /* 触摸屏 GPIO 中断支持 */ #define XPT2046_USE_GPIO_NUM 54 /* 触摸屏 GPIO 端口 */
3.实用程序
源代码:ls1x‐drv/spi/xpt2046/touch_utils.c
头文件:ls1x‐drv/include/spi/xpt2046.h
触摸信号使用消息发送的宏定义:
#define TOUCHSCREEN_USE_MESSAGE 0
触摸屏回调函数原型:
typedef void (*touch_callback_t)(int x, int y);
实用函数:
int do_touchscreen_calibrate(void); 执行触摸屏校正
int start_touchscreen_task(touch_callback_t cb); 启动触摸屏任务/线程
int stop_touchscreen_task(void); 终止触摸屏任务/线程
三、示例程序
取模说明:
取模软件链接:
链接:https://pan.baidu.com/s/1jwCGSg-9n37bp-WMoyV0Yg
提取码:1234官方出品是没有显示图片的函数,故而需要自己添加:
disp_p:
void disp_p(unsigned int xpos,unsigned int ypos,unsigned int x1,unsigned int y1,unsigned char *ptrs) { { int x, y; unsigned char *ptr = ptrs; for (y=0; y<y1; y++) { for (x=0; x<x1; x++) { unsigned int color; color = (*ptr << 8) | *(ptr+1); LS1x_draw_rgb565_pixel(x+xpos, y+ypos, color); ptr += 2; } } flush_dcache(); } }
文字和背景色函数内部都有,直接调用即可!
总结
源码链接:
文本显示:龙芯1B:LCD显示文本例程-单片机文档类资源-CSDN文库
文字、图片:龙芯1B:LCD文字、图片显示例程-单片机文档类资源-CSDN文库 (总例程)
各效果: 龙芯1B:LCD显示矩形框、水平线、对角线、画点、显示背景色、前景色、清屏例程-单片机文档类资源-CSDN文库
联系我们
vx ——> buildupup 公众号 嵌入式up 如果文章对您有帮助,请打赏一元呗,感谢支持,分享不易,码字不易。希望对大家帮助!