完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本篇博文教大家ESP32 驱动TFT(SPI驱动),本文给大家的库直接适用于2寸(240*320)的SPI-TFT,但实际上这种驱动移植适用于所有的SPI驱动的TFT屏幕,底层代码把LCD初始化里面的寄存器参数改一改就适用了(这些寄存器参数在你买的屏幕的官方驱动里面有)
首先我们要知道我们要把移植的代码写在什么地方 这就是我们的代码要移植到的地方 看看驱动效果 直接给大家上代码,由于我们使用的是SPI,不受IO限制,我在底层写了一个IO绑定函数(lcd_io_set),我们直接用这个函数把我们要连接的脚传入即可(具体再代码中可以看到) #include "2_TFT_SPI.h" extern char FONT16[][32]; extern char FONT24[][72]; extern char FONT32[][128]; extern unsigned char gImage_uzi[96000]; void setup() { Serial.begin(115200); lcd_io_set(2,4,5,19,22,23); //LCD IO 的设置 ,传入参数顺序分别是:SCL SDA DC CS RES BLK (BLK可以填写零,那么我们直接把BLK接在3.3v高电平上就可以不用IO控制背光) LCD_Init(); } void loop() { LCD_Clear(WHITE); /* 这两个参数叫做默认画笔参数,是在模块驱动内定义好的,一个是画笔颜色一个是背景颜色,设置之后凡是不传入颜色的画图,显示字符等都是用这一对参数,我们可以改变它 */ POINT_COLOR = GREEN; BACK_COLOR = 0xffff; LCD_Fill(20, 20, 220, 80, RED); //指定矩形区域填充什么颜色,参入参数分别是矩形区域左上角XY坐标以及右下角XY坐标,然后是填充的颜色 LCD_DrawLine(20, 20, 220, 80); //画线函数,颜色使用上面的默认的那种 LCD_DrawRectangle(20, 100, 120, 140); //画矩形函数,传入参数直接是左上角和右下角的XY坐标,颜色就是使用默认的上面那对画笔参数 gui_circle(30, 180, YELLOW, 30, 1); //画圆函数,传入参数分别为:圆心XY坐标,颜色,半径,以及是否填充(1为填充,0为不填充) gui_circle(120, 180, BLUE, 30, 0); Draw_Triangel(30, 220, 0, 260, 60, 260); //在指定位置画三角形,传入参数就是三角形的三个点(上-左-右) Fill_Triangel(90, 220, 60, 260, 120, 260); //在指定位置填充三角形,用法与上面画三角形一样,但是会填充为画笔颜色的颜色 delay(2000); LCD_Clear(BLACK); POINT_COLOR = RED; BACK_COLOR = BLACK; LCD_ShowChar(20, 0, RED, BLACK, 'C', 16, 1); //显示英文字符串,传入参数分别是:显示字符串起始位置XY坐标,字体大小(可以选12或者16,分别代表1206和1608两种字体),最后是是否进行覆盖(0是不覆盖,1是覆盖),颜色用的是默认的画笔参数 LCD_ShowString(20,20, 12, "hello", 1); LCD_ShowString(20,40, 16, "world", 1); LCD_ShowNum(20, 60, 615, 6, 16); //显示数字(整数),传入参数为:显示的起始XY坐标,要显示的数字(这里我写的615),数字长度(这里写6就是可以显示6位以内,可以自己改),然后是字体大小,同样是填12或者16 //显示小数的方法: char buffer_temp[20] = ""; sprintf(buffer_temp, "show float num:%0.3f", 13.14); //把小数强制转化到一个数组里面进行显示,这种方法同样适用于其他类型的数字,也可以用0.3f%这种保存一定精度 LCD_ShowString(20,80, 16, buffer_temp, 1); memset(buffer_temp, 0, sizeof(buffer_temp)); //清空字符串 DrawFont16(20, 100, GREEN, RED, FONT16[0], 1); //写一个16x16中文字符,FONT16[0]就代表第零个中文字符 DrawFont16(20+16, 100, GREEN, RED, FONT16[1], 0); //写一个16x16中文字符,FONT16[0]就代表第零个中文字符 DrawFont24(20, 125, GREEN, RED, FONT24[0], 1); //写一个16x16中文字符,FONT16[0]就代表第零个中文字符 DrawFont24(20+24, 125, GREEN, RED, FONT24[1], 0); //写一个16x16中文字符,FONT16[0]就代表第零个中文字符 DrawFont32(20, 165, GREEN, RED, FONT32[0], 1); //写一个16x16中文字符,FONT16[0]就代表第零个中文字符 DrawFont32(20+32, 165, GREEN, RED, FONT32[1], 0); //写一个16x16中文字符,FONT16[0]就代表第零个中文字符 delay(2000); showimage(gImage_uzi, 200, 240, 0, 0); delay(2000); } /* ******************************************************************************************************************************************************** */ /* ********************************************* 我们取的字模,取字模配置及其大小不能变但是字体形式可以自己选 ************************************************ */ /* ******************************************************************************************************************************************************** */ char FONT16[][32] = /* 16x16 大小字体的字模,取模方法在博文中已经给出,取出后放在这里,记住按顺序填好后面“深,0”这样的标号方便自己知道是哪个 */ { 0x00,0x00,0x27,0xFC,0x14,0x04,0x14,0xA4,0x81,0x10,0x42,0x08,0x40,0x40,0x10,0x40, 0x17,0xFC,0x20,0x40,0xE0,0xE0,0x21,0x50,0x22,0x48,0x2C,0x46,0x20,0x40,0x00,0x40,/*深,0*/ 0x11,0x04,0x11,0x24,0x11,0x24,0x11,0x24,0x11,0x24,0xFD,0x24,0x11,0x24,0x11,0x24, 0x11,0x24,0x11,0x24,0x11,0x24,0x1D,0x24,0xE1,0x24,0x42,0x24,0x02,0x04,0x04,0x04,/*圳,1*/ }; char FONT24[][72] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00, 0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x3F,0xFF,0xFE,0x30,0x18,0x06,0x30,0x18, 0x06,0x30,0x18,0x06,0x30,0x18,0x06,0x30,0x18,0x06,0x3F,0xFF,0xFE,0x30,0x18,0x06, 0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*中,0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00, 0x06,0x00,0xFF,0xFF,0xFF,0x06,0x00,0x30,0x06,0x00,0x30,0x03,0x00,0x60,0x03,0x00, 0x60,0x01,0x80,0xC0,0x00,0xC1,0x80,0x00,0xE3,0x00,0x00,0x36,0x00,0x00,0x1C,0x00, 0x00,0x77,0x00,0x03,0xC1,0xE0,0x1E,0x00,0x3C,0x60,0x00,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*文,1*/ }; char FONT32[][128] = { 0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0xC0,0x00, 0x00,0x01,0xC0,0xC0,0x00,0x01,0x07,0xC0,0x00,0x01,0xFF,0x00,0x02,0x1F,0xFE,0x00, 0x07,0xF0,0x1C,0x00,0x07,0xC0,0x70,0x00,0x0F,0x00,0xE0,0x00,0x0E,0x03,0xF0,0x00, 0x1C,0x0F,0xF0,0x00,0x3C,0x0F,0x70,0x00,0x3C,0x00,0xE0,0x00,0x18,0x00,0xC0,0x00, 0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x20,0x00, 0x00,0x00,0x37,0x00,0x00,0x01,0xFF,0x00,0x00,0x7F,0xF8,0x00,0x07,0xF8,0x30,0x00, 0x1F,0x80,0x30,0x00,0x00,0x80,0x30,0x00,0x00,0xC0,0x30,0x00,0x00,0x60,0x60,0x00, 0x00,0x18,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,/*字,0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xE0, 0x00,0x20,0x01,0xB8,0x00,0x70,0x3F,0xF8,0x00,0x61,0xFF,0xC0,0x00,0xC3,0x03,0x00, 0x01,0xC6,0x06,0x00,0x03,0x8C,0x06,0x00,0x03,0x08,0x0C,0x00,0x06,0x08,0x0C,0x00, 0x0E,0x18,0x18,0x3F,0x1E,0x10,0x1B,0xF3,0x1F,0x90,0x3F,0x07,0x00,0x80,0x3C,0x1C, 0x01,0x90,0x70,0x7C,0x01,0x90,0x60,0xFE,0x01,0xA0,0xC3,0xF8,0x01,0xA0,0x0F,0xD8, 0x03,0xA0,0x08,0x18,0x03,0x60,0x00,0x18,0x03,0x40,0x00,0x18,0x03,0xC0,0x00,0x18, 0x03,0x80,0x00,0x18,0x03,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x10, 0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*体,1*/ }; unsigned char gImage_uzi[96000] = { } //这里就太长了,所以不贴出整个图像数组 底层驱动下载:下载之后把代码放到我文章开头说的位置,就可以直接使用我的库了(实际上只有一个.C .H 以及一个一个字库文件,我把他们集合到一起了,虽然看起来有千把行代码,但是加上不难哈,有兴趣的话看一看,很容易看懂,而库的具体用法直接看上面的代码,写的很明白了哈) 百度云盘:https://pan.baidu.com/s/1EwQ***XXMDJkx_8p8PHCPcA 提款码:phh1 关于取字模,图模 去我的STM32系列教程里面有一篇驱动4寸SPI的文章,里面的取字模方法和取图模方法和这个是一样的 最后 我的ESP32的基础教程我觉得也更近半了把,下一步我会更使用ESP32驱动 SPI 和 IIC的一些模块,至少会更软件SPI驱动2.0寸TFT的博文和4.0寸带触摸的TFT的博文,然后还会更一篇用ESP32驱动NFR24L01无线模块的博文,这是非常有用的,我们可以直接让ESP32带着这种无线模块(ZIGBEE – LORA等等),直接成为我们局域组网的中心,把数据汇总并且上传到网络上(后面会讲ESP32对接阿里云物联网平台),所以ESP32的教程可能会拉到40篇甚至往上,后面还会更SD卡和ESP32-CAM的使用,道阻且长,同时也相当于我用这个东西这么长时间以来的一种总结,笔记 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1307 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1319 浏览 1 评论
729 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
537 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1341 浏览 2 评论
1734浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
449浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
397浏览 3评论
387浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
366浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-22 07:13 , Processed in 0.624117 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号