Arduino ESP32 TFTLCD ST7735 代码和原理

目录

前言

一、3线SPI

二、使用

1.命令

2.对应引脚调整

总结


 


前言

驱动芯片是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,操作更方便哦

  • 11
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值