前言
合宙tft1.8寸屏幕,esp32,thonny,windows10
分为两部分,驱动所有代码,复制即用;代码解说
引脚接口情况:SCL P18,SDA P23,RES P15,DC P2,CS P5
所有代码
from time import sleep_ms
from ustruct import pack
from machine import SPI,Pin
from micropython import const
import framebuf
class ST7735(framebuf.FrameBuffer):
def __init__(self,spi):
self.spi = spi
self.dc=Pin(2,Pin.OUT,value=0)
self.rst=Pin(15,Pin.OUT,value=1)
self.cs=Pin(5,Pin.OUT,value=1)
self.height = 160
self.width = 128
self.buffer = bytearray(160*128*2)
super(ST7735,self).__init__(self.buffer, self.width, self.height, framebuf.RGB565)
self.reset()
self._write(0x11)
sleep_ms(100)
buf=bytearray(128)
for i in range(32):
buf[i]=i*2
buf[i+96]=i*2
for i in range(64):
buf[i+32]=i
for command, data in (
(0x3A, b"\x05"), # 选择16位颜色模式
(0x36, pack(">B",0xC0)), # 显示相对位置
(0x20, None), #关闭反转
(0x29, None),#开启显示
(0x2d, buf),# RGB
):
self._write(command, data)
self.clear()
def clear(self):
self.fill(0)
self.show()
def reset(self):
self._write(0x01)
def _write(self, command, data=None):
self.cs.off() # 开启片选信号
self.dc.off() # 低电平写命令
self.spi.write(bytearray([command]))
if data is not None:
self.cs.on() # 释放片选信号
self.cs.off() # 开启片选信号
self.dc.on() # 高电平写参数
self.spi.write(data)
self.cs.on() # 释放片选信号
def show(self):
self._write(0x2a,pack(">HH", 0, 127))
self._write(0x2b,pack(">HH", 0, 159))
self._write(0x2c,self.buffer)
def pictrue(self,x,y,width,height,data):
for i in range(height):
for j in range(width):
self.pixel(x+j,y+i,data[j+i*width])
def sleep(self):
self._write(0x28)
self._write(0x10)
lcd= ST7735(SPI(2, baudrate=60000000))
#lcd.rect(50,50,50,60,500)矩形
#lcd.vline(0,0,50,500)竖线
#lcd.hline(0,50,50,500)横线
#lcd.text("hello",50,50,500)显示英语
#lcd.ellipse(50,50,50,50,500,1)#椭圆
#lcd.line(0,0,40,50,500)直线
#lcd.pixel(50,50,500)画点
lcd.text("hello world",0,0)
#lcd.text("I love you",0,10)
#lcd.text("thank you",0,20)
#lcd.text("I am fine",0,30)
#lcd.text("good morning",0,40)
#lcd.text("good afternoon",0,50)
#lcd.text("good evening",0,60)
#lcd.text("Todat is sunny day",0,70)
#lcd.text("wow,is good",0,80)
#lcd.text("that is good",0,90)
#lcd.text("good luck",0,100)
#lcd.text("you are my dog",0,110)
#lcd.text("it is fortunate",0,120)
#lcd.text("where si my pen",0,130)
#lcd.text("hello world",0,140)
#lcd.text("i am good at studing",0,150)
lcd.show() # 显示出来
代码分解
导包
from time import sleep_ms
from ustruct import pack
from machine import SPI,Pin
from micropython import const
import framebuf
st7735s类
类初始化
定义dc rst cs引脚;lcd宽高;缓冲区大小:128*160*2字节
复位,唤醒,进行相应命令配置,具体命令见手册
def __init__(self,spi):
self.spi = spi
self.dc=Pin(2,Pin.OUT,value=0)
self.rst=Pin(15,Pin.OUT,value=1)
self.cs=Pin(5,Pin.OUT,value=1)
self.height = 160
self.width = 128
self.buffer = bytearray(160*128*2)
super(ST7735,self).__init__(self.buffer, self.width, self.height, framebuf.RGB565)
self.reset()
self._write(0x11)
sleep_ms(100)
buf=bytearray(128)
for i in range(32):
buf[i]=i*2
buf[i+96]=i*2
for i in range(64):
buf[i+32]=i
for command, data in (
(0x3A, b"\x05"), # 选择16位颜色模式
(0x36, pack(">B",0xC0)), # 显示相对位置
(0x20, None), #关闭反转
(0x29, None),#开启显示
(0x2d, buf),# RGB
):
self._write(command, data)
self.clear()
清屏函数
def clear(self):
self.fill(0)
self.show()
复位函数
软件复位
def reset(self):
self._write(0x01)
写数据函数
st7735s的命令有2种:命令后无参数;命令后有参数
def _write(self, command, data=None):
self.cs.off() # 开启片选信号
self.dc.off() # 低电平写命令
self.spi.write(bytearray([command]))
if data is not None:
self.cs.on() # 释放片选信号
self.cs.off() # 开启片选信号
self.dc.on() # 高电平写参数
self.spi.write(data)
self.cs.on() # 释放片选信号
刷新函数
采用全局刷新,128*160,一次性将缓冲区内所有数据写入st7735s内
def show(self):
self._write(0x2a,pack(">HH", 0, 127))
self._write(0x2b,pack(">HH", 0, 159))
self._write(0x2c,self.buffer)
画图函数
x,图片右上角横坐标;y,图片右上角纵坐标;width,图片宽;height,图片高;data,颜色数据
def pictrue(self,x,y,width,height,data):
for i in range(height):
for j in range(width):
self.pixel(x+j,y+i,data[j+i*width])
进入睡眠函数
def sleep(self):
self._write(0x28)
self._write(0x10)