目录
前言
驱动芯片是ST7735,之前在Arduino上找库,没几个能用的(我FW不能用肯定是我的错),最后还是自己从STM32移植一个。顺便介绍一下ST7735驱动原理。
一、3线SPI
ST7735可以用3线SPI通讯,因为是移植的没用arduino的SPI库,直接模拟SPI。
CS高电平,传数据拉低,同时SCL拉低,SDA开始传输数据,然后SCK拉高,重复8次,CS拉高,整个过程就结束了。
void LCD_Writ_Bus(u8 dat)
{
u8 i;
LCD_CS_Clr();
for(i=0;i<8;i++)
{
LCD_SCLK_Clr();
if(dat&0x80)
{
LCD_MOSI_Set();
}
else
{
LCD_MOSI_Clr();
}
LCD_SCLK_Set();
dat<<=1;
}
LCD_CS_Set();
}
clr低电平;set高电平。反正能跟时序图对上就行,写数据OK了,写命令就是,拉高下DC,再拉低DC。
void LCD_WR_REG(u8 dat)
{
LCD_DC_Clr();
LCD_Writ_Bus(dat);
LCD_DC_Set();
}
写命令和写数据都搞定。就可以开始操作LCD了。
二、使用
1.命令
可以看到命令caset 那一行是设置X轴位置;RAset设置Y轴位置。只要我们设置完位置,再点亮对应像素点的颜色,我们就可以让这些像素点组成你需要的图案或文字。
那怎么看这个表呢,那设置点位置举例。确定X轴位置,写命令0X2AH,然后写数据,这个数据是一个16位数据。 先写高八位,再写低八位。这样X轴起始位置就确定了,X轴结束位置再写一个16位数据。同理,Y轴起始和结束位置可以用相同方法确定,只不过一开始写命令要写0X2B。同理其它命令也是这样使用的。确定颜色和清屏之类的命令也有,只不过要你们去查ST7735的操作手册了,本来有一份,重置电脑忘记保存了,这图也是从别人那里哪来的。
ST7735s驱动 - 知乎 (zhihu.com),这位大佬写的也不错,可以看看。具体程序如下:
LCD_WR_REG(0x2a);
LCD_WR_DATA(x1+2);
LCD_WR_DATA(x2+2);
LCD_WR_REG(0x2b);
LCD_WR_DATA(y1+1);
LCD_WR_DATA(y2+1);
LCD_WR_REG(0x2c);
确定点的步骤就是这样,至于为什么要+2,是因为实际像素点位置和门位置差2,加上就是对应像素点的位置了。
可以看绿色哪一行y轴是不是差1。说实话我也不确定是不是这样(哈哈)。
然后就是设置颜色了,上一步最后不是写了一个0X2C的命令,所以后面直接跟一个颜色的16位数据。
//画笔颜色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色
#define DARKBLUE 0X01CF //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458 //灰蓝色
#define LIGHTGREEN 0X841F //浅绿色
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色
#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色)
具体颜色有这么多,我只用了黑白两个颜色(别问、问就是懒),你们想用直接把这些复制到.h里面就OK了。
有了画点函数后面就方便了,用像素点组成你想要的图形就OK了。因为字符和英文可以用ascii码,找一个ascii库找写对应的字模就行了。中文就有点麻烦了,所以懒得弄就没搞,中文字库2万多个,还占内存。
所以直接使用的话,实现的功能是,显示ASCII里支持的字符,可以调整颜色。
2.对应引脚调整
代码如下(示例):
#define SCL 13
#define SDA 12
#define RES 14
#define DC 27
#define CS 26
#define BL 25
#define USE_HORIZONTAL 1 //显示模式 1 竖屏 2好像是横屏旋转90
#if USE_HORIZONTAL==0||USE_HORIZONTAL==1
#define LCD_W 128
#define LCD_H 160 //你屏幕像素
这里可以改你成你自己定义的串口。然后调整横竖屏;我的屏幕是1.8寸128*160,可以改成你的屏幕大小就可以用了。 这些全在lcd1.h里面改。
总结
没有汉字,字体颜色可以去复制到.h文件里具体使用方法再文件里面有注释,感觉我注释写的还比较全 ,应该能看懂。
LCD_DrawPoint(10,10,BLACK); //画点
LCD_DrawPoint(10,11,BLACK);
LCD_DrawPoint(11,10,BLACK);
LCD_DrawPoint(11,11,BLACK);
LCD_ShowChar(15,15,'1',BLACK,WHITE,16,0); //显示单个字符 X位置 Y位置 ‘要显示的字符’ 字体颜色 背景颜色 字号 显示模式 0不重叠 1重叠
LCD_ShowString(24,60,"lcd-1",BLACK ,WHITE,16,0); //显示字符串 “要显示的字符串”
LCD_ShowString(24,80,"-i",BLACK ,WHITE,16,0); //显示字符串
LCD_ShowIntNum(72,60,i,3,BLACK,WHITE,16); //显示整数变量 i=显示整数
LCD_ShowFloatNum1(60,17,00.00,4,BLACK,WHITE,16); //显示两位小数
第一次写可能写的不是很好,见谅。
最后贴上下载地址https://github.com/WINKCM/Arduino-ESP32-TFTLCD-ST7735.git
链接: https://pan.baidu.com/s/1FOVin0QuSzZ5YJ64PX8evg 提取码: 6uc7 复制这段内容后打开百度网盘手机App,操作更方便哦