STM32实现1.8寸液晶屏 LCD SPI串口显示屏模块 TFT彩屏(标准库和HAL库实现)

目录

一、所选模块

液晶模块选择(淘宝上均有售卖)

模块引脚

二、嵌入式单片机型号

三、接线表设计

四、开发环境版本说明

五、标准库实现

六、HAL库实现

七、完整工程(内含标准库和HAL库源码)

代码链接


一、所选模块

液晶模块选择(淘宝上均有售卖)

1.8寸液晶屏 LCD SPI串口显示屏模块 TFT彩屏

模块引脚

二、嵌入式单片机型号

本博客选用的单片机型号:STM32F103C8T6

该款单片机应用就多,相对性价比较高。

三、接线表设计

由于液晶模块采用的是SPI通信,但这里均使用模拟SPI的方式进行通信,实现液晶显示(后面博客会使用STM32自带的SPI功能实现数据传输)。

TFT真彩屏 液晶模块STM32F103C8T6
GND电源地
VCC接5V或3.3v电源
SCLPA6(SCL)
SDAPA7(SDA)
RESPB0
DCPB1
CSPB10 
BLPB11

因为液晶模块主要用于显示功能,而且是模拟SPI通信,这里的所以的IO口均设置成推挽输出模式。引脚接线是依据需要修改的,但需要大家修改完全,不然不能成功。

四、开发环境版本说明

标准库的开发环境:

HAL库开发环境:

STMCUBEMX、KEIL5

五、标准库实现

由于工程文件较多,只给出部分核心代码,供大家参考,博文最后会有全套代码给大家。

main.c

#include "stm32f10x.h"
#include "delay.h"
#include "QDTFT_demo.h"
#include "Lcd_Driver.h"
#include "GUI.h"
#include "stdio.h"
#include "string.h"int main(void)
{SystemInit();	//System init.delay_init(72);//Delay init.Lcd_Init();LCD_BL_SET;//通过IO控制背光亮		while(1){  		QDTFT_Test_Demo();}}

Lcd_Driver.c

//	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//中景园电子
//店铺地址:http://shop73023976.taobao.com/?spm=2013.1.0.0.M4PqC2
//
//  文 件 名   : main.c
//  版 本 号   : v2.0
//  作    者   : HuangKai
//  生成日期   : 2014-0101
//  最近修改   : 
//  功能描述   : 1.8寸LCD 4接口演示例程(STM32系列)
/******************************************************************************
//本程序适用与STM32F103C8
//              GND   电源地
//              VCC   接5V或3.3v电源
//              SCL   接PA6(SCL)
//              SDA   接PA7(SDA)
//              RES   接PB0
//              DC    接PB1
//              CS    接PB10 
//							BL		接PB11
*******************************************************************************/
// 修改历史   :
// 日    期   : 
// 作    者   : HuangKai
// 修改内容   : 创建文件
//版权所有,盗版必究。
//Copyright(C) 中景园电子2014/3/16
//All rights reserved
//******************************************************************************/#include "stm32f10x.h"
#include "Lcd_Driver.h"
#include "LCD_Config.h"
#include "delay.h"//液晶IO初始化配置
void LCD_GPIO_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB ,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_10| GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA ,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6| GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);
}
//向SPI总线传输一个8位数据
void  SPI_WriteData(u8 Data)
{unsigned char i=0;for(i=8;i>0;i--){if(Data&0x80)	LCD_SDA_SET; //输出数据else LCD_SDA_CLR;LCD_SCL_CLR;       LCD_SCL_SET;Data<<=1; }
}//向液晶屏写一个8位指令
void Lcd_WriteIndex(u8 Index)
{//SPI 写命令时序开始LCD_CS_CLR;LCD_DC_CLR;SPI_WriteData(Index);LCD_CS_SET;
}//向液晶屏写一个8位数据
void Lcd_WriteData(u8 Data)
{LCD_CS_CLR;LCD_DC_SET;SPI_WriteData(Data);LCD_CS_SET; 
}
//向液晶屏写一个16位数据
void LCD_WriteData_16Bit(u16 Data)
{LCD_CS_CLR;LCD_DC_SET;SPI_WriteData(Data>>8); 	//写入高8位数据SPI_WriteData(Data); 			//写入低8位数据LCD_CS_SET; 
}void Lcd_WriteReg(u8 Index,u8 Data)
{Lcd_WriteIndex(Index);Lcd_WriteData(Data);
}void Lcd_Reset(void)
{LCD_RST_CLR;delay_ms(100);LCD_RST_SET;delay_ms(50);
}//LCD Init For 1.44Inch LCD Panel with ST7735R.
void Lcd_Init(void)
{	LCD_GPIO_Init();Lcd_Reset(); //Reset before LCD Init.//LCD Init For 1.44Inch LCD Panel with ST7735R.Lcd_WriteIndex(0x11);//Sleep exit delay_ms (120);//ST7735R Frame RateLcd_WriteIndex(0xB1); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteIndex(0xB2); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteIndex(0xB3); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteIndex(0xB4); //Column inversion Lcd_WriteData(0x07); //ST7735R Power SequenceLcd_WriteIndex(0xC0); Lcd_WriteData(0xA2); Lcd_WriteData(0x02); Lcd_WriteData(0x84); Lcd_WriteIndex(0xC1); Lcd_WriteData(0xC5); Lcd_WriteIndex(0xC2); Lcd_WriteData(0x0A); Lcd_WriteData(0x00); Lcd_WriteIndex(0xC3); Lcd_WriteData(0x8A); Lcd_WriteData(0x2A); Lcd_WriteIndex(0xC4); Lcd_WriteData(0x8A); Lcd_WriteData(0xEE); Lcd_WriteIndex(0xC5); //VCOM Lcd_WriteData(0x0E); Lcd_WriteIndex(0x36); //MX, MY, RGB mode Lcd_WriteData(0xC0); //ST7735R Gamma SequenceLcd_WriteIndex(0xe0); Lcd_WriteData(0x0f); Lcd_WriteData(0x1a); Lcd_WriteData(0x0f); Lcd_WriteData(0x18); Lcd_WriteData(0x2f); Lcd_WriteData(0x28); Lcd_WriteData(0x20); Lcd_WriteData(0x22); Lcd_WriteData(0x1f); Lcd_WriteData(0x1b); Lcd_WriteData(0x23); Lcd_WriteData(0x37); Lcd_WriteData(0x00); 	Lcd_WriteData(0x07); Lcd_WriteData(0x02); Lcd_WriteData(0x10); Lcd_WriteIndex(0xe1); Lcd_WriteData(0x0f); Lcd_WriteData(0x1b); Lcd_WriteData(0x0f); Lcd_WriteData(0x17); Lcd_WriteData(0x33); Lcd_WriteData(0x2c); Lcd_WriteData(0x29); Lcd_WriteData(0x2e); Lcd_WriteData(0x30); Lcd_WriteData(0x30); Lcd_WriteData(0x39); Lcd_WriteData(0x3f); Lcd_WriteData(0x00); Lcd_WriteData(0x07); Lcd_WriteData(0x03); Lcd_WriteData(0x10);  Lcd_WriteIndex(0x2a);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x7f);Lcd_WriteIndex(0x2b);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x9f);Lcd_WriteIndex(0xF0); //Enable test command  Lcd_WriteData(0x01); Lcd_WriteIndex(0xF6); //Disable ram power save mode Lcd_WriteData(0x00); Lcd_WriteIndex(0x3A); //65k mode Lcd_WriteData(0x05); Lcd_WriteIndex(0x29);//Display on	 
}/*************************************************
函数名:LCD_Set_Region
功能:设置lcd显示区域,在此区域写点数据自动换行
入口参数:xy起点和终点
返回值:无
*************************************************/
void Lcd_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end)
{		Lcd_WriteIndex(0x2a);Lcd_WriteData(0x00);Lcd_WriteData(x_start+2);Lcd_WriteData(0x00);Lcd_WriteData(x_end+2);Lcd_WriteIndex(0x2b);Lcd_WriteData(0x00);Lcd_WriteData(y_start+1);Lcd_WriteData(0x00);Lcd_WriteData(y_end+1);Lcd_WriteIndex(0x2c);}/*************************************************
函数名:LCD_Set_XY
功能:设置lcd显示起始点
入口参数:xy坐标
返回值:无
*************************************************/
void Lcd_SetXY(u16 x,u16 y)
{Lcd_SetRegion(x,y,x,y);
}/*************************************************
函数名:LCD_DrawPoint
功能:画一个点
入口参数:无
返回值:无
*************************************************/
void Gui_DrawPoint(u16 x,u16 y,u16 Data)
{Lcd_SetRegion(x,y,x+1,y+1);LCD_WriteData_16Bit(Data);}    /*****************************************函数功能:读TFT某一点的颜色                          出口参数:color  点颜色值                                 
******************************************/
unsigned int Lcd_ReadPoint(u16 x,u16 y)
{unsigned int Data;Lcd_SetXY(x,y);//Lcd_ReadData();//丢掉无用字节//Data=Lcd_ReadData();Lcd_WriteData(Data);return Data;
}
/*************************************************
函数名:Lcd_Clear
功能:全屏清屏函数
入口参数:填充颜色COLOR
返回值:无
*************************************************/
void Lcd_Clear(u16 Color)               
{	unsigned int i,m;Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);Lcd_WriteIndex(0x2C);for(i=0;i<X_MAX_PIXEL;i++){for(m=0;m<Y_MAX_PIXEL;m++){	LCD_WriteData_16Bit(Color);}  }	
}

实现效果:

六、HAL库实现

CubeMX配置引脚为output,然后修改别名,如下:

时钟配置为32MHz,其它其实也可以,无所谓的。

main.c

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 */Lcd_Init();HAL_GPIO_WritePin(GPIOB, BL_Pin, GPIO_PIN_SET);//通过IO控制背光亮		/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */QDTFT_Test_Demo();}/* USER CODE END 3 */
}

lcddriver.c


#include "main.h"#define X_MAX_PIXEL	        128
#define Y_MAX_PIXEL	        160//向SPI总线传输一个8位数据
void  SPI_WriteData(uint8_t Data)
{unsigned char i=0;for(i=8;i>0;i--){if(Data&0x80)	HAL_GPIO_WritePin(GPIOA, SDA_Pin, GPIO_PIN_SET);	//输出数据else HAL_GPIO_WritePin(GPIOA, SDA_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, SCL_Pin, GPIO_PIN_RESET);		HAL_GPIO_WritePin(GPIOA, SCL_Pin, GPIO_PIN_SET);Data<<=1; }
}//向液晶屏写一个8位指令
void Lcd_WriteIndex(uint8_t Index)
{//SPI 写命令时序开始HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_RESET);SPI_WriteData(Index);   HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
}//向液晶屏写一个8位数据
void Lcd_WriteData(uint8_t Data)
{HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET);SPI_WriteData(Data);HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
}//向液晶屏写一个16位数据
void LCD_WriteData_16Bit(uint16_t Data)
{uint8_t temp = (uint8_t)(Data>>8);HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET);SPI_WriteData(temp);	//写入高8位数据temp = (uint8_t)(Data);SPI_WriteData(temp);	//写入低8位数据HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); 
}void Lcd_WriteReg(uint8_t Index,uint8_t Data)
{Lcd_WriteIndex(Index);Lcd_WriteData(Data);
}void Lcd_Reset(void)
{HAL_GPIO_WritePin(RES_GPIO_Port, RES_Pin, GPIO_PIN_RESET);HAL_Delay(100);HAL_GPIO_WritePin(RES_GPIO_Port, RES_Pin, GPIO_PIN_SET);HAL_Delay(50);
}//LCD Init For 1.44Inch LCD Panel with ST7735R.
void Lcd_Init(void)
{	Lcd_Reset(); //Reset before LCD Init.//LCD Init For 1.44Inch LCD Panel with ST7735R.Lcd_WriteIndex(0x11);//Sleep exit HAL_Delay(120);//ST7735R Frame RateLcd_WriteIndex(0xB1); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteIndex(0xB2); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteIndex(0xB3); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteIndex(0xB4); //Column inversion Lcd_WriteData(0x07); //ST7735R Power SequenceLcd_WriteIndex(0xC0); Lcd_WriteData(0xA2); Lcd_WriteData(0x02); Lcd_WriteData(0x84); Lcd_WriteIndex(0xC1); Lcd_WriteData(0xC5); Lcd_WriteIndex(0xC2); Lcd_WriteData(0x0A); Lcd_WriteData(0x00); Lcd_WriteIndex(0xC3); Lcd_WriteData(0x8A); Lcd_WriteData(0x2A); Lcd_WriteIndex(0xC4); Lcd_WriteData(0x8A); Lcd_WriteData(0xEE); Lcd_WriteIndex(0xC5); //VCOM Lcd_WriteData(0x0E); Lcd_WriteIndex(0x36); //MX, MY, RGB mode Lcd_WriteData(0xC0); //ST7735R Gamma SequenceLcd_WriteIndex(0xe0); Lcd_WriteData(0x0f); Lcd_WriteData(0x1a); Lcd_WriteData(0x0f); Lcd_WriteData(0x18); Lcd_WriteData(0x2f); Lcd_WriteData(0x28); Lcd_WriteData(0x20); Lcd_WriteData(0x22); Lcd_WriteData(0x1f); Lcd_WriteData(0x1b); Lcd_WriteData(0x23); Lcd_WriteData(0x37); Lcd_WriteData(0x00); 	Lcd_WriteData(0x07); Lcd_WriteData(0x02); Lcd_WriteData(0x10); Lcd_WriteIndex(0xe1); Lcd_WriteData(0x0f); Lcd_WriteData(0x1b); Lcd_WriteData(0x0f); Lcd_WriteData(0x17); Lcd_WriteData(0x33); Lcd_WriteData(0x2c); Lcd_WriteData(0x29); Lcd_WriteData(0x2e); Lcd_WriteData(0x30); Lcd_WriteData(0x30); Lcd_WriteData(0x39); Lcd_WriteData(0x3f); Lcd_WriteData(0x00); Lcd_WriteData(0x07); Lcd_WriteData(0x03); Lcd_WriteData(0x10);  Lcd_WriteIndex(0x2a);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x7f);Lcd_WriteIndex(0x2b);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x9f);Lcd_WriteIndex(0xF0); //Enable test command  Lcd_WriteData(0x01); Lcd_WriteIndex(0xF6); //Disable ram power save mode Lcd_WriteData(0x00); Lcd_WriteIndex(0x3A); //65k mode Lcd_WriteData(0x05); Lcd_WriteIndex(0x29);//Display on	 
}/*************************************************
函数名:LCD_Set_Region
功能:设置lcd显示区域,在此区域写点数据自动换行
入口参数:xy起点和终点
返回值:无
*************************************************/
void Lcd_SetRegion(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end)
{		Lcd_WriteIndex(0x2a);Lcd_WriteData(0x00);Lcd_WriteData(x_start+2);Lcd_WriteData(0x00);Lcd_WriteData(x_end+2);Lcd_WriteIndex(0x2b);Lcd_WriteData(0x00);Lcd_WriteData(y_start+1);Lcd_WriteData(0x00);Lcd_WriteData(y_end+1);Lcd_WriteIndex(0x2c);}/*************************************************
函数名:LCD_Set_XY
功能:设置lcd显示起始点
入口参数:xy坐标
返回值:无
*************************************************/
void Lcd_SetXY(uint16_t x,uint16_t y)
{Lcd_SetRegion(x,y,x,y);
}/*************************************************
函数名:LCD_DrawPoint
功能:画一个点
入口参数:无
返回值:无
*************************************************/
void Gui_DrawPoint(uint16_t x,uint16_t y,uint16_t Data)
{Lcd_SetRegion(x,y,x+1,y+1);LCD_WriteData_16Bit(Data);}    /*****************************************函数功能:读TFT某一点的颜色                          出口参数:color  点颜色值                                 
******************************************/
unsigned int Lcd_ReadPoint(uint16_t x,uint16_t y)
{unsigned int Data;Lcd_SetXY(x,y);//Lcd_ReadData();//丢掉无用字节//Data=Lcd_ReadData();Lcd_WriteData(Data);return Data;
}
/*************************************************
函数名:Lcd_Clear
功能:全屏清屏函数
入口参数:填充颜色COLOR
返回值:无
*************************************************/
void Lcd_Clear(uint16_t Color)               
{	unsigned int i,m;Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);Lcd_WriteIndex(0x2C);for(i=0;i<X_MAX_PIXEL;i++)for(m=0;m<Y_MAX_PIXEL;m++){	LCD_WriteData_16Bit(Color);}   
}

实现效果:

实现效果与标准库实现效果一致。

七、完整工程(内含标准库和HAL库源码)

代码链接

STM32实现1.8寸液晶屏LCDSPI串口显示屏模块TFT彩屏(标准库和HAL库实现)资源-CSDN文库

吾芯电子

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

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

相关文章

pycharm如何对for循环中第n次循序执行断点

目录 在 PyCharm 中&#xff0c;您可以设置条件断点来实现这个功能&#xff0c;这样只有在满足特定条件时断点才会被触发。以下是设置仅在 for 循环的第 n 次迭代时触发断点的步骤&#xff1a; 设置断点&#xff1a; 首先&#xff0c;找到您想要在 for 循环中设置断点的行。点击…

《应用现代化技术能力成熟度评估模型》介绍

在中国软件行业协会、应用现代化产业联盟以及中国电子技术标准化研究院的指导下&#xff0c;产业多家企业共同支持和参与下&#xff0c;完成的《应用现代化技术能力成熟度评估模型》标准。该标准从应用敏捷、稳定可靠、安全可信、业务智能、成本优化五大维度及22个能力项来评估…

计算机网络学习记录 网络的大概认识 Day1

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 计算机网络学习记录Day1 本文基于1.1 计算机网络在信息…

Highcharts 实现3D饼图 tooltip轮播

实现3D饼图&#xff0c;并且轮播显示tooltip 自定义toottip样式 import Highcharts from highcharts; import highcharts from highcharts; import highcharts3d from highcharts/highcharts-3d;highcharts3d(Highcharts); highcharts3d(highcharts); import { useEffect, use…

2024 VMware VCP一条龙通关-送题库

VMware VCP-DCV 2024&#xff08;2V0-21.23&#xff09;认证考试&#xff0c;2024年可高分通过。 1.5. An administrator has a host profile named Standard-Config. The administrator wants to change the other host profiles to use only the storage configuration setti…

自定义付费报名表单系统源码 带完整的安装代码包以及安装代码包搭建部署教程

在当今数字化时代&#xff0c;各种在线服务需求日益增长&#xff0c;其中&#xff0c;自定义付费报名表单系统成为了许多机构、组织和企业不可或缺的一部分。为了满足这一市场需求&#xff0c;小编给大家分享一款功能强大、易于部署的自定义付费报名表单系统源码。本文将为您详…

Python嵌套绘图并为条形图添加自定义标注

论文绘图时经常需要多图嵌套&#xff0c;正好最近绘图用到了&#xff0c;记录一下使用Python实现多图嵌套的过程。 首先&#xff0c;实现 Seaborn 分别绘制折线图和柱状图。 绘制折线图import seaborn as snsimport matplotlib.pyplot as pltimport warningswarnings.filterw…

STM32CubeMX学习笔记30---FreeRTOS内存管理

一、简介 1 基本概念 FreeRTOS 操作系统将内核与内存管理分开实现&#xff0c;操作系统内核仅规定了必要的内存管理函数原型&#xff0c;而不关心这些内存管理函数是如何实现的&#xff0c;所以在 FreeRTOS 中提供了多种内存分配算法&#xff08;分配策略&#xff09;&#xf…

《二十二》Qt 音频编程实战---做一个音频播放器

1.UI界面制作 作为一个音乐播放器&#xff0c;最基础的肯定就是播放、暂停、上一首以及下一首&#xff0c;为了使这个界面好看一点&#xff0c;还加入了音量控制、进度条、歌曲列表等内容&#xff0c;至于这种配色和效果好不好看&#xff0c;我也不知道&#xff0c;个人审美一如…

智启未来:富唯智能AI-ICDP引领的可重构柔性装配产线

在全球制造业竞争日益激烈的今天&#xff0c;如何快速响应市场变化、提高生产效率、降低生产成本&#xff0c;成为了企业面临的重要挑战。随着产品个性化时代的到来&#xff0c;装配产品频繁变换&#xff0c;多品种小批量的生产模式逐渐成为主流。在这一背景下&#xff0c;富唯…

python 前台页面和oracle数据库联动案例-用户注册

今天是python 入门day3&#xff0c;案例实现界面如图&#xff0c;比较简单&#xff0c; 一个简单的用户注册页面&#xff0c;并且可以与Oracle数据库进行交互。 界面如图&#xff1a; 实现这个简单demo的过程中&#xff0c;遇到很多错误&#xff0c; 1、提交过程中提示主键不…

照片文件夹惊变白板?揭秘背后的原因及恢复秘籍

我们生活在一个数字化时代&#xff0c;照片已经成为记录生活的重要方式。然而&#xff0c;当你兴冲冲地打开保存珍贵记忆的文件夹时&#xff0c;却发现里面的照片全都变成了白板&#xff0c;这种心情无异于晴天霹雳。那么&#xff0c;这究竟是怎么回事呢&#xff1f; 照片文件夹…

【记录】常见的前端设计系统(Design System)

解释一下设计系统的定义&#xff0c;以及在国内&#xff0c;都有那些优秀的设计系统可以学习&#xff0c;希望可以帮到大家。 什么是设计系统&#xff08;Design System)&#xff1f; 设计系统&#xff08;Design System&#xff09;是一套综合性的指导原则、组件和规则&…

Mysql8.0.30一次表锁问题的解决

起因 给material_config_field_data表的字段建立全文索引的时&#xff0c;发现该表卡死&#xff0c;然后无法对该表进行任何操作。 查找问题 执行sql #这个命令会显示InnoDB存储引擎的详细状态信息&#xff0c;包括锁等待和锁争用的信息 SHOW ENGINE INNODB STATUS结果 复制S…

语言基础 /CC++ 可变参函数设计与实践,变参函数的实现、使用、替代方法

文章目录 概述适用于做可变参数的数据类型格式化字符串输出用int做变长参数类型用结构体指针做变长参数类型用double做变长参数类型用结构体直接做变长参数类型 变参函数与宏定义符号 ... 不能透传符号 ... 不接受ap做参数_VA_ARGS_ 代表可变参数 回调可变参数函数取代变参函数…

Linux 第二十四章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

vue3.0(五) reactive全家桶

文章目录 1 reactive1.1 reactive的应用1.2 reactive的特点1.3 reactive的注意1.4 reactive的局限性 2 toRefs3 isReactive4 shallowReactive5 readonly5.1 readonly 详细信息5.2 readonly函数创建一个只读的响应式对象5.3 如何修改嵌套在只读响应式对象中的对象? 6 isReadonl…

小程序(三)

十三、自定义组件 &#xff08;二&#xff09;数据方法声明位置 在js文件中 A、数据声明位置&#xff1a;data中 B、方法声明位置methods中&#xff0c;这点和普通页面不同&#xff01; Component({/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {isCh…

在RK3588开发板使用FFMpeg 结合云服务器加SRS实现摄像头数据推流到云端拱其他设备查看

今天测试了一把在开发板把摄像头数据推流到云端服务器&#xff0c;然后给其他电脑通过val软件拉取显示摄像头画面&#xff0c;浅浅记录一下大概步骤 1.开发板端先下载ffmpeg apt install ffmpeg2.云服务器先安装SRS的库 云服务器我使用ubuntu系统&#xff0c;SRS是个什么东西&…

怎么开发付费视频系统_轻松拥有知识付费平台

在信息爆炸的时代&#xff0c;我们每天都在被海量的内容所包围。但你有没有想过&#xff0c;如何将这些内容变得更加有价值&#xff0c;更加个性化&#xff0c;甚至能够为你带来经济收益&#xff1f;今天&#xff0c;就让我带你走进一个全新的领域——付费视频系统&#xff0c;…