最新案例教程点击下方链接跳转,优快云已停止更新
点
击
跳
转
1.介绍
本节实现了128*160TFT(驱动ST7735S)屏幕点亮、画点、画线、画圆、显示字符串、显示BMP图片功能。
注意在文件夹中加入图片。
接线

模块引脚
当前案例为了接线方便,将DC、RST接到了haas506开发板的i2c接口的LPG(GPIO3)、SDA(GPIO20)引脚上。
| pin | note |
|---|---|
| GND | 电压地 |
| VDD | 电压正3.3V |
| SCL | SPI时钟线(与haas506的SPI_CLK相接) |
| SDA | SPI数据线(与haas506的SPI_MOSI相接) |
| RST | 复位引脚(GPIO20) |
| DC | 数据/命令引脚(GPIO3) |
| CS | SPI片选(与haas506的SPI_CS相接) |
| BLK | 背光控制开关,可不接 |
-
模块实物图1

-
模块实物图2

2.测试代码
- main.py
from st7735s import ST7735S
import utime as time
tft=ST7735S()
tft.tft_begin()
#画空心圆
tft.tft_drawCircle(64,64,40,0xffff,0)
tft.tft_drawCircle(64,64,30,0xffff,0)
tft.tft_drawCircle(64,64,20,0xffff,0)
time.sleep(2)
#清屏
tft.tft_clear()
#画实心圆
tft.tft_drawCircle(64,64,20,0xffff,1)
time.sleep(2)
tft.tft_clear()
#画三角形
tft.tft_drawTriangel(0,0,100,64,120,32,0xf800)
time.sleep(2)
tft.tft_clear()
#画像素点/画线
tft.tft_drawPoint(32,32,0xf800)
tft.tft_drawPoint(64,32,0xf800)
tft.tft_drawPoint(64,64,0xf800)
tft.tft_drawPoint(32,64,0xf800)
time.sleep(2)
tft.tft_clear()
tft.tft_drawLine(32,32,100,32,0xf800)
tft.tft_drawLine(64,64,120,120,0xf800)
time.sleep(2)
tft.tft_clear()
#显示BMP图片,当前图片存放在项目文件夹内
tft.tft_showBmp('/data/pyamp/test128x160.bmp')
time.sleep(2)
tft.tft_clear()
tft.tft_showBmp('/data/pyamp/flower64x48.bmp')
time.sleep(2)
tft.tft_clear()
#显示字符(6*8字体大小)
tft.tft_showString(0,0,"haas506",0xf800)
tft.tft_showString(0,32,"hello world",0xffff)
tft.tft_showString(0,64,"123456789",0X07FF)
time.sleep(2)
tft.tft_clear()
#显示中文字符 (16*16字体大小)
tft.tft_showCHN(0,0,1,0xffff,0)
tft.tft_showCHN(0,16,2,0xffff,0)
tft.tft_showCHN(0,32,3,0xffff,0)
tft.tft_showCHN(0,48,4,0xffff,0)
tft.tft_showCHN(0,64,5,0xffff,0)
time.sleep(2)
tft.tft_clear()
#显示中文字符 (24*24字体大小)
tft.tft_showCHN(0,0,1,0xffff,1)
tft.tft_showCHN(0,24,2,0xffff,1)
tft.tft_showCHN(0,48,3,0xffff,1)
tft.tft_showCHN(0,72,4,0xffff,1)
tft.tft_showCHN(0,96,5,0xffff,1)
time.sleep(2)
tft.tft_clear()
#显示自定义字符 (8*16字体大小)
tft.tft_showCHN(0,0,7,0xffff,2)
- st7735s.py
from driver import SPI
from driver import GPIO
import utime as time
from font import terminalfont,F16_16,F24_24,F8_16
USE_HORIZONTAL=1 #设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏
# Constants for interacting with display registers.
ST7735_TFTWIDTH = 128
ST7735_TFTHEIGHT = 160
ST7735_NOP = 0x00
ST7735_SWRESET = 0x01
ST7735_RDDID = 0x04
ST7735_RDDST = 0x09
ST7735_SLPIN = 0x10
ST7735_SLPOUT = 0x11
ST7735_PTLON = 0x12
ST7735_NORON = 0x13
# ILI9341_RDMODE = 0x0A
# ILI9341_RDMADCTL = 0x0B
# ILI9341_RDPIXFMT = 0x0C
# ILI9341_RDIMGFMT = 0x0A
# ILI9341_RDSELFDIAG = 0x0F
ST7735_INVOFF = 0x20
ST7735_INVON = 0x21
# ILI9341_GAMMASET = 0x26
ST7735_DISPOFF = 0x28
ST7735_DISPON = 0x29
ST7735_CASET = 0x2A
ST7735_RASET = 0x2B
ST7735_RAMWR = 0x2C
ST7735_RAMRD = 0x2E
ST7735_PTLAR = 0x30
ST7735_MADCTL = 0x36
# ST7735_PIXFMT = 0x3A
ST7735_COLMOD = 0x3A
ST7735_FRMCTR1 = 0xB1
ST7735_FRMCTR2 = 0xB2
ST7735_FRMCTR3 = 0xB3
ST7735_INVCTR = 0xB4
# ILI9341_DFUNCTR = 0xB6
ST7735_DISSET5 = 0xB6
ST7735_PWCTR1 = 0xC0
ST7735_PWCTR2 = 0xC1
ST7735_PWCTR3 = 0xC2
ST7735_PWCTR4 = 0xC3
ST7735_PWCTR5 = 0xC4
ST7735_VMCTR1 = 0xC5
# ILI9341_VMCTR2 = 0xC7
ST7735_RDID1 = 0xDA
ST7735_RDID2 = 0xDB
ST7735_RDID3 = 0xDC
ST7735_RDID4 = 0xDD
ST7735_GMCTRP1 = 0xE0
ST7735_GMCTRN1 = 0xE1
ST7735_PWCTR6 = 0xFC
# Colours for convenience
ST7735_BLACK = 0x0000 # 0b 00000 000000 00000 黑色
ST7735_BLUE = 0x001F # 0b 00000 000000 11111 蓝色
ST7735_GREEN = 0x07E0 # 0b 00000 111111 00000 绿色
ST7735_RED = 0xF800 # 0b 11111 000000 00000 红色
ST7735_CYAN = 0x07FF # 0b 00000 111111 11111 橘黄
ST7735_MAGENTA = 0xF81F # 0b 11111 000000 11111 紫红色
ST7735_YELLOW = 0xFFE0 # 0b 11111 111111 00000 黄色
ST7735_WHITE = 0xFFFF # 0b 11111 111111 11111
ST7735_CYAN =0x7FFF
ST7735_BROWN =0XBC40 #棕色
ST7735_BRRED =0XFC07 #棕红色
ST7735_GRAY =0X8430 #灰色
ST7735_DARKBLUE =0X01CF #深蓝色
ST7735_LIGHTBLUE =0X7D7C #浅蓝色
ST7735_GRAYBLUE =0X5458 #灰蓝色
ST7735_LIGHTGREEN =0X841F #浅绿色
ST7735_LGRAY =0XC618 #浅灰色(PANNEL),窗体背景色
ST7735_LGRAYBLUE =0XA651 #浅灰蓝色(中间层颜色)
ST7735_LBBLUE =0X2B12 #浅棕蓝色(选择条目的反色)
class ST7735S(object):
# --------------------------------------------------------------
# Prototype : __init__(width=ST7735_TFTWIDTH,height=ST7735_TFTHEIGHT)
# Parameters : width,height为屏幕的大小,如128*160
# Description : 初始化spi,cs,rst,dc引脚
# --------------------------------------------------------------
def __init__(self,width=ST7735_TFTWIDTH,height=ST7735_TFTHEIGHT):
self.width = width
self.height = height
#creat spi-instance,cs-instance,rst,dc
#open spi,cs,rst,dc
self._spi=SPI()
self._spi.open('ST7735S')
self.cs=GPIO()
self.cs.open('cs')
self._rst=GPIO()
self._rst.open('rst')
self._dc=GPIO()
self._dc.open('dc')
# --------------------------------------------------------------
# Prototype : _initialize()
# Parameters : 无
# Description : 初始化
# --------------------------------------------------------------
def _initialize(self):
self.writeCmd(ST7735_SWRESET) # Software reset
time.sleep_ms(150) # delay 150 ms
self.writeCmd(ST7735_SLPOUT) #Out of sleep mode
time.sleep_ms(120)
#------------------------------------ST7735S Frame Rate-----------------------------------------#
self.writeCmd(ST7735_FRMCTR1)
self.writeDat(0x05)
self.writeDat(0x3C)
self.writeDat(0x3C)
self.writeCmd(ST7735_FRMCTR2)
self.writeDat(0x05)
self.writeDat(0x3C)
self.writeDat(0x3C)
self.writeCmd(ST7735_FRMCTR3)
self.writeDat(0x05)
self.writeDat(0x3C)
self.writeDat(0x3C)
self.writeDat(0x05)
self.writeDat(0x3C)
self.writeDat(0x3C)
#------------------------------------End ST7735S Frame Rate---------------------------------#
self.writeCmd(ST7735_INVCTR) #Display inversion ctrl
# self.writeDat(0x03) # option1
self.writeDat(0x07) # option2
#------------------------------------ST7735S Power Sequence---------------------------------#
self.writeCmd(ST7735_PWCTR1)
self.writeDat(0x28)
self.writeDat(0x08)
self.writeDat(0x04)
self.writeCmd(ST7735_PWCTR2)
self.writeDat(0XC0)
self.writeCmd(ST7735_PWCTR3)
self.writeDat(0x0D)
self.writeDat(0x00)
self.writeCmd(ST7735_PWCTR4)
self.writeDat(0x8D)
self.writeDat(0x2A)
self.writeCmd(ST7735_PWCTR5)
self.writeDat(0x8D)
self.writeDat(0xEE)
#---------------------------------End ST7735S Power Sequence-------------------------------------#
self.writeCmd(ST7735_VMCTR1) #VCOM
self.writeDat(0x1A)
self.writeCmd(ST7735_MADCTL) #MX, MY, RGB mode
if USE_HORIZONTAL==0:
self.writeDat(0x00)
elif USE_HORIZONTAL==1:
self.writeDat(0xC0)
elif USE_HORIZONTAL==2:
self.writeDat(0x70)
else:
self.writeDat(0xA0)
# if USE_HORIZONTAL==0:
# self.writeDat(0xC8)
# elif USE_HORIZONTAL==1:
# self.writeDat(0x08)
# elif USE_HORIZONTAL==2:
# self.writeDat(0x78)
# else:
# self.writeDat(0xA8)
#------------------------------------ST7735S Gamma Sequence---------------------------------#
self.writeCmd(ST7735_GMCTRP1)
self.writeDat(0x04)
self.writeDat(0x22)
self.writeDat(0x07)
self.writeDat(0x0A)
self.writeDat(0x2E)
self.writeDat(0x30)
self.writeDat(0x25)
self.writeDat(0x2A)
self.writeDat(0x28)
self.writeDat(0x26)
self.writeDat(0x2E)
self.writeDat(0x3A)
self.writeDat(0x00)
self.writeDat(0x01)
self.writeDat(0x03)
self.writeDat(0x13)
self.writeCmd(ST7735_GMCTRN1)
self.writeDat(0x04)
self.writeDat(0x16)
self.writeDat(0x06)
self.writeDat(0x0D)
self.writeDat(0x2D)
self.writeDat(0x26)
self.writeDat(0x23)
self.writeDat(0x27)
self.writeDat(0x27)
self.writeDat(0x25)
self.writeDat(0x2D)
self.writeDat(0x3B)
self.writeDat(0x00)
self.writeDat(0x01)
self.writeDat(0x04)
self.writeDat(0x13)
##------------------------------------End ST7735S Gamma Sequence-----------------------------#
self.writeCmd(ST7735_COLMOD) #65k mode set color mode
self.writeDat(0x05)
self.writeCmd(ST7735_DISPON) #Display on
#
#black
time.sleep_ms(200)
self.tft_fill(0,0,128,160,0x0000)
# Initialize the display. Broken out as a separate function so it can
# be overridden by other displays in the future.
# self.writeCmd(ST7735_SWRESET) # Software reset
# time.sleep_ms(150) # delay 150 ms
# self.writeCmd(ST7735_SLPOUT) # Out of sleep mode

本文档详细介绍了如何使用HaaS506开发板驱动128x160分辨率的TFT LCD屏,包括初始化、画点、画线、画圆、显示字符串和BMP图片等功能,并提供了完整的Python代码示例。同时,文章提到了屏幕显示中文字符和特定尺寸英文字符的问题及解决方案。
最低0.47元/天 解锁文章
878

被折叠的 条评论
为什么被折叠?



