3.10 haas506 2.0开发教程-example-TFT

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

最新案例教程点击下方链接跳转,优快云已停止更新

点击跳转HaaS506官方最新案例







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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值