st7735屏幕移植-高清图片显示
文章目录from PIL import Imageimport sysimport osif len(sys.argv) != 4:print("Usage: {} <image-file> <width> <height>".format(sys.argv[0]))sys.exit(1)fname = sys.argv[1]W = sys.argv[2]pri
最近在b站上看到有这个,是国外的一个大佬做的,主控用的是f103,然后屏幕用的是ST7735的驱动IC,该大佬还做了播放视频做的真不错,就想着来复现下,不过大佬是用的ARDUINO写的代码,属实是太强了,然后我把他移植到了我的驱动这边来尝试下,效果如下所示:
1、屏幕驱动原理
我们常见的st7735屏幕大概这样的,可能有一点区别,但是区别不大,最起码的引脚都是有的,可以当成同一种使用。
接口说明:
序号 | 引脚标号 | 说明 |
---|---|---|
1 | VCC | 5V/3.3V电源输入 |
2 | GND | 接地 |
3 | CS | 液晶屏片选信号,低电平使能 |
4 | RESET | 液晶屏复位信号,低电平复位 |
5 | A0 | 液晶屏寄存器/数据选择信号,低电平:寄存器,高电平:数据 |
6 | SDA | SPI总线写数据信号 |
7 | SCK | SPI总线时钟信号 |
8 | LED | 背光控制,高电平点亮,如无需控制则接3.3V常亮 |
屏幕数据手册太多了,建议需要的自己看: ST7735数据手册
2、配置驱动
首先我们配置SPI,这里可以尽量拉高,我这里应该是拉到最高了,SPI的最大通信速率取决于低速设备的通信速率。
这里我们可以来打开DMA,这样通过发送缓存数组就可以达到一个很快的刷新率:
之后配置一些相关的引脚,主要是复位引脚然后片选还有背光,这里背光是可以调节的,甚至如果不想设置背光,可以直接将他接到3.3v的输出引脚上!
下面就是我们要移植的驱动了,首先还是修改我们的宏定义,使宏定义符合要求
然后在cfg文件中有是否开启DMA的选项,这里我们通过改变宏参数就可以选择是否使用DMA
下面就可以编写屏幕测试函数了,这个测试也是一个github上大佬写的,使用了各种图形,还是很不错的!
最后我们就可以把程序下载到开发板来测试了:
这里我展示下使用字符串来测试,初始化代码如下所示:
将程序下载到开发板,就可以看到屏幕上已经显示出我们的数据了:
下面来试下图片,首先我们需要把图片提取每个像素点的RGB565的数值,这里提供了python的程序,可以参考使用这个程序来设计:
from PIL import Image
import sys
import os
if len(sys.argv) != 4:
print("Usage: {} <image-file> <width> <height>".format(sys.argv[0]))
sys.exit(1)
fname = sys.argv[1]
W = sys.argv[2]
print("\r\n")
print("<width> " + str(W))
H = sys.argv[3]
print("<height> " + str(H))
img = Image.open(fname)
if img.width != int(W) or img.height != int(H):
print("Error: 图片尺寸输入错误 )!!!");
sys.exit(2)
f = open("picFile.txt", "a")
f.write("// size " + str(W) + " x " + str(H) + " \n");
f.write("const unsigned short img[] = { \n ");
for y in range(0, img.height):
s = ""
for x in range(0, img.width):
(r, g, b) = img.getpixel((x, y))
color565 = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3)
color565 = ((color565 & 0xFF00) >> 8) | ((color565 & 0xFF) << 8)
s += "0x{:04X},".format(color565)
s += " \n"
f.write(s)
f.write("}; \r\n")
f.close()
print("\r\n转换完成\r\n")
该程序如果使用的是pycharm这类的ide是无法实用的,需要我们在命令行中进行调用,调用方法如下所示:
最后我们将转换好的数据填充到我们准备好的数组中:
将程序下载到开发板就可以看到现象了:
3、源码
本次文件过大,包括复现的大佬的代码,这里就不贴了,直接放到我的gitee上,需要的可以去查看:源码
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)