STM32F407ZGT6驱动TFT屏ILI9341(硬件SPI)

硬件连接

我购买的是ili9341,2.8inch,带触摸
开发板是野火stm32f407霸天虎

LCD模块STM32单片机
VCCDC5V/3.3V
GNDGND
SDI(MOSI)PB5
SDO(MISO)PB4
LEDPB13
SCKPB3
DC/RSPB14
RSTPB12
CSPB15
触摸连接
T_IRQPB1
T_DOPB2
T_DINPF11
T_CSPC5
T_CLKPB0

初始化

本次使用的是硬件SPI1,对应的(MOSI)PB5,(MISO)PB4,SCK PB3,CS片选引脚可以自定义。

spi.c

#include "spi.h"/****************************************************************************** @name       :u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)* @date       :2018-08-09* @function   :Write a byte of data using STM32's hardware SPI* @parameters :SPIx: SPI type,x for 1,2,3Byte:Data to be written* @retvalue   :Data received by the bus
******************************************************************************/
u8 SPI_WriteByte(SPI_TypeDef *SPIx, u8 Byte)
{while ((SPIx->SR & SPI_I2S_FLAG_TXE) == RESET);			 // 等待发送区空SPIx->DR = Byte; // 发送一个bytewhile ((SPIx->SR & SPI_I2S_FLAG_RXNE) == RESET);			 // 等待接收完一个bytereturn SPIx->DR; // 返回收到的数据
}/****************************************************************************** @name       :void SPI_SetSpeed(SPI_TypeDef* SPIx,u8 SpeedSet)* @date       :2018-08-09* @function   :Set hardware SPI Speed* @parameters :SPIx: SPI type,x for 1,2,3SpeedSet:0-high speed1-low speed* @retvalue   :None
******************************************************************************/
void SPI_SetSpeed(SPI_TypeDef *SPIx, u8 SpeedSet)
{SPIx->CR1 &= 0XFFC7;if (SpeedSet == 1) // 高速{SPIx->CR1 |= SPI_BaudRatePrescaler_2; // Fsck=Fpclk/2}else // 低速{SPIx->CR1 |= SPI_BaudRatePrescaler_32; // Fsck=Fpclk/32}SPIx->CR1 |= 1 << 6; // SPI设备使能
}/****************************************************************************** @name       :void SPI1_Init(void)* @date       :2018-08-09* @function   :Initialize the STM32 hardware SPI1* @parameters :None* @retvalue   :None******************************************************************************/
void SPI1_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); // 使能GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);  // 使能SPI1时钟// GPIOFB3,4,5初始化设置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; // PB3~5复用功能输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;						// 复用功能GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;						// 推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;					// 100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;						// 上拉GPIO_Init(GPIOB, &GPIO_InitStructure);								// 初始化GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1); // PB3复用为 SPI1GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1); // PB4复用为 SPI1GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1); // PB5复用为 SPI1// 这里只针对SPI口初始化RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE);  // 复位SPI1RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE); // 停止复位SPI1SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // 设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工SPI_InitStructure.SPI_Mode = SPI_Mode_Master;					   // 设置SPI工作模式:设置为主SPISPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;				   // 设置SPI的数据大小:SPI发送接收8位帧结构SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;						   // 串行同步时钟的空闲状态为高电平SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;					   // 串行同步时钟的第二个跳变沿(上升或下降)数据被采样SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;						   // NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制// SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;		//定义波特率预分频的值:波特率预分频值为256SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // 指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始SPI_InitStructure.SPI_CRCPolynomial = 7;		   // CRC值计算的多项式SPI_Init(SPI1, &SPI_InitStructure);				   // 根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器SPI_Cmd(SPI1, ENABLE); // 使能SPI外设
}

spi.h

#include "sys.h"#ifndef _SPI_H_
#define _SPI_H_//本测试程序使用的是硬件SPI接口驱动
//除了SPI时钟信号以及SPI读、写信号引脚不可更改,其他引脚都可以更改
//SPI的时钟引脚定义固定为PB3
//SPI的读数据引脚定义固定为PB4
//SPI的写数据引脚定义固定为PB5u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte);
void SPI1_Init(void);
void SPI_SetSpeed(SPI_TypeDef* SPIx,u8 SpeedSet);#endif

TFT屏驱动

lcd.c

#include "lcd.h"
#include "stdlib.h"
#include "delay.h"
#include "spi.h"// 管理LCD重要参数
// 默认为竖屏
_lcd_dev lcddev;// 画笔颜色,背景颜色
u16 POINT_COLOR = 0x0000, BACK_COLOR = 0xFFFF;
u16 DeviceCode;/****************************************************************************** @name       :void LCD_WR_REG(u8 data)* @date       :2018-08-09* @function   :Write an 8-bit command to the LCD screen* @parameters :data:Command value to be written* @retvalue   :None******************************************************************************/
void LCD_WR_REG(u8 data)
{LCD_CS_CLR;LCD_RS_CLR;SPI_WriteByte(SPI1, data);LCD_CS_SET;
}/****************************************************************************** @name       :void LCD_WR_DATA(u8 data)* @date       :2018-08-09* @function   :Write an 8-bit data to the LCD screen* @parameters :data:data value to be written* @retvalue   :None******************************************************************************/
void LCD_WR_DATA(u8 data)
{LCD_CS_CLR;LCD_RS_SET;SPI_WriteByte(SPI1, data);LCD_CS_SET;
}/****************************************************************************** @name       :void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)* @date       :2018-08-09* @function   :Write data into registers* @parameters :LCD_Reg:Register addressLCD_RegValue:Data to be written* @retvalue   :None
******************************************************************************/
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{LCD_WR_REG(LCD_Reg);LCD_WR_DATA(LCD_RegValue);
}/****************************************************************************** @name       :void LCD_WriteRAM_Prepare(void)* @date       :2018-08-09* @function   :Write GRAM* @parameters :None* @retvalue   :None******************************************************************************/
void LCD_WriteRAM_Prepare(void)
{LCD_WR_REG(lcddev.wramcmd);
}/****************************************************************************** @name       :void Lcd_WriteData_16Bit(u16 Data)* @date       :2018-08-09* @function   :Write an 16-bit command to the LCD screen* @parameters :Data:Data to be written* @retvalue   :None******************************************************************************/
void Lcd_WriteData_16Bit(u16 Data)
{LCD_CS_CLR;LCD_RS_SET;SPI_WriteByte(SPI1, Data >> 8);SPI_WriteByte(SPI1, Data);LCD_CS_SET;
}/****************************************************************************** @name       :void LCD_DrawPoint(u16 x,u16 y)* @date       :2018-08-09* @function   :Write a pixel data at a specified location* @parameters :x:the x coordinate of the pixely:the y coordinate of the pixel* @retvalue   :None
******************************************************************************/
void LCD_DrawPoint(u16 x, u16 y)
{LCD_SetCursor(x, y); // 设置光标位置Lcd_WriteData_16Bit(POINT_COLOR);
}/****************************************************************************** @name       :void LCD_Clear(u16 Color)* @date       :2018-08-09* @function   :Full screen filled LCD screen* @parameters :color:Filled color* @retvalue   :None******************************************************************************/
void LCD_Clear(u16 Color)
{unsigned int i, m;LCD_SetWindows(0, 0, lcddev.width - 1, lcddev.height - 1);LCD_CS_CLR;LCD_RS_SET;for (i = 0; i < lcddev.height; i++){for (m = 0; m < lcddev.width; m++){Lcd_WriteData_16Bit(Color);}}LCD_CS_SET;
}/****************************************************************************** @name       :void LCD_Clear(u16 Color)* @date       :2018-08-09* @function   :Initialization LCD screen GPIO* @parameters :None* @retvalue   :None******************************************************************************/
void LCD_GPIOInit(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // 普通输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // 推挽输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;   // 上拉GPIO_Init(GPIOB, &GPIO_InitStructure);
}/****************************************************************************** @name       :void LCD_RESET(void)* @date       :2018-08-09* @function   :Reset LCD screen* @parameters :None* @retvalue   :None******************************************************************************/
void LCD_RESET(void)
{LCD_RST_CLR;delay_ms(100);LCD_RST_SET;delay_ms(50);
}/****************************************************************************** @name       :void LCD_RESET(void)* @date       :2018-08-09* @function   :Initialization LCD screen* @parameters :None* @retvalue   :None******************************************************************************/
void LCD_Init(void)
{SPI1_Init(); // 硬件SPI初始化//	SPI_SetSpeed(SPI1,SPI_BaudRatePrescaler_2);LCD_GPIOInit(); // LCD GPIO初始化LCD_RESET();	// LCD 复位//*************2.8inch ILI9341初始化**********//LCD_WR_REG(0xCF);LCD_WR_DATA(0x00);LCD_WR_DATA(0xC9); // C1LCD_WR_DATA(0X30);LCD_WR_REG(0xED);LCD_WR_DATA(0x64);LCD_WR_DATA(0x03);LCD_WR_DATA(0X12);LCD_WR_DATA(0X81);LCD_WR_REG(0xE8);LCD_WR_DATA(0x85);LCD_WR_DATA(0x10);LCD_WR_DATA(0x7A);LCD_WR_REG(0xCB);LCD_WR_DATA(0x39);LCD_WR_DATA(0x2C);LCD_WR_DATA(0x00);LCD_WR_DATA(0x34);LCD_WR_DATA(0x02);LCD_WR_REG(0xF7);LCD_WR_DATA(0x20);LCD_WR_REG(0xEA);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_REG(0xC0);  // Power controlLCD_WR_DATA(0x1B); // VRH[5:0]LCD_WR_REG(0xC1);  // Power controlLCD_WR_DATA(0x00); // SAP[2:0];BT[3:0] 01LCD_WR_REG(0xC5);  // VCM controlLCD_WR_DATA(0x30); // 3FLCD_WR_DATA(0x30); // 3CLCD_WR_REG(0xC7);  // VCM control2LCD_WR_DATA(0XB7);LCD_WR_REG(0x36); // Memory Access ControlLCD_WR_DATA(0x08);LCD_WR_REG(0x3A);LCD_WR_DATA(0x55);LCD_WR_REG(0xB1);LCD_WR_DATA(0x00);LCD_WR_DATA(0x1A);LCD_WR_REG(0xB6); // Display Function ControlLCD_WR_DATA(0x0A);LCD_WR_DATA(0xA2);LCD_WR_REG(0xF2); // 3Gamma Function DisableLCD_WR_DATA(0x00);LCD_WR_REG(0x26); // Gamma curve selectedLCD_WR_DATA(0x01);LCD_WR_REG(0xE0); // Set GammaLCD_WR_DATA(0x0F);LCD_WR_DATA(0x2A);LCD_WR_DATA(0x28);LCD_WR_DATA(0x08);LCD_WR_DATA(0x0E);LCD_WR_DATA(0x08);LCD_WR_DATA(0x54);LCD_WR_DATA(0XA9);LCD_WR_DATA(0x43);LCD_WR_DATA(0x0A);LCD_WR_DATA(0x0F);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_REG(0XE1); // Set GammaLCD_WR_DATA(0x00);LCD_WR_DATA(0x15);LCD_WR_DATA(0x17);LCD_WR_DATA(0x07);LCD_WR_DATA(0x11);LCD_WR_DATA(0x06);LCD_WR_DATA(0x2B);LCD_WR_DATA(0x56);LCD_WR_DATA(0x3C);LCD_WR_DATA(0x05);LCD_WR_DATA(0x10);LCD_WR_DATA(0x0F);LCD_WR_DATA(0x3F);LCD_WR_DATA(0x3F);LCD_WR_DATA(0x0F);LCD_WR_REG(0x2B);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0x01);LCD_WR_DATA(0x3f);LCD_WR_REG(0x2A);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0xef);LCD_WR_REG(0x11); // Exit Sleepdelay_ms(120);LCD_WR_REG(0x29); // display onLCD_direction(USE_HORIZONTAL); // 设置LCD显示方向LCD_LED = 1;				   // 点亮背光LCD_Clear(WHITE);			   // 清全屏白色
}/****************************************************************************** @name       :void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)* @date       :2018-08-09* @function   :Setting LCD display window* @parameters :xStar:the bebinning x coordinate of the LCD display windowyStar:the bebinning y coordinate of the LCD display windowxEnd:the endning x coordinate of the LCD display windowyEnd:the endning y coordinate of the LCD display window* @retvalue   :None
******************************************************************************/
void LCD_SetWindows(u16 xStar, u16 yStar, u16 xEnd, u16 yEnd)
{LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(xStar >> 8);LCD_WR_DATA(0x00FF & xStar);LCD_WR_DATA(xEnd >> 8);LCD_WR_DATA(0x00FF & xEnd);LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(yStar >> 8);LCD_WR_DATA(0x00FF & yStar);LCD_WR_DATA(yEnd >> 8);LCD_WR_DATA(0x00FF & yEnd);LCD_WriteRAM_Prepare(); // 开始写入GRAM
}/****************************************************************************** @name       :void LCD_SetCursor(u16 Xpos, u16 Ypos)* @date       :2018-08-09* @function   :Set coordinate value* @parameters :Xpos:the  x coordinate of the pixelYpos:the  y coordinate of the pixel* @retvalue   :None
******************************************************************************/
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{LCD_SetWindows(Xpos, Ypos, Xpos, Ypos);
}/****************************************************************************** @name       :void LCD_direction(u8 direction)* @date       :2018-08-09* @function   :Setting the display direction of LCD screen* @parameters :direction:0-0 degree1-90 degree2-180 degree3-270 degree* @retvalue   :None
******************************************************************************/
void LCD_direction(u8 direction)
{lcddev.setxcmd = 0x2A;lcddev.setycmd = 0x2B;lcddev.wramcmd = 0x2C;switch (direction){case 0:lcddev.width = LCD_W;lcddev.height = LCD_H;LCD_WriteReg(0x36, (1 << 3) | (0 << 6) | (0 << 7)); // BGR==1,MY==0,MX==0,MV==0break;case 1:lcddev.width = LCD_H;lcddev.height = LCD_W;LCD_WriteReg(0x36, (1 << 3) | (0 << 7) | (1 << 6) | (1 << 5)); // BGR==1,MY==1,MX==0,MV==1break;case 2:lcddev.width = LCD_W;lcddev.height = LCD_H;LCD_WriteReg(0x36, (1 << 3) | (1 << 6) | (1 << 7)); // BGR==1,MY==0,MX==0,MV==0break;case 3:lcddev.width = LCD_H;lcddev.height = LCD_W;LCD_WriteReg(0x36, (1 << 3) | (1 << 7) | (1 << 5)); // BGR==1,MY==1,MX==0,MV==1break;default:break;}
}

lcd.h

#ifndef __LCD_H
#define __LCD_H		
#include "sys.h"	 
#include "stdlib.h"//LCD重要参数集
typedef struct  
{										    u16 width;			//LCD 宽度u16 height;			//LCD 高度u16 id;				//LCD IDu8  dir;			//横屏还是竖屏控制:0,竖屏;1,横屏。	u16	 wramcmd;		//开始写gram指令u16  setxcmd;		//设置x坐标指令u16  setycmd;		//设置y坐标指令	 
}_lcd_dev; 	//LCD参数
extern _lcd_dev lcddev;	//管理LCD重要参数
/用户配置区///	 
#define USE_HORIZONTAL  	 0//定义液晶屏顺时针旋转方向 	0-0度旋转,1-90度旋转,2-180度旋转,3-270度旋转//	  
//定义LCD的尺寸
#define LCD_W 240
#define LCD_H 320//TFTLCD部分外要调用的函数		   
extern u16  POINT_COLOR;//默认红色    
extern u16  BACK_COLOR; //背景颜色.默认为白色
//-----------------LCD端口定义---------------- #define LED  13        //背光控制引脚
#define CS   15       //片选引脚
#define RS   14       //寄存器/数据选择引脚  
#define RST  12       //复位引脚//QDtech全系列模块采用了三极管控制背光亮灭,用户也可以接PWM调节背光亮度
#define	LCD_LED PBout(LED) //LCD背光    		 
#define LCD_CS  PBout(CS)
#define LCD_RS  PBout(RS)
#define LCD_RST PBout(RST)
//如果使用官方库函数定义下列底层,速度将会下降到14帧每秒,建议采用我司推荐方法
//以下IO定义直接操作寄存器,快速IO操作,刷屏速率可以达到28帧每秒! #define	LCD_CS_SET  LCD_CS=1 //GPIO_TYPE->BSRRL=1<<LCD_CS    //片选端口  	PB11
#define	LCD_RS_SET	LCD_RS=1 //GPIO_TYPE->BSRRL=1<<LCD_RS    //数据/命令  PB10	  
#define	LCD_RST_SET	LCD_RST=1 //GPIO_TYPE->BSRRL=1<<LCD_RST    //复位			PB12#define	LCD_CS_CLR  LCD_CS=0 //GPIO_TYPE->BSRRH=1<<LCD_CS     //片选端口  	PB11
#define	LCD_RS_CLR	LCD_RS=0 //GPIO_TYPE->BSRRH=1<<LCD_RS     //数据/命令  PB10	 
#define	LCD_RST_CLR	LCD_RST=0 //GPIO_TYPE->BSRRH=1<<LCD_RST    //复位			  PB12//画笔颜色
#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 //灰色
//GUI颜色#define DARKBLUE      	 0X01CF	//深蓝色
#define LIGHTBLUE      	 0X7D7C	//浅蓝色  
#define GRAYBLUE       	 0X5458 //灰蓝色
//以上三色为PANEL的颜色 #define LIGHTGREEN     	0X841F //浅绿色
#define LIGHTGRAY     0XEF5B //浅灰色(PANNEL)
#define LGRAY 			 		0XC618 //浅灰色(PANNEL),窗体背景色#define LGRAYBLUE      	0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE          0X2B12 //浅棕蓝色(选择条目的反色)void LCD_Init(void);
void LCD_DisplayOn(void);
void LCD_DisplayOff(void);
void LCD_Clear(u16 Color);	 
void LCD_SetCursor(u16 Xpos, u16 Ypos);
void LCD_DrawPoint(u16 x,u16 y);//画点
u16  LCD_ReadPoint(u16 x,u16 y); //读点
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2);
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2);		   
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd);u16 LCD_RD_DATA(void);//读取LCD数据									    
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue);
void LCD_WR_DATA(u8 data);
u16 LCD_ReadReg(u8 LCD_Reg);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(u16 RGB_Code);
u16 LCD_ReadRAM(void);		   
u16 LCD_BGR2RGB(u16 c);
void LCD_SetParam(void);
void Lcd_WriteData_16Bit(u16 Data);
void LCD_direction(u8 direction );//如果仍然觉得速度不够快,可以使用下面的宏定义,提高速度.
//注意要去掉lcd.c中void LCD_WR_DATA(u16 data)函数定义哦
/*
#if LCD_USE8BIT_MODEL==1//使用8位并行数据总线模式#define LCD_WR_DATA(data){\LCD_RS_SET;\LCD_CS_CLR;\DATAOUT(data);\LCD_WR_CLR;\LCD_WR_SET;\DATAOUT(data<<8);\LCD_WR_CLR;\LCD_WR_SET;\LCD_CS_SET;\}#else//使用16位并行数据总线模式#define LCD_WR_DATA(data){\LCD_RS_SET;\LCD_CS_CLR;\DATAOUT(data);\LCD_WR_CLR;\LCD_WR_SET;\LCD_CS_SET;\} 	
#endif
*/#endif  

剩下的文件资源太多打包发成资源

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

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

相关文章

Bootstrap 缩略图

Bootstrap 缩略图 引言 Bootstrap 是一个流行的前端框架,它提供了一套丰富的组件和工具,帮助开发者快速构建响应式和移动优先的网页。缩略图(Thumbnails)是 Bootstrap 中的一种组件,用于展示图片或其他媒体内容,通常与标题和文本描述一起使用,形成一个整洁的布局。本文…

新版MinIO安装,附带问题处理和SSL设置(巨详细)

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 下面开始&#xff1a; 前往官网下载需要的二进制文件 wget https://dl.min.io/server/minio/release/linux-am…

element ui中的scss语法理解

摘录至 导读 首先来看一个bem命名示例 .el-message-box{} .el-message-box__header{} .el-message-box__header--active{}如果使用已经封装好的bem方法的话&#xff0c;那么可以写成 include b(message-box) {include e(header) {include m(active);} }接下来我们来看一下b…

【FPGA】Verilog:全减器与半减器 | Full Subtractor | Half Subtractor

0x00 全减器(Full Subtractor) 减法器是用于减法运算的逻辑电路,与不包含借位的半减法器不同。 全减法器因为包含借位的产生与否,所以具备完整的减法功能。 输出由差 和借位 组成:

JUC基础学习

1.Java JUC简介 2.volatile关键字-内存可见性 3.原子变量-CAS算法 4.ConcurrentHashMap锁分段机制

什么是滴答定时器?

滴答定时器&#xff08;Tick Timer&#xff09;是一种关键的硬件组件&#xff0c;用于生成固定时间间隔的信号。这些信号通常称为“滴答”&#xff08;tick&#xff09;&#xff0c;是操作系统和应用程序的时间管理基础。滴答定时器的应用范围广泛&#xff0c;从简单的定时任务…

Java中的数据加密与安全传输

Java中的数据加密与安全传输 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨一下在Java中如何实现数据加密与安全传输。 随着互联网的普及和网络…

C++学习/复习18----迭代器/反向迭代器及在list/vector中的应用、list与vector模拟实现复习

迭代器是一个对象&#xff0c;可以循环访问 C 标准库容器中的元素&#xff0c;并提供对各个元素的访问。 C 标准库容器全都提供迭代器&#xff0c;以便算法可以采用标准方式访问其元素&#xff0c;而不必考虑用于存储元素的容器类型。 一、反向迭代器类 基于普通迭代器构建反…

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用 使用gitlab的CI/CD实现logseq笔记自动发布为单页应用如何实现将logseq的笔记发布成网站使用 logseq-publish-docker 实现手动发布使用gitlab的CI/CD实现自动发布过程中的问题及解决参考资料 使用gitlab的CI/CD实现logseq笔记…

[AIGC] 常用的OLAP数据库:为数据分析提供强大的支持

导语&#xff1a;在大数据时代&#xff0c;数据分析成为了企业决策的重要依据。为了高效地处理和分析海量的数据&#xff0c;OLAP数据库应运而生。本文将介绍几种常用的OLAP数据库&#xff0c;为数据分析提供强大的支持。 一、Snowflake Snowflake是一种云原生的OLAP数据库&a…

win10和mac之间如何共享文件夹

我用的mac版本是 macOS Ventura &#xff0c;其他版本的操作可能略有不同 在 macOS Ventura 上设置共享文件夹 打开“系统设置”&#xff1a;点击屏幕左上角的苹果菜单 () > 系统设置。选择“通用”&#xff1a;在左侧边栏中找到并点击“通用”。选择“共享”&#xff1…

第二届重庆国际渔业博览会

The 2th Chongqing International Fisheries & Seafood Expo 时间&#xff1a;2024年10月25-27日 地点&#xff1a;重庆国际博览中心 同期举办&#xff1a;第十六届中国(重庆)火锅美食文化节暨第九届中国(重庆)国际火锅产业博览会 展会规模&#xff1a; 展出…

利用Java的`java.util.concurrent`包优化多线程性能

利用Java的java.util.concurrent包优化多线程性能 一、引言 在Java的多线程编程中&#xff0c;性能优化是一个永恒的话题。随着多核CPU的普及和计算任务的日益复杂&#xff0c;多线程编程已经成为提高应用程序性能的重要手段。然而&#xff0c;多线程编程也带来了一系列的问题…

(论文版)深度学习 | 基于 VGG16-UNet 语义分割模型的猫狗图像提取研究

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本实验本项目基于 VGG16-UNet 架构&#xff0c;利用 Labelme 标注数据和迁移学习&#xff0c;构建高效准确的猫狗图像分割模型。通过编码器-解码器结构&#xff08;特征提取-上采样&#xff09;提升分割精度&#xff0c;适应不同…

VBA数据库解决方案第十二讲:如何判断数据库中数据表是否存在

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

第11章 规划过程组(11.6规划进度管理)

第11章 规划过程组&#xff08;二&#xff09;11.6规划进度管理&#xff0c;在第三版教材第385页&#xff1b;#软考中级##中级系统集成项目管理师# 文字图片音频方式 第一个知识点&#xff1a;主要输出 1、进度管理计划 准确度 定义活动持续时间估算的可接受区间&#xff0…

第二周:计算机网络概述(下)

一、计算机网络性能指标&#xff08;速率、带宽、延迟&#xff09; 1、速率 2、带宽 3、延迟/时延 前面讲分组交换的时候介绍了&#xff0c;有一种延迟叫“传输延迟”&#xff0c;即发送一个报文&#xff0c;从第一个分组的发送&#xff0c;到最后一个分组的发送完成的这段时…

机器学习算法 —— 决策树

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 目录 背景描述数据说明数据来源决策树的介绍和应用决策树的介绍决策树的优点决策树的缺点决策树的应用实战演示导入模块训练模型数据和模型可视化(需要用到graphviz可视化库)模型预测基于pengui…

[Spring Boot]Rest服务调用远程Post请求

文章目录 pomconfig类业务类-Post方法调用 pom <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version> </dependency> <dependency><groupId>…

医疗AI革命,为何多模态大模型难以突破?

在人工智能的浪潮中&#xff0c;多模态大模型以其强大的数据处理能力和深度学习算法&#xff0c;被寄予厚望于医疗影像分析、辅助诊断等领域。然而&#xff0c;现实情况却远非如此乐观。本文将带您深入了解多模态大模型在医疗辅助诊断领域的潜力与局限&#xff0c;揭示其面临的…