from MYSPI import MySPI
from time import sleep_us
from CODE import StringCode
class LCD(MySPI):
def __init__(self):
#颜色定义查找字典
self.RGB={'white':[31,63,31],'black':[0,0,0],'red':[31,0,0],'green':[0,63,0],'blue':[0,0,31]}
super().__init__()
#作用:8位数据传输
#参数:
#Data:传入的8位数据
def LCD_Send8Data(self,Data):
self.DC.on()
self.SPI_sendData(Data)
#作用:16位数据传输
#参数:
#Data:传入的16位数据
def LCD_Send16Data(self,Data):
self.DC.on()
self.SPI_sendData(Data//256)
self.SPI_sendData(Data%256)
#作用:命令传输
#参数:
#Com:传入的命令
def LCD_SendComm(self,Com):
self.DC.off()
self.SPI_sendData(Com)
#作用:设置XY范围
#参数:
#xs:x的起始范围
#xe:x的终止范围
#ys:y的起始范围
#ye:y的终止范围
def LCD_SetXY(self,xs,xe,ys,ye):
self.LCD_SendComm(0X2A) #设置x范围
self.LCD_Send16Data(xs+1)
self.LCD_Send16Data(xe+2)
self.LCD_SendComm(0X2B) #设置y范围
self.LCD_Send16Data(ys+1)
self.LCD_Send16Data(ye+2)
self.LCD_SendComm(0X2C)#打开内存写入
'''
0 0 0 黑色
31 63 31 白色
31 0 0 红色
0 63 0 绿色
0 0 31 蓝色
'''
#作用:指定范围颜色填充颜色
#参数:
#xs:x的起始范围
#xe:x的终止范围
#ys:y的起始范围
#ye:y的终止范围
#color: 颜色字符串
#RGB:颜色数组
def LCD_FullColor(self,xs,xe,ys,ye,color='',RGB=[]):
if self.RGB.get(color):
RGB=self.RGB.get(color)
color=RGB[2]+RGB[1]*32+RGB[0]*2048
elif RGB:
color=RGB[2]+RGB[1]*32+RGB[0]*2048
if color>=0 or RGB[0]<=31 and RGB[1]<=63 and RGB[2]<=31:
self.LCD_SetXY(xs,xe,ys,ye)
for i in range(ys,ye):
for i in range(xs,xe):
self.LCD_Send16Data(color)
else:
print("颜色不在范围内")
#作用:画一个颜色点
#参数:
#x:x的坐标
#y:y的坐标
#color: 颜色字符串
#RGB:颜色数组
def LCD_DrawPoint(self,x,y,color='',RGB=[]):
if self.RGB.get(color):
RGB=self.RGB.get(color)
color=RGB[2]+RGB[1]*32+RGB[0]*2048
elif RGB:
color=RGB[2]+RGB[1]*32+RGB[0]*2048
self.LCD_SetXY(x,x+1,y,y+1)
self.LCD_Send16Data(color)
#作用:指定范围颜色填充颜色
#参数:
#xs:x的起始坐标
#ys:y的起始坐标
#strcolor: 字体颜色字符串
#RGB:字体颜色数组
#background:背景色字符串
def LCD_WriteString(self,x,y,string=str,strcolor='',background='',RGB=[]):
if self.RGB.get(strcolor):
RGB=self.RGB.get(strcolor)
color=RGB[2]+RGB[1]*32+RGB[0]*2048
elif RGB:
color=RGB[2]+RGB[1]*32+RGB[0]*2048
if self.RGB.get(background):
RGB=self.RGB.get(background)
background=RGB[2]+RGB[1]*32+RGB[0]*2048
for i in range(len(string)):
self.LCD_SetXY(x+(8*i),x+(8*(i+1)),y,y+16)
var=StringCode.get(string[i])
for j in range(16):
data=var[j]
for k in range(8):
if data&0x01:
self.LCD_DrawPoint(x+(8*i)+k,y+j,color)
elif background:
self.LCD_DrawPoint(x+(8*i)+k,y+j,background)
data >>=1
'''
(xs,ys)------(xe,ys)
| |
| |
| |
| |
| |
(xs,ye)------ (xe,ye)
'''
#作用:画矩形
#参数:
#xs:左上点x坐标
#ys:左上点y坐标
#xe:右上点x坐标
#ye:右上点y坐标
#size:大小
#color: 颜色字符串
#RGB:颜色数组
def LCD_DrawRect(self,xs,ys,xe,ye,size=2,color='',RGB=[]):
if self.RGB.get(color):
RGB=self.RGB.get(color)
color=RGB[2]+RGB[1]*32+RGB[0]*2048
elif RGB:
color=RGB[2]+RGB[1]*32+RGB[0]*2048
self.LCD_DrawLine(xs,ys,xe-2,ys,int(size*2),color)
self.LCD_DrawLine(xe,ys,xe,ye,size,color)
self.LCD_DrawLine(xe,ye,xs-2,ye,int(size*2),color)
self.LCD_DrawLine(xs,ye,xs,ys,size,color)
#def LCD_DrawCircle(self,cx,cy,r,size=1,color='',RGB=list):
def Change_num(self,x1,x2):
var=max(x1,x2)
minx=min(x1,x2)
maxx=var
return minx,maxx
#作用:画直线
#参数:
#xs:起始点x坐标
#ys:起始点y坐标
#xe:结束点x坐标
#ye:结束点y坐标
#size:大小
#color: 颜色字符串
#RGB:颜色数组
def LCD_DrawLine(self,xs,ys,xe,ye,size=1,color='',RGB=[]):
xs,xe=self.Change_num(xs,xe)
ys,ye=self.Change_num(ys,ye)
if self.RGB.get(color):
RGB=self.RGB.get(color)
color=RGB[2]+RGB[1]*32+RGB[0]*2048
elif RGB:
color=RGB[2]+RGB[1]*32+RGB[0]*2048
if xs==xe:
for j in range(ys,ye):
self.LCD_FullColor(xs,xs+size,j,j+size,color)
elif ys==ye:
for i in range(xs,xe):
self.LCD_FullColor(i,i+size,ys,ys+size,color)
else:
tan=(ye-ys)/(xe-xs)
for i in range(xs,xe):
for j in range(ys,ye):
if (j-ys) <= (tan*(i-xs))+size and (j-ys) >= (tan*(i-xs))-size:
self.LCD_FullColor(i,i+size,j,j+size,color)
#作用:初始化
#参数:
#inversion:颜色反转
def LCD_init(self,inversion=False):
self.RES.on()
sleep_us(10)
self.RES.off()
self.RES.on()
sleep_us(10)
self.BL.on()#打开背光
self.LCD_SendComm(0X11)##退出睡眠模式
self.LCD_SendComm(0x13)#普通模式全屏显示
if inversion:
self.LCD_SendComm(0x21)#颜色反转
else:
self.LCD_SendComm(0x20)#颜色不反转
self.LCD_SendComm(0x38)#怠速模式关闭
self.LCD_SendComm(0x3a)#改变颜色模式
self.LCD_Send8Data(0x05)#16位颜色
self.LCD_SendComm(0xb4)
self.LCD_Send8Data(0x00)
self.LCD_SendComm(0x29)##显示打开
#作用:显示图片
#参数:
#x:起始点x坐标
#y:起始点y坐标
#w:图片宽
#h:图片高
#img: 要显示的图片
def LCD_ShowImage(self,x,y,w,h,img):
self.LCD_SetXY(x,y,x+w,y+h)
k=0
for i in range(h):
for j in range(w):
self.LCD_Send8Data(img[2*k])
self.LCD_Send8Data(img[2*k+1])
k+=1
没有合适的资源?快使用搜索试试~ 我知道了~
ESP8266+MicroPython开发:ESP8266使用软件模拟SPI驱动TFT屏幕
共4个文件
py:4个
5星 · 超过95%的资源 需积分: 33 7 下载量 57 浏览量
2023-01-10
15:16:45
上传
评论
收藏 4KB ZIP 举报
温馨提示
这款屏幕是由ST7735进行驱动的,驱动方式有3线SPI,4线SPI,还有8线,16线,9线,18线驱动。由于是买的模块,所以采用4线SPI进行驱动。关于这个16位颜色,如图所示其中前四位代表R,中间五位代表G,最后四位代表B,代码的RGB列表就是这样的,比如RGB=[0,0,0]就是黑色。驱动的话主要是写命令和写数据,手册中也说明了DC高电平写数据,低电平写命令,然后使用的话主要是对哪个位置设置哪一种颜色。下图为四线SPI的8位读时序,在手册中还有24位读和32位读,由于本次未使用读,不做强调:讲解:https://blog.csdn.net/darlingqx/article/details/128628481?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128628481%22%2C%22source%22%3A%22darlingqx%22%7D
资源推荐
资源详情
资源评论
收起资源包目录
TFT.zip (4个子文件)
TFT
CODE.py 6KB
main.py 217B
LCD.py 7KB
MYSPI.py 914B
共 4 条
- 1
月明Mo
- 粉丝: 1w+
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页