十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

STC15驱动ST7735彩屏:模拟SPI并口实战与避坑指南

STC15驱动ST7735彩屏:模拟SPI并口实战与避坑指南 简介本资源是面向嵌入式初学者与51单片机开发者的STC15系列驱动ST7735S彩色TFT液晶屏的完整并口驱动工程专为解决小尺寸彩屏在资源受限MCU上的高效显示控制问题而设计适用于智能仪表、IoT终端、教学实验等场景。压缩包共14个文件包含Keil uVision工程.uvproj/.uvopt、C源码.c、编译输出.hex/.obj/.lst、项目备份.bak/.plg及关键说明文档.docx其中《程序参考20190527》详细梳理了ST7735S初始化流程、并口时序控制要点、P1口硬件连接规范与字符取模实现方式配套.hex文件可直接烧录验证。目前已有856人学习下载资源结构清晰、注释充分覆盖从硬件接线、寄存器配置到屏幕刷新的全链路实现特别适合需要快速上手ST7735并口驱动、理解LCD底层通信时序与STC15端口操作的实践者。 前阵子帮朋友调了一块1.8寸TFT彩屏驱动芯片是ST7735主控用的是STC15单片机驱动方式正是标题里说的“并口驱动”。这个组合在51单片机圈子里出镜率相当高STC15负责控制逻辑ST7735负责点亮一块128x160的彩色小屏两者配合可以做温湿度显示、迷你仪表盘、桌面小时钟、甚至简单的菜单界面。我调完这一套下来最大的感受是——这东西谈不上难但坑是真不少尤其是“并口”这个词本身就容易让人误解再加上ST7735的数据是高位在前很多人一上来就在这上面翻车。这篇文章我就按实际调试的流程把这个方案从头到尾拆开讲一遍为什么选STC15配ST7735、所谓并口驱动到底是怎么一回事、硬件怎么接、初始化序列怎么配、颜色和扫描方向怎么调、模拟SPI的速度怎么估算最后把我踩过的坑和排查经验一起整理出来。如果你正准备用51驱动一块小彩屏或者手里已经有一块ST7735但白屏/花屏/颜色不对折腾了好几天这篇文章应该能帮你少走不少弯路。1. 先把方案说清楚STC15和ST7735这对组合为什么值得折腾1.1 STC15到底算老古董还是够用就香先说STC15。很多从STM32转过来的人可能看不上这颗芯片觉得8051内核太老、外设太少、RAM太小。但实际情况是STC15是国产增强型8051里的主力选手1T指令周期内部IRC时钟最高能跑到24MHz甚至更高内部EEPROM、比较器、ADC、PWM这些常用外设基本都有串口下载程序也特别方便——一根USB转TTL线就能烧录连仿真器都不用对新手来说门槛低到几乎没有。在“驱动一块小彩屏”这个场景里STC15完全够用。ST7735这块屏的数据量不大分辨率128x16016位色算下来一帧是40960字节如果只是显示静态界面或者刷新局部区域STC15的1T指令速度完全撑得住。我实测过用IO模拟SPI刷全屏大概在几百毫秒级别看菜单切换、显示数值变化这种场景体感是流畅的。所以别动不动就上STM32先想清楚你的需求是什么51能干的事硬塞一块Cortex-M进去反而增加不必要的复杂度。1.2 所谓的“并口驱动”其实是什么标题里的“并口驱动”是个有意思的词。如果你按字面理解以为是用8080并行总线去驱动ST7735那方向就偏了。ST7735本身支持SPI和并口两种接口但在51单片机生态里大家常说的“并口驱动”并不是指硬件上的8080并行总线而是指单片机没有把SPI外设引出来或者不想占用固定引脚直接拿普通GPIO去模拟SPI时序来控制屏幕。这种接法所有控制线都是独立并联在IO口上的民间俗称“并口驱动”本质还是SPI协议只是用软件时序实现。所以你在调这块屏的时候心里要始终记住一句话这不是在写并口时序而是在用IO口模拟SPI。SCLK、SDA、CS、DC、RESET这五条线每一条都要按照SPI的规矩来操作漏一个时序细节屏幕状态就会变得很玄学。1.3 屏幕选型对比ST7735和ST7789、ILI9341怎么选和ST7735定位类似的驱动芯片还有ST7789、ILI9341很多人在选型时容易纠结。我直接给一张对比表你看完心里就有数了。驱动芯片常见分辨率典型尺寸数据接口初始化复杂度成本ST7735128x1601.8寸 / 0.96寸SPI并口模拟或硬件较低低ST7789240x2401.3寸 / 1.54寸SPI / QSPI中中ILI9341240x3202.4寸 / 2.8寸8080并口 / SPI中高中ST7735的优势是分辨率低、数据量小、资料极其丰富淘宝上随便买一块1.8寸屏卖家都会附带驱动代码而且基本都是51的。ST7789虽然分辨率更高但初始化参数和ST7735不完全一样不能直接套用。ILI9341则经常是纯8080并口版本引脚占得多如果是51要驱动IO口本来就紧张更不建议一上来就碰。所以我的建议很直接第一次上手51驱动彩屏选ST7735就对了坑最少。2. 硬件连接与电平匹配这个环节决定了你能少踩一半的坑2.1 推荐接线表ST7735模块一般引出6个引脚VCC、GND、CS、RESET、DC也叫RS/A0、SDA也叫MOSI、SCLK。有的模块还带LED背光引脚LEDA或BLK这个看具体型号。我推荐用STC15的P1口或者P2口来驱动屏幕原因有两个一是P1/P2口默认是准双向IO模式上电就能直接输出高低电平而P0口默认是高阻输入必须手动配置P0M0/P0M1寄存器才能正常输出很多新手在P0口上吃过大亏二是P1/P2口分布集中布线方便后续扩展其他传感器也顺手。下面是我实际使用的推荐接线表STC15系列引脚功能都一样你可以根据自己板子调整。ST7735引脚STC15引脚说明VCC3.3V屏幕供电具体见下文电平问题GNDGND共地CSP1.0片选低电平有效DCP1.1命令/数据选择低电平为命令高电平为数据SDAP1.2SPI数据线SCLKP1.3SPI时钟线RESETP1.4复位低电平有效LEDA/BLK3.3V串10欧电阻背光供电可用三极管/PWM调光2.2 3.3V和5V电平问题这个问题必须单独拎出来说ST7735的逻辑电平是2.8V到3.3V而STC15有5V和3.3V两种供电版本。如果你的STC15用的是5V供电那IO口输出的高电平是5V直接怼到ST7735的引脚上长时间运行有损坏芯片的风险短期可能没症状但屏幕会出现偶发花屏、颜色异常、初始化偶尔失败等“软故障”非常难排查。解决方式有三种。第一种确认你买的模块是否自带电平转换芯片很多1.8寸模块上会有一颗电压转换芯片这样5V单片机的IO可以直接接这种情况最省事。第二种如果模块没有电平转换建议把STC15换成STC15W系列这类芯片支持2.4V到5.5V宽电压供电直接让单片机用3.3V跑IO输出自然也是3.3V电平。第三种如果你非要5V单片机硬接那在SDA、SCLK、DC、RESET这几根信号线上各串一个1k电阻做限流分压CS和背光引脚也可以这样处理。这个方法能应急但不推荐长期使用。背光这块最简单的方式是串一个10欧电阻直接接3.3V亮度固定。如果想做夜间调光可以用一个NPN三极管做开关或者直接用一个PWM引脚控制。STC15的PWM频率建议设置在1kHz以上太低会有可见的屏幕闪烁。2.3 上电和复位时序白屏的第一大嫌疑ST7735对复位时序是有硬性要求的先保证电源稳定一段时间再把RESET拉低至少10us然后拉高之后等120ms左右再开始发初始化命令。很多人抄初始化代码的时候没注意延时上电后立刻复位、立刻发命令结果屏幕白屏还以为是代码问题。我自己习惯写一个专门的复位函数宁可延时大一点也不在时序上抠那几十毫秒void LCD_Reset(void) { LCD_RESET_PIN 0; delay_ms(50); LCD_RESET_PIN 1; delay_ms(150); }这里的50ms和150ms都非常保守ST7735的数据手册要求远低于这个时间但保守不会出错反而是某些“优化到极致”的延时才是隐患。记住一点复位之后到发第一条初始化命令之前必须留够让芯片内部时钟稳定和从睡眠模式恢复的时间。3. 模拟SPI时序别把“高位在前”这几个字理解错3.1 ST7735的MSB规则和SPI模式ST7735的SPI接口要求数据在时钟上升沿被采样时钟空闲时为低这就是SPI模式0CPOL0CPHA0。同时ST7735的数据字节要求MSB first也就是高位在前。标题里“ST7735是高位”说的就是这回事你发送0xAA二进制10101010必须先送bit71接着bit60bit51一直到bit00。如果这个顺序反了接收端拿到的就是0x55所有命令和像素颜色全部错乱。很多人在写模拟SPI时习惯用移位和判断void SPI_WriteByte(unsigned char dat) { unsigned char i; for (i 0; i 8; i) { if (dat 0x80) LCD_SDA_PIN 1; else LCD_SDA_PIN 0; dat 1; LCD_SCLK_PIN 1; LCD_SCLK_PIN 0; } }这段代码的要点是先设置SDA数据再把SCLK拉高让ST7735在上升沿采样到稳定数据然后SCLK拉低准备下一位。顺序不能反如果先拉高SCLK再改SDA采样到的就是上一笔的残留电平数据必错。还有SCLK拉高后最好加一两个空指令延时保证电平稳定时间足够尤其是单片机和屏幕之间的信号线比较长、寄生电容比较大的时候。注意在使用这段代码前确认STC15的引脚工作模式。P1/P2默认准双向口可以直接用但如果你某天把屏幕接到了P0口就一定要先把P0配置成推挽或准双向模式否则输出是无效的。STC15的P0M0、P0M1寄存器具体怎么配看芯片手册的IO配置章节一句话P0M0和P0M1对应位都清0就是准双向口。3.2 速度评估刷一屏到底要多久既然是用模拟SPI很多人会担心速度问题。我们拿数字算一下心里就有底了。ST7735在128x160分辨率、16位色模式下一帧的数据量是128乘160乘2等于40960字节。每字节8个bit就是327680个bit。每发一个bitSDA要翻转一次、SCLK要拉高一次、拉低一次再加上循环判断和移位。在STC15跑24MHz主频的情况下用一个简单的循环实现平均每个bit大约耗时0.4us到0.7us取决于编译优化级别和是否打开延时。我们按0.5us算刷一帧的时间大约是163ms左右。也就是说全屏刷新大约需要0.16秒每秒大概可以刷6帧。这个速度做菜单界面、数值刷新、静态图表展示足够了做流畅动画就比较吃力。知道了这个底细你就明白了STC15驱动ST7735定位是“显示信息”而不是“播放动画”这个预期要摆正。3.3 CS和DC的控制节奏CS片选和DC数据/命令选择引脚控制起来也有讲究。基本规则是CS拉低表示选中屏幕DC低电平表示当前发送的是命令高电平表示当前发送的是数据。我刚开始写驱动时习惯用一个通用函数把命令和数据分开void LCD_WriteCmd(unsigned char cmd) { LCD_CS_PIN 0; LCD_DC_PIN 0; SPI_WriteByte(cmd); LCD_CS_PIN 1; } void LCD_WriteData(unsigned char dat) { LCD_CS_PIN 0; LCD_DC_PIN 1; SPI_WriteByte(dat); LCD_CS_PIN 1; }这样写单个命令没问题但一旦要批量发送像素数据比如画一个矩形填充区域如果每发一个字节就CS拉高再拉低片选翻转会白白消耗大量时间刷新速度会慢得让人抓狂。正确的做法是设置好窗口后保持CS为低、DC为高连续把一整个区域的数据发完最后再拉高CS。这个优化能让全屏填充速度翻倍我后面专门讲。4. 初始化序列和底层绘图函数这些代码可以直接抄4.1 初始化序列逐条说明ST7735的初始化命令在不同模块上有细微差异但核心流程是一致的软件复位、退出睡眠、设置帧率、设置电源、设置Gamma曲线、设置像素格式、设置扫描方向和RGB/BGR顺序、开显示。我把自己验证过的一版完整初始化代码贴出来并逐条注释。void LCD_Init(void) { LCD_Reset(); LCD_WriteCmd(0x01); // SWRESET 软件复位 delay_ms(150); LCD_WriteCmd(0x11); // SLPOUT 退出睡眠模式 delay_ms(200); LCD_WriteCmd(0xB1); // FRMCTRL1 帧率控制 LCD_WriteData(0x01); LCD_WriteData(0x2C); LCD_WriteData(0x2D); LCD_WriteCmd(0xB2); // FRMCTRL2 LCD_WriteData(0x01); LCD_WriteData(0x2C); LCD_WriteData(0x2D); LCD_WriteCmd(0xB3); // FRMCTRL3 LCD_WriteData(0x01); LCD_WriteData(0x2C); LCD_WriteData(0x2D); LCD_WriteData(0x01); LCD_WriteData(0x2C); LCD_WriteData(0x2D); LCD_WriteCmd(0xC0); // PWCTR1 电源控制1 LCD_WriteData(0xA2); LCD_WriteData(0x02); LCD_WriteData(0x84); LCD_WriteCmd(0xC1); // PWCTR2 电源控制2 LCD_WriteData(0xC5); LCD_WriteCmd(0xC2); // PWCTR3 电源控制3 LCD_WriteData(0x0A); LCD_WriteData(0x00); LCD_WriteCmd(0xC3); // PWCTR4 电源控制4 LCD_WriteData(0x8A); LCD_WriteData(0x2A); LCD_WriteCmd(0xC4); // PWCTR5 电源控制5 LCD_WriteData(0x8A); LCD_WriteData(0xEE); LCD_WriteCmd(0xC5); // VCOM 电压设置 LCD_WriteData(0x0E); LCD_WriteCmd(0x21); // INVON 反色显示开启 LCD_WriteCmd(0x36); // MADCTL 扫描方向和RGB/BGR顺序 LCD_WriteData(0x08); // 0x08 表示RGB顺序具体见下文 LCD_WriteCmd(0x3A); // COLMOD 像素格式 LCD_WriteData(0x05); // 0x05 表示16位色 LCD_WriteCmd(0xE0); // GMCTRP1 正Gamma曲线 LCD_WriteData(0x02); LCD_WriteData(0x1C); LCD_WriteData(0x07); LCD_WriteData(0x12); LCD_WriteData(0x37); LCD_WriteData(0x32); LCD_WriteData(0x29); LCD_WriteData(0x2D); LCD_WriteData(0x29); LCD_WriteData(0x25); LCD_WriteData(0x2B); LCD_WriteData(0x39); LCD_WriteData(0x00); LCD_WriteData(0x01); LCD_WriteData(0x03); LCD_WriteData(0x10); LCD_WriteCmd(0xE1); // GMCTRN1 负Gamma曲线 LCD_WriteData(0x03); LCD_WriteData(0x1D); LCD_WriteData(0x07); LCD_WriteData(0x06); LCD_WriteData(0x2E); LCD_WriteData(0x2C); LCD_WriteData(0x29); LCD_WriteData(0x2D); LCD_WriteData(0x2E); LCD_WriteData(0x2E); LCD_WriteData(0x37); LCD_WriteData(0x3F); LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteData(0x02); LCD_WriteData(0x10); LCD_WriteCmd(0x2A); // CASET 设置列地址 LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteData(0x7F); // X 0~127 LCD_WriteCmd(0x2B); // PASET 设置行地址 LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteData(0x9F); // Y 0~159 LCD_WriteCmd(0x29); // DISPON 开启显示 delay_ms(50); }这段初始化代码里最容易出错的地方是0x21这个反色命令。有些屏幕模块的偏光片方向不同反色命令要不要加、怎么加得看实际效果。如果你发现屏幕显示的颜色和预想完全相反红色变青色、黑色变白色就把0x21改成0x20试一下。4.2 颜色、扫描方向和窗口设置初始化代码里的MADCTL寄存器0x36控制三个重要属性扫描方向、RGB/BGR颜色顺序、行列交换。它的bit含义我来解释一下bit含义置1效果MY (bit7)纵向镜像从上到下变为从下到上扫描MX (bit6)横向镜像从左到右变为从右到左扫描MV (bit5)行列交换横屏/竖屏切换BGR (bit3)颜色顺序置1为BGR清0为RGB我上面写的0x08就是MX、MY、MV全为0BGR位为1对应RGB颜色正常显示。如果你发现颜色红蓝互换把MADCTL里的bit3翻转一下就行不要怀疑是取模工具的问题。如果你发现画面整体镜像调整MY、MX这两位。窗口设置是用来控制“画到哪个区域”的。ST7735的窗口由CASET指定列范围PASET指定行范围之后用RAMWR命令连续写入像素数据。下面这个函数把整个过程封装好了void LCD_SetWindow(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1) { LCD_WriteCmd(0x2A); LCD_WriteData(0x00); LCD_WriteData(x0); LCD_WriteData(0x00); LCD_WriteData(x1); LCD_WriteCmd(0x2B); LCD_WriteData(0x00); LCD_WriteData(y0); LCD_WriteData(0x00); LCD_WriteData(y1); LCD_WriteCmd(0x2C); }画一个点就是在1x1的窗口里写一个像素值颜色数据先发高字节再发低字节void LCD_DrawPoint(unsigned char x, unsigned char y, unsigned int color) { if (x 128 || y 160) return; LCD_SetWindow(x, y, x, y); LCD_WriteData(color 8); LCD_WriteData(color 0xFF); }画直线、画矩形边框的思路都是在这基础上实现的比如画直线就是按方向逐点调用LCD_DrawPoint。这样写简单直接但速度慢只适合画少量线条。如果要填充大面积区域必须用批量填充。4.3 批量填充和文字显示批量填充的核心思路设置好窗口后不要让CS和DC反复翻转保持CS为低、DC为高一次把所有像素数据连续发完。下面是完整的填充函数void LCD_Fill(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1, unsigned int color) { unsigned int i; unsigned int total (x1 - x0 1) * (y1 - y0 1); LCD_SetWindow(x0, y0, x1, y1); LCD_CS_PIN 0; LCD_DC_PIN 1; for (i 0; i total; i) { SPI_WriteByte(color 8); SPI_WriteByte(color 0xFF); } LCD_CS_PIN 1; }这个函数里total的计算要小心x1-x01是宽y1-y01是高两者相乘就是总像素数。如果调用时x1小于x0或者y1小于y0total就会出错函数会陷入大量无效发送所以在调用前做好参数校验。文字显示是图形库的基础。ST7735在128x160分辨率下如果使用8x16的ASCII字模一行能显示16个字符共10行如果使用16x16的中文字模一行能显示8个汉字共10行。这个尺寸做小菜单、状态显示是完全够用的。字模取模时注意设置成阴码1表示点亮、行扫描方向从左到右这样字模数组的每一位对应一个像素点。显示逻辑就是逐行遍历字模数据为1的位填充前景色为0的位填充背景色。5. 性能优化把STC15的SPI性能榨干5.1 减少CS/DC翻转的批量传输我在第3章提到过批量填充时不要每个字节都拉高CS。这个优化在实测中效果非常明显。做一个简单的对比全屏填充40960字节如果每字节都走LCD_WriteData其中包含CS拉低、拉高和DC设置这些操作大约要额外消耗30%的时间。而如果像LCD_Fill那样先统一设好DC和CS再连续发数据整屏填充时间能直接缩短到原来的70%左右。STM32上通常会配合DMA来做这种连续发送但51没有DMA所以我们要做的就是把CPU花在“无效操作”上的时间全部减掉。除了CS/DCSPI_WriteByte本身也存在优化空间比如把8次循环手动展开成8段顺序代码或者开启编译器的最高优化级别实测能再节省一部分时间。5.2 局部刷新代替全屏刷新STC15的大敌是RAM太小。ST7735的一帧显存是40960字节而STC15系列内部SRAM通常只有几百字节到4KB根本放不下一整帧所以任何“先画到缓冲区再整体刷新”的思路在这里都是行不通的。正确的思路是局部刷新。界面设计中固定不变的部分比如边框、标题、背景图标只在开机时绘制一次之后只更新变化的小区域。举个实际例子做一个温湿度显示界面温湿度数值可能每秒变化一次但变化的只有那两个数字所在的矩形区域。这时候只要调用两次LCD_Fill清掉旧数字再在相同位置绘制新数字就行不需要整屏重画。这样刷新时间从160ms级降到了几毫秒肉眼看起来就是瞬时的体验差距非常大。5.3 能不能用STC15硬件SPI部分STC15系列芯片确实集成了硬件SPI模块比如STC15W4K系列SS、MOSI、MISO、SCLK都有固定引脚。如果你的芯片支持把SPI配置成模式0CPOL0CPHA0数据发送从“逐bit翻转引脚”变成“写一个字节到SPDAT寄存器”CPU开销大幅下降速度也能更快。但用硬件SPI有个代价引脚是固定的不能随意调整你必须把屏幕接在SPI模块要求的引脚上。另外STC15的硬件SPI配置需要查阅你所用型号的数据手册和寄存器的定义不同系列寄存器名称有差异不能照搬网上其他型号的代码。我的建议是如果你用的是STC15W4K系列可以试硬件SPI如果只是普通STC15那就老老实实用模拟SPI性能也够用。6. 常见问题排查与避坑指南6.1 白屏、花屏、颜色错乱排查速查表调这块屏的过程中我遇到的问题基本可以归为以下几类整理成表格方便你对照排查。现象可能原因排查方法白屏屏幕亮但无内容复位时序不对、初始化未完成、电源电压不足先测VCC是否3.3V再检查RESET时序最后确认初始化代码有没有完整执行白屏背光不亮背光引脚未接或供电不足检查LEDA引脚是否接3.3V排除背光故障花屏、杂色乱闪数据字节序错误、SCLK时序错误、SDA和SCLK接反用逻辑分析仪看SDA波形确认是否高位先出时钟是否空闲为低颜色红蓝互换MADCTL的BGR位设置不对把初始化中0x36的值在0x08和0x00之间切换测试画面镜像、上下颠倒MADCTL的MY/MX位设置不对切换MX、MY两位试效果只有部分区域显示窗口设置CASET/PASET错误检查LCD_SetWindow传入的坐标范围闪烁严重背光PWM频率太低、批量刷新时CS频繁翻转提升PWM频率改用批量填充方式刷新速度慢模拟SPI效率低、CS来回翻转优化LCD_Fill减少无效CS操作6.2 几个必须记住的实战教训调完这套STC15加ST7735我踩过的坑有不少挑几个最典型的分享给你这些经验在很多51驱动TFT的项目里都通用。第一个教训是买屏幕时一定要确认驱动芯片的具体型号。市面上很多1.8寸屏标称ST7735实际是ST7735S初始化序列和ST7735R略有区别。如果你按A型号的初始化代码驱动B型号的屏幕可能出现颜色偏色、局部异常等诡异问题。我的建议是把网上能找到的ST7735和ST7735S两套初始化序列都试一遍哪个显示正常就用哪个。第二个教训是不要在一开始就贪快。很多人拿到代码后第一件事就是把延时全删了觉得“反正芯片速度快”结果屏幕要么白屏要么时好时坏。我调试时把初始化里的关键延时尤其是SLPOUT之后的200ms保留等屏幕正常工作后再逐个尝试缩短延时这样定位问题会轻松很多。第三个教训是电源纹波会被忽视。ST7735对供电质量有一定要求如果屏幕和电机、继电器共用电源电机启动瞬间电压跌落屏幕就会花屏或闪一下。解决方法是屏幕供电脚附近加一个10uF电解电容和一个100nF陶瓷电容。这个电容的取值不是随便定的10uF负责低频储能100nF负责滤高频噪声两个配合才能保证电压稳定。第四个教训和“ST7735高位在前”这个知识点有关。我之前帮一个新手排查他的屏幕所有横向线条都变成了“虚线”仔细检查SPI_WriteByte函数才发现他把数据移位方向写反了每次从最低位开始发结果每个字节都在屏上显示成左右颠倒的错乱图案。修好移位方向后一切正常。所以“高位在前”四个字看起来不起眼但它真的能让整个屏幕显示错乱。最后再说一个小技巧调试阶段可以在初始化完成后先做一次全屏填充纯红色再填充纯绿色再填充纯蓝色。如果这三种颜色显示都正常说明SPI通信、MADCTL设置、像素格式都正确了之后写绘图函数就放心了。如果某个颜色异常你也能明确知道问题出在颜色顺序还是数据发送上。这套方案做下来我的整体感受是STC15加ST7735并口驱动非常适合作为51学习者接触彩色屏幕的第一课它能帮你把SPI时序、寄存器配置、IO操作、字模显示这些基本功全部串起来。等你完整跑通一遍再去接触STM32硬件SPI或者ST7789、ILI9341这些大屏思路会顺畅很多。本文还有配套的精品资源点击获取
返回列表