当前位置: 首页 > article >正文

驱动TFT-1.44寸屏(ST7735)显示器

目录

一、驱动芯片介绍

二、驱动方式

三、完整代码下载

        TFT1.44寸屏,搭配ST7735驱动芯片,是一种专为小型电子设备设计的彩色液晶显示解决方案。该屏幕采用薄膜晶体管(TFT)技术,能够实现高亮度、高对比度和丰富的色彩表现(通常支持262K色,即18位色彩深度),提供清晰细腻的显示效果。ST7735作为一款集成度高的驱动芯片,不仅支持多种分辨率(在1.44寸屏上通常为128x128像素),还具备RGB RAMDAC、控制器和GPIO接口等功能,并通过SPI接口与微控制器进行通信。此外,ST7735还提供了硬件加速图形绘制功能,如点、线、矩形绘制及文本显示等,进一步提升了显示性能。该组合广泛应用于仪器仪表、智能设备等嵌入式系统中,因其低功耗特性而特别适合便携式设备。通过编写相应的驱动程序,可以方便地初始化ST7735驱动芯片,配置SPI接口,并发送显示数据,使TFT1.44寸屏正常工作。

一、驱动芯片介绍

  • 屏幕尺寸:1.44英寸
  • 分辨率:128x128像素
  • 色彩:支持262K色,即18位色彩深度(6位红、6位绿、6位蓝各通道),能够提供相对丰富的颜色表现。
  • 接口类型:MCU接口,可通过SPI协议与微控制器进行通信。
  • 驱动型号:ST7735
  • 功能:ST7735是一款低功耗的彩色TFT液晶屏驱动芯片,广泛应用于各种嵌入式系统和电子设备中。它集成了RGB RAMDAC(随机存取的数字模拟转换器)、控制器和GPIO接口,支持硬件加速图形绘制功能,如画点、线、矩形、填充以及文本显示等。
  • 兼容性:可直接以SPI协议,或8位/9位/16位并行连接外部控制器。显示数据可以存储在片内的132x162x18 bits内存中,显示内存的读写不需要外部时钟驱动。
  • 型号差异:ST7735有几种不同的型号,如ST7735、ST7735R、ST7735S等。-R和-S型号在功能上与原始型号一致,但增加了垂直滚动功能,并容忍更高的电压(最高到4.8V)。

        由于TFT1.44寸屏具有体积小、功耗低、色彩丰富等特点,因此非常适合用于智能手表、便携式医疗设备、小型电子仪器等需要显示信息的嵌入式系统中。

二、驱动方式

        首先,我们需要根据实际的硬件连接来定义LCD接口所使用的GPIO引脚。

/******************************************************************************
  接口定义,请根据接线修改并修改相应IO初始化--驱动板子和IO要对应 */
//	#define LCD_DI        	//PA7      	//数据输入线
//	#define LCD_SC        	//PA5      	//时钟线
//	#define LCD_CS        	//PB1      	//片选	
//	#define LCD_SDO/RST     //PA6      	//数据输出/复位
//	#define LCD_RS         	//PB0       //命令/数据切换
//	#define LCD_BLK         //PB10    	//背光控制

        使用下 LCD_Init 函数通过SPI接口与TFT进行通信,并执行各种各个寄存器的初始化配置等。 

/*******************************************************************************/
//函数:void LCD_Init(void)
//函数功能:初始化lcd
/*******************************************************************************/
void LCD_Init(void){ 	

	LCD_BLK_On;           //开启背光
	
	LCD_SoftRest();        //软复位 
	
	//LCD Init For 1.44Inch LCD Panel with ST7735R.
	LCD_WR_REG(0x11);//Sleep exit 
	HAL_Delay(120);
		
	//ST7735R Frame Rate
	LCD_WR_REG(0xB1); 
	LCD_WR_DATA8(0x01); 
	LCD_WR_DATA8(0x2C); 
	LCD_WR_DATA8(0x2D); 

	LCD_WR_REG(0xB2); 
	LCD_WR_DATA8(0x01); 
	LCD_WR_DATA8(0x2C); 
	LCD_WR_DATA8(0x2D); 

	LCD_WR_REG(0xB3); 
	LCD_WR_DATA8(0x01); 
	LCD_WR_DATA8(0x2C); 
	LCD_WR_DATA8(0x2D); 
	LCD_WR_DATA8(0x01); 
	LCD_WR_DATA8(0x2C); 
	LCD_WR_DATA8(0x2D); 
	
	LCD_WR_REG(0xB4); //Column inversion 
	LCD_WR_DATA8(0x07); 
	
	//ST7735R Power Sequence
	LCD_WR_REG(0xC0); 
	LCD_WR_DATA8(0xA2); 
	LCD_WR_DATA8(0x02); 
	LCD_WR_DATA8(0x84); 
	LCD_WR_REG(0xC1); 
	LCD_WR_DATA8(0xC5); 

	LCD_WR_REG(0xC2); 
	LCD_WR_DATA8(0x0A); 
	LCD_WR_DATA8(0x00); 

	LCD_WR_REG(0xC3); 
	LCD_WR_DATA8(0x8A); 
	LCD_WR_DATA8(0x2A); 
	LCD_WR_REG(0xC4); 
	LCD_WR_DATA8(0x8A); 
	LCD_WR_DATA8(0xEE); 
	
	LCD_WR_REG(0xC5); //VCOM 
	LCD_WR_DATA8(0x0E); 
	
	LCD_WR_REG(0x36); //MX, MY, RGB mode 
	LCD_WR_DATA8(0xC8); 
	
	//ST7735R Gamma Sequence
	LCD_WR_REG(0xe0); 
	LCD_WR_DATA8(0x0f); 
	LCD_WR_DATA8(0x1a); 
	LCD_WR_DATA8(0x0f); 
	LCD_WR_DATA8(0x18); 
	LCD_WR_DATA8(0x2f); 
	LCD_WR_DATA8(0x28); 
	LCD_WR_DATA8(0x20); 
	LCD_WR_DATA8(0x22); 
	LCD_WR_DATA8(0x1f); 
	LCD_WR_DATA8(0x1b); 
	LCD_WR_DATA8(0x23); 
	LCD_WR_DATA8(0x37); 
	LCD_WR_DATA8(0x00); 	
	LCD_WR_DATA8(0x07); 
	LCD_WR_DATA8(0x02); 
	LCD_WR_DATA8(0x10); 

	LCD_WR_REG(0xe1); 
	LCD_WR_DATA8(0x0f); 
	LCD_WR_DATA8(0x1b); 
	LCD_WR_DATA8(0x0f); 
	LCD_WR_DATA8(0x17); 
	LCD_WR_DATA8(0x33); 
	LCD_WR_DATA8(0x2c); 
	LCD_WR_DATA8(0x29); 
	LCD_WR_DATA8(0x2e); 
	LCD_WR_DATA8(0x30); 
	LCD_WR_DATA8(0x30); 
	LCD_WR_DATA8(0x39); 
	LCD_WR_DATA8(0x3f); 
	LCD_WR_DATA8(0x00); 
	LCD_WR_DATA8(0x07); 
	LCD_WR_DATA8(0x03); 
	LCD_WR_DATA8(0x10);  
	
	LCD_WR_REG(0x2a);
	LCD_WR_DATA8(0x00);
	LCD_WR_DATA8(0x00);
	LCD_WR_DATA8(0x00);
	LCD_WR_DATA8(0x7f);

	LCD_WR_REG(0x2b);
	LCD_WR_DATA8(0x00);
	LCD_WR_DATA8(0x00);
	LCD_WR_DATA8(0x00);
	LCD_WR_DATA8(0x9f);
	
	LCD_WR_REG(0xF0); //Enable test command  
	LCD_WR_DATA8(0x01); 
	LCD_WR_REG(0xF6); //Disable ram power save mode 
	LCD_WR_DATA8(0x00); 
	
	LCD_WR_REG(0x3A); //65k mode 
	LCD_WR_DATA8(0x05); 
	
	
	LCD_WR_REG(0x29);//Display on	 

	LCD_Display_Dir(LCD_DIR_Mode);	//选择--屏幕显示方式
	
	LCD_BLK_On;					//点亮背光
	
	LCD_Clear(WHITE);
	
}

        基于STM32 HAL库编写的,使用下面这些函数通过SPI接口与TFT进行通信,并执行各种控制操作,如写入寄存器、写入数据、显示开启/关闭等。 

/********************************************************************/
//函数:u8 SPI_ReadWriteByte(u8 TxData)
//函数功能: SPI读写函数 : 使用操作寄存器方式,速度更快
//SPI1 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
//*******************************************************************/
u8 SPI_ReadWriteByte(u8 TxData){		 			 
	while(HAL_SPI_Transmit(&hspi1, &TxData, 1, 100) != HAL_OK);         // 发送数据
}




//********************************************************************/
//函数:void LCD_WR_REG(u16 regval)
//函数功能:
//写寄存器函数
//regval:寄存器值
//*******************************************************************/
void LCD_WR_REG(u16 regval){   
	LCD_CS_CLR;  //LCD_CS=0  //片选
	LCD_RS_CLR;  //LCD_RS=0  //设置命令状态
	SPI_ReadWriteByte(regval&0x00FF);
	LCD_CS_SET;  //LCD_CS=1	 
}



//*******************************************************************/
//函数:void LCD_WR_DATA8(u8 data)   //写8位数据
//函数功能:
//液晶屏--写8位数据函数
//*******************************************************************/
void LCD_WR_DATA8(u8 data){
	LCD_CS_CLR;  //LCD_CS=0  //片选
	LCD_RS_SET;	 //LCD_RS=1   //设置数据状态			    	   
	SPI_ReadWriteByte(data);	
	LCD_CS_SET;  //LCD_CS=1   			 
}


//*******************************************************************/
//函数:void LCD_WR_DATA16(u16 data)   //写16位数据
//函数功能:写LCD数据
//输入参数:
//data:要写入的值
//*******************************************************************/
void LCD_WR_DATA16(u16 data){	
 	LCD_CS_CLR;  //LCD_CS=0  //片选
	LCD_RS_SET;	 //LCD_RS=1   //设置数据状态
	SPI_ReadWriteByte(data>>8);
	SPI_ReadWriteByte(data);
	LCD_CS_SET;    //LCD_CS=1
}


//*******************************************************************/
//函数:void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue)  //写液晶屏寄存器
//函数功能:写寄存器
//输入参数: 
//LCD_Reg:寄存器地址
//LCD_RegValue:要写入的数据
//*******************************************************************/
void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue){	
	LCD_WR_REG(LCD_Reg);		   //写入要写的寄存器序号	 
	LCD_WR_DATA8(LCD_RegValue);//写入数据	    		 
}


//*******************************************************************/
//函数:void LCD_WriteRAM_Prepare(void)   
//函数功能:开始写GRAM  命令
//*******************************************************************/
void LCD_WriteRAM_Prepare(void){
 	LCD_WR_REG(lcddev.wramcmd);	  
}	



//*******************************************************************/
//函数:LCD_WriteRAM(u16 RGB_Code)   
//函数功能:写入点阵颜色值
//输入参数:
//RGB_Code:颜色值
//*******************************************************************/
void LCD_WriteRAM(u16 RGB_Code){							    
	LCD_WR_DATA16( RGB_Code );//写十六位GRAM
}





//********************************************************************************/
//函数:void LCD_DisplayOn(void)
//函数功能:
//LCD开启显示
//*******************************************************************/
void LCD_DisplayOn(void){					   
	LCD_WR_REG(0X29);	//开启显示
}	


//*******************************************************************/
//函数:void LCD_DisplayOff(void)
//函数功能:
//LCD关闭显示
//*******************************************************************/
void LCD_DisplayOff(void){	   
	LCD_WR_REG(0X28);	//关闭显示
} 

//********************************************************************************/
//函数:void LCD_SoftRest(void)
//函数功能:给屏幕发命令,执行软复位命令
//LCD开启显示
//*******************************************************************/
void LCD_SoftRest(void){					   
	LCD_WR_REG(0x01);	//发送软复位命令
	HAL_Delay(100);  // delay 50 ms 
}	


//********************************************************************************/
//函数:void LCD_SoftRest(void)
//函数功能:给屏幕发命令,执行硬复位命令
//LCD开启显示
//*******************************************************************/
void LCD_HardwareRest(void){					   
//	LCD_RST_CLR;     //液晶屏复位 --硬复位--使能 
//	HAL_Delay(50);   // delay 50 ms 
//	LCD_RS_SET;      //液晶屏复位 --硬复位--失能 
//	HAL_Delay(30);   // delay 30 ms 
}	

        通过调用 Demo_Menu 函数,进行示例的演示。

//****************************************************************************************/
//函数:void Demo_Menu(void)
//功能描述: 演示程序菜单
/****************************************************************************************/
void Demo_Menu(void){

	LCD_Clear(WHITE); //清屏
	
	Draw_Font24B(4,30,RED,"液晶屏测试");

	Draw_Font16B(4,60,BLUE,"1: 电子颜色填充");

	Draw_Font16B(4,80,BLUE,"2: 文字显示");

	Draw_Font16B(4,100,BLUE,"3: 图片显示");

	Draw_Font16B(4,120,RED,"shop155800028.taobao.com");

	HAL_Delay(2000);//延时
		
	Color_Test();       //颜色填充测试
  Font_Test();        //字体字形显示测试
	Show_Picture();     //显示一张图片
	
	
	LCD_Clear(WHITE); //清屏
	LCD_ShowString(0,0,20,20,12,RED,"!#2");
	DisplayButtonUp(5,20,25,35);
	DisplayButtonDown(45,20,65,35);
	LCD_ShowxNum(5,40,99,3,12,RED,0);
	LCD_ShowNum(55,40,888,3,12,RED);
	HAL_Delay(2000);	

}

三、完整代码下载

项目代码下载链接:https://download.csdn.net/download/qq_26043945/89935663


http://www.kler.cn/a/376195.html

相关文章:

  • 【重生之我要苦学C语言】深入理解指针2
  • Applied Artificial Intelligence
  • Python 的基本语法
  • RabbitMQ最全教程-Part1(基础使用)
  • Axure使用动态面板制作新闻栏目高级交互
  • 履带式排爆演习训练机器人技术详解
  • 【面试】数组中 Array.forEach()、Array.map() 遍历结束后是否改变原数组
  • k8s 排查集群中故障节点
  • Jenkins面试整理-如何在 Jenkins 中使用插件?
  • 2000字搞懂Java中Lambda+方法引用简化代码(开发代码量秒缩十倍)
  • 鸿蒙ArkTS中的image组件
  • 代码随想录算法训练营第四十一天 | 01背包问题(二维),01背包问题(一维),416.分割等和子集
  • 分布式和微服务系统区别
  • SpringBoot助力大型商场应急预案自动化
  • C语言日记 2024年11月2日
  • 利士策分享,锚定未来:稳健规划人生
  • git reset 删除错误提交
  • 【Python爬虫实战】网络爬虫完整指南:HTTP/HTTPS协议与爬虫安全实践
  • 博物馆3D数字化的优势有哪些?
  • ArcGIS Pro SDK (二十)流图层
  • 【Android】初始路由框架及ARouter原理
  • 基于Matlab GUI的说话人识别测试平台
  • 一般无人机和FPV无人机的区别
  • 使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(二) ubuntu的下载安装
  • 【算法】奇数在偶数后、反转字符串中的单词
  • 仿真工具Modelsim和QuestaSim有什么区别?