STM32通过8位并口驱动TFT-1.8寸屏(ST7735)显示器

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

一、驱动芯片介绍

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

二、驱动方式

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

/******************************************************************************接口定义,请根据接线修改并修改相应IO初始化--驱动板子和IO要对应 */
//	#define LCD_CS        	//PB1      	//片选
//	#define LCD_RS         	//PB0       //命令/数据切换
//	#define LCD_WR         	//PB11      //写控制端
//	#define LCD_RD         	//PB10    	//读控制端
//	#define LCD_RST     		//PB8      	//复位端
//	#define LCD_BLK         //PB7    		//背光控制
//	#PA0-7,作为8位并口的数据输出端

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

/*******************************************************************************/
//函数:void LCD_Init(void)
//函数功能:初始化lcd
/*******************************************************************************/
void LCD_Init(void){ 	LCD_BLK_Off;           //关闭背光//LCD_SoftRest();        //软复位 LCD_HardwareRest();			//硬复位命令LCD_RD_SET;LCD_WR_REG(0x11);     // Sleep outHAL_Delay(120);                //HAL_Delay 120ms LCD_WR_REG(0xB1);     //In Normal modeLCD_WR_DATA(0x05);   LCD_WR_DATA(0x3C);   LCD_WR_DATA(0x3C);    LCD_WR_REG(0xB2);     //In Idle mode LCD_WR_DATA(0x05);   LCD_WR_DATA(0x3C);   LCD_WR_DATA(0x3C);   LCD_WR_REG(0xB3);     //In Partial modeLCD_WR_DATA(0x05);   LCD_WR_DATA(0x3C);   LCD_WR_DATA(0x3C);   LCD_WR_DATA(0x05);   LCD_WR_DATA(0x3C);   LCD_WR_DATA(0x3C);   LCD_WR_REG(0xB4);     LCD_WR_DATA(0x03);   //Normal mode dot inversionLCD_WR_REG(0xC0);     //Power ControlLCD_WR_DATA(0x28);   //AVDD=4.6V, GVDD=4.3VLCD_WR_DATA(0x08);   //GVCL=-4.3VLCD_WR_DATA(0x04);   //MODE=2XLCD_WR_REG(0xC1);     //Power ControlLCD_WR_DATA(0xC0);   //V25=2.4, VGH=2*4.6+2.4-0.5=11.1, VGL=-7.5LCD_WR_REG(0xC2);     LCD_WR_DATA(0x0D); LCD_WR_DATA(0x00);   LCD_WR_REG(0xC3);     LCD_WR_DATA(0x8D);   LCD_WR_DATA(0x2A);   LCD_WR_REG(0xC4);     LCD_WR_DATA(0x8D);   LCD_WR_DATA(0xEE);   LCD_WR_REG(0xC5);     //Vcom      LCD_WR_DATA(0x18);   LCD_WR_REG(0x36);     LCD_WR_DATA(0xC0);  LCD_WR_REG(0xE0);     LCD_WR_DATA(0x04);   LCD_WR_DATA(0x1B);   LCD_WR_DATA(0x1C);   LCD_WR_DATA(0x1E);   LCD_WR_DATA(0x3C);   LCD_WR_DATA(0x33);LCD_WR_DATA(0x29); LCD_WR_DATA(0x2B);   LCD_WR_DATA(0x2A);   LCD_WR_DATA(0x26);   LCD_WR_DATA(0x2E);   LCD_WR_DATA(0x39);   LCD_WR_DATA(0x00);   LCD_WR_DATA(0x02);   LCD_WR_DATA(0x02);   LCD_WR_DATA(0x10);   LCD_WR_REG(0xE1);     LCD_WR_DATA(0x04);   LCD_WR_DATA(0x1B);   LCD_WR_DATA(0x1C);   LCD_WR_DATA(0x1E);  LCD_WR_DATA(0x3C);   LCD_WR_DATA(0x33);  LCD_WR_DATA(0x29);  LCD_WR_DATA(0x2B);   LCD_WR_DATA(0x29);   LCD_WR_DATA(0x26);   LCD_WR_DATA(0x2E);   LCD_WR_DATA(0x39);   LCD_WR_DATA(0x00);   LCD_WR_DATA(0x02);   LCD_WR_DATA(0x02);   LCD_WR_DATA(0x10);   LCD_WR_REG(0x3A);     LCD_WR_DATA(0x05);   LCD_WR_REG(0x11);     // Sleep outHAL_Delay(120);LCD_WR_REG(0x2A);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0x7F);LCD_WR_REG(0x2B);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0x9F);LCD_WR_REG(0x29);		 // Display OnHAL_Delay(20);HAL_Delay(20); //HAL_Delay 20msLCD_WR_REG(0x2C);HAL_Delay(20); //HAL_Delay 20msLCD_Display_Dir(LCD_DIR_Mode);	//选择--屏幕显示方式LCD_BLK_On;					//点亮背光LCD_Clear(WHITE);}

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

/********************************************************************/
//函数:uint8_t DB_OUT(uint8_t TxData)
//函数功能: PA0-PA7输出数据
//TxData:要写入的字节
//*******************************************************************/
void DB_OUT(uint8_t  TxData){		 			 GPIOA->BSRR = TxData;		// 设置  TxData  高电平GPIOA->BRR  = ~TxData;	// 清除 ~TxData  高电平(即设置其余脚为低电平)
}//********************************************************************/
//函数:void LCD_WR_REG(uint8_t regval)
//函数功能:
//写寄存器函数
//regval:寄存器值
//*******************************************************************/
void LCD_WR_REG(uint8_t regval){   LCD_CS_CLR;  //LCD_CS=0  //片选LCD_RS_CLR;  //LCD_RS=0  //设置命令状态DB_OUT(regval);LCD_WR_CLR;LCD_WR_SET;LCD_CS_SET;  //LCD_CS=1	 
}//*******************************************************************/
//函数:void LCD_WR_DATA(uint8_t data)   //写8位数据
//函数功能:
//液晶屏--写8位数据函数
//*******************************************************************/
void LCD_WR_DATA(uint8_t data){LCD_CS_CLR;  //LCD_CS=0  //片选LCD_RS_SET;	 //LCD_RS=1   //设置数据状态DB_OUT(data);	LCD_WR_CLR;	LCD_WR_SET;LCD_CS_SET;  //LCD_CS=1   			 
}//*******************************************************************/
//函数:void LCD_WR_DATA16(uint16_t data)   //写16位数据
//函数功能:写LCD数据
//输入参数:
//data:要写入的值
//*******************************************************************/
void LCD_WR_DATA16(uint16_t data){	LCD_CS_CLR;  //LCD_CS=0  //片选LCD_RS_SET;	 //LCD_RS=1   //设置数据状态DB_OUT(data>>8);LCD_WR_CLR;LCD_WR_SET;DB_OUT(data);LCD_WR_CLR;LCD_WR_SET;LCD_CS_SET;    //LCD_CS=1
}//*******************************************************************/
//函数:void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue)  //写液晶屏寄存器
//函数功能:写寄存器
//输入参数: 
//LCD_Reg:寄存器地址
//LCD_RegValue:要写入的数据
//*******************************************************************/
void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue){	LCD_WR_REG(LCD_Reg);		   //写入要写的寄存器序号	 LCD_WR_DATA(LCD_RegValue);//写入数据	    		 
}//*******************************************************************/
//函数:void LCD_WriteRAM_Prepare(void)   
//函数功能:开始写GRAM  命令
//*******************************************************************/
void LCD_WriteRAM_Prepare(void){LCD_WR_REG(lcddev.wramcmd);	  
}	//*******************************************************************/
//函数:LCD_WriteRAM(uint16_t RGB_Code)   
//函数功能:写入点阵颜色值
//输入参数:
//RGB_Code:颜色值
//*******************************************************************/
void LCD_WriteRAM(uint16_t RGB_Code){							    LCD_RS_SET;LCD_CS_CLR;DB_OUT(RGB_Code>>8);LCD_WR_CLR;LCD_WR_SET;DB_OUT(RGB_Code&0X00ff);LCD_WR_CLR;LCD_WR_SET;LCD_CS_SET;
}//********************************************************************************/
//函数: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_SET;HAL_Delay(10);LCD_RST_CLR;     //液晶屏复位 --硬复位--使能 HAL_Delay(20);   // delay 20 ms LCD_RST_SET;      //液晶屏复位 --硬复位--失能 HAL_Delay(20);   // delay 20 ms 
}	//*******************************************************************/
//函数:void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos)
//函数功能:设置光标位置
//输入参数:
//Xpos:横坐标
//Ypos:纵坐标
//*******************************************************************/
void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos){	 LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(Xpos>>8); LCD_WR_DATA(Xpos&0XFF);	LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(Ypos>>8); LCD_WR_DATA(Ypos&0XFF);}

         通过调用 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);	}

三、主函数main运行

LCD_Init();           //初始化LCD SPI 接口POINT_COLOR =   RED;      //画笔颜色:红色
BACK_COLOR	=	GREEN;	  //字符背景颜色while(1){HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);Demo_Menu();		//演示程序	HAL_Delay(1000);	
}

四、完整代码下载

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10中使用ffmpeg和MediaMTX 推流rtsp视频

在win10上测试下ffmpeg推流rtsp视频,需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX ,其他客户端从流媒体服务器拉流。 步骤如下: 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub​​​​​…

银河麒麟v10 二进制kubeadm+containerd搭建k8s集群(证书100年)—— 筑梦之路

环境说明 银河麒麟v10 x86架构,cgroup v2启用 系统内核:5.4.x 源码编译安装 kubeadm 1.31.2 自编译二进制文件,证书有效期100年 containerd 版本:2.0.0 IPHostnameOS VersionKernel VersionComment192.168.10.100k8s-master…

网络安全-web架构-nginx配置

1. nginx访问: 访问的是index.html, 访问ip访问的资源就是在/usr/share/nginx/html中; 当nginx不认识,浏览器认识的话,浏览器会自动渲染。 当nginx认识,浏览器不认识的话,浏览器会把它加载成…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持! ⭐ 什么是深度学习? 人工智能、机器学习与…

使用Python 在Excel中创建和取消数据分组 - 详解

目录 使用工具 Python在Excel中创建行和列分组 Python在Excel中创建嵌套分组 Python获取Excel中的行和列的大纲级别 Python展开或折叠Excel中的分组 Python在Excel中创建分类汇总 Python取消Excel中的行和列分组 Excel中的分组是一种通过添加层级结构将相邻行或列组织在…

Chinese SimpleQA:包含3000个高质量问题,覆盖6个主要主题,每个主题下有99个细分主题,用来评估大型语言模型中文事实性能力的基准测试.

2024-11-12, 由阿里巴巴集团旗下的淘宝和天猫团队创建的Chinese SimpleQA数据集,是首个全面评估语言模型回答简短问题事实性能力的中文基准测试。该数据集的创建,为理解和提升大型语言模型在中文环境下的事实性回答能力提供了重要的工具和标准。 数据集…

Kafka 生产者优化与数据处理经验

Kafka:分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析:从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

go的依赖注入究竟是毒药还是解药

go的依赖注入究竟是毒药还是解药?有人说go使用依赖注入属于是被JAVA洗脑无法自拔。它和java的Spring注解机制非常相像。 依赖注入是一种设计模式,它允许将一个对象的依赖项(例如服务或组件)从外部注入,而不是在对象内…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare(金融数据库)入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

Ubuntu安装Electron环境

前言 Electron官方文档 要开发 Electron 应用,您需要安装 Node.js 运行环境和它的包管理器 npm。 我们推荐安装最新的长期支持 (LTS) 版本。 安装nvm node.js的版本管理工具 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash安…

【Python爬虫之:使用 Funboost 分布式函数调度爬取视频】

使用 Funboost 分布式函数调度爬取视频 1. 安装依赖2. 使用 Funboost 配置分布式爬虫创建 Funboost 配置文件配置爬虫任务保存视频和图片启动爬虫 3. 处理并存储数据4. 免责声明 1. 安装依赖 首先,我们需要安装一些必要的依赖。你可以使用 pip 来安装它们&#xff…

ftdi_sio应用学习笔记 4 - I2C

目录 1. 查找设备 2. 打开设备 3. 写数据 4. 读数据 5. 设置频率 6 验证 6.1 遍历设备 6.2 开关设备 6.3 读写测试 I2C设备最多有6个(FT232H),其他为2个。和之前的设备一样,定义个I2C结构体记录找到的设备。 #define FT…

04 - 尚硅谷 - MQTT 客户端编程

1.在Java中使用MQTT 1.1 Eclipse Paho Java Client 具体步骤&#xff1a; 1、创建一个Spring Boot项目&#xff0c;添加如下依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>…

shell第一次作业

要求&#xff1a; 通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 2.判断服务是否安装 ​ 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 ​ 没有安装&#xff1b;安装对应的软件包 3.测试 判断服务是…

1+X应急响应(网络)病毒与木马的处置:

病毒与木马的处置&#xff1a; 病毒与木马的简介&#xff1a; 病毒和木马的排查与恢复&#xff1a;

服务器数据恢复—热备盘未激活导致硬盘掉线的raid5阵列崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌X3850服务器中有一组由数块SAS硬盘组建的RAID5阵列&#xff0c;该阵列中有一块盘是热备盘。操作系统为linux redhat&#xff0c;上面跑着一个基于oracle数据库的oa。 服务器故障&#xff1a; 服务器raid5阵列中有一块硬盘离线&#xff0…

Eclipse 创建Dynamic web project项目-配置Tomcat服务器

1、new——>project: 2、选择web的 Dynamic web project项目: 3、 项目命名&#xff0c;选择new runtime(没有部署过web项目&#xff0c;一般tartget runtime选项里面是空的)&#xff1a; 4、完成1、2的路径选择&#xff1a; 5、完成两个选项操作后&#xff0c;点击finish &…

✅✅✅【Vue.js】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本

api.js //封装ajax方法 import $g from "../sg";//vue项目使用 import $ from jquery;//(提示&#xff1a;原生开发页面请前往https://jquery.com下载最新版jQuery) import { Message } from "element-ui";//element项目使用 // import axios from "…

理解折半查找法

理解折半查找法&#xff1a;高效的查找算法 折半查找法&#xff08;又称二分查找法&#xff09;是一种高效的查找算法&#xff0c;用于查找一个已排序数组中的目标元素。与线性查找方法不同&#xff0c;折半查找每次都将搜索范围减半&#xff0c;从而大幅提升查找效率。本文将详…

解决前端页面报错:Not allowed to load local resource

在前后端分离项目中&#xff0c;在前端页面里使用file://的绝对路径访问本地图片&#xff0c;在加载图片的 时候会报出Not allowed to load local resource 的错误。 这是因为浏览器出于安全因素&#xff0c;禁止通过绝对路径访问图片&#xff0c;需要通过虚拟路径进行访问。 …