【STM32项目设计】STM32F411健康助手--硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏(1)

news2024/11/15 4:43:24

#include "lcd_driver.h"

static uint16_t SPI_TIMEOUT_UserCallback(uint8_t errorCode);

//液晶IO初始化配置
void LCD_Driver_Init(void)
{

	SPI_InitTypeDef  SPI_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;

	/* 使能 LCD_SPI 及GPIO 时钟 */
	/*!< SPI_LCD_SPI_CS_GPIO, SPI_LCD_SPI_MOSI_GPIO, 
	   SPI_LCD_SPI_MISO_GPIO,SPI_LCD_SPI_SCK_GPIO 时钟使能 */
	RCC_AHB1PeriphClockCmd (LCD_SPI_SCK_GPIO_CLK|LCD_SPI_MOSI_GPIO_CLK|LCD_CS_GPIO_CLK, ENABLE);

	/*!< SPI_LCD_SPI 时钟使能 */
	LCD_SPI_CLK_INIT(LCD_SPI_CLK, ENABLE);

	//设置引脚复用
	GPIO_PinAFConfig(LCD_SPI_SCK_GPIO_PORT,LCD_SPI_SCK_PINSOURCE,LCD_SPI_SCK_AF);  
	GPIO_PinAFConfig(LCD_SPI_MOSI_GPIO_PORT,LCD_SPI_MOSI_PINSOURCE,LCD_SPI_MOSI_AF); 
	GPIO_PinAFConfig(LCD_CS_GPIO_PORT,LCD_SPI_CS_PINSOURCE,LCD_SPI_CS_AF); 
	
	/*!< 配置 SPI_LCD_SPI 引脚: SCK */
	GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  

	GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);

	/*!< 配置 SPI_LCD_SPI 引脚: MOSI */
	GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;
	GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);  

	/*!< 配置 SPI_LCD_SPI 引脚: CS */
	GPIO_InitStructure.GPIO_Pin = LCD_CS_PIN;
	GPIO_Init(LCD_CS_GPIO_PORT, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = LCD_DC_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_Init(LCD_DC_GPIO_PORT, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = LCD_RES_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_Init(LCD_RES_GPIO_PORT, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = LCD_BLK_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_Init(LCD_BLK_GPIO_PORT, &GPIO_InitStructure);
	
	/* 停止信号 LCD: CS引脚高电平*/
	//SPI_LCD_CS_HIGH();

	/* LCD_SPI 模式配置 */
	// LCD芯片 支持SPI模式0及模式3,据此设置CPOL CPHA
	SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
	SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
	SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
	SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
	SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
	SPI_InitStructure.SPI_CRCPolynomial = 7;
	SPI_Init(LCD_SPI, &SPI_InitStructure);

	/* 使能 LCD_SPI  */
	SPI_Cmd(LCD_SPI, ENABLE);
	
	SPI_SSOutputCmd(LCD_SPI,ENABLE);
	SPI_CalculateCRC(LCD_SPI,DISABLE);
	SPI_ClearFlag(LCD_SPI,SPI_FLAG_TXE);
	SPI_ClearFlag(LCD_SPI,SPI_FLAG_RXNE);
}

//向SPI总线传输一个8位数据
void  SPI_WriteData(u8 Data)
{
	while(SPI_I2S_GetFlagStatus(LCD_SPI,SPI_I2S_FLAG_TXE)==RESET);
    SPI_SendData(LCD_SPI,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 写命令时序开始
	SPI_LCD_CS_LOW();
	SPI_LCD_DC_LOW();
	SPI_WriteData(Index);
	SPI_LCD_CS_HIGH();
}

//向液晶屏写一个8位数据
void Lcd_WriteData(u8 Data)
{
	SPI_LCD_CS_LOW();
	SPI_LCD_DC_HIGH();
	SPI_WriteData(Data);
	SPI_LCD_CS_HIGH();
}

//向液晶屏写一个16位数据
void LCD_WriteData_16Bit(u16 Data)
{
	SPI_LCD_CS_LOW();
	SPI_LCD_DC_HIGH();
	SPI_WriteData(Data>>8); 	//写入高8位数据
	SPI_WriteData(Data); 		//写入低8位数据
	SPI_LCD_CS_HIGH();
}

void Lcd_WriteReg(u8 Index,u8 Data)
{
	Lcd_WriteIndex(Index);
	Lcd_WriteData(Data);
}

void Lcd_Reset(void)
{
	SPI_LCD_RES_LOW();
	delay_ms(100);
	SPI_LCD_RES_HIGH();
	delay_ms(50);
}

//LCD Init For 1.44Inch LCD Panel with ST7735R.
void Lcd_Init(void)
{	
	LCD_Driver_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 Rate
	Lcd_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 Sequence
	Lcd_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 Sequence
	Lcd_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);//Lcd_WriteData(x_start+2);
	Lcd_WriteData(0x00);
	Lcd_WriteData(x_end+2);

	Lcd_WriteIndex(0x2b);
	Lcd_WriteData(0x00);
	Lcd_WriteData(y_start+0);
	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);
    }   
}

#ifndef _LCD_DRIVER_H
#define _LCD_DRIVER_H

#include "main.h"

#define X_MAX_PIXEL	        128
#define Y_MAX_PIXEL	        160
#define RED  	0xf800
#define GREEN	0x07e0
#define BLUE 	0x001f
#define WHITE	0xffff
#define BLACK	0x0000
#define YELLOW  0xFFE0
#define GRAY0   0xEF7D   	//灰色0 3165 00110 001011 00101
#define GRAY1   0x8410      	//灰色1      00000 000000 00000
#define GRAY2   0x4208      	//灰色2  1111111111011111
#define SPIT_FLAG_TIMEOUT         ((uint32_t)0x1000)

/*SPI接口定义-开头****************************/
#define LCD_SPI                           SPI1
#define LCD_SPI_CLK                       RCC_APB2Periph_SPI1
#define LCD_SPI_CLK_INIT                  RCC_APB2PeriphClockCmd

#define LCD_SPI_SCK_PIN                   GPIO_Pin_3                  
#define LCD_SPI_SCK_GPIO_PORT             GPIOB                       
#define LCD_SPI_SCK_GPIO_CLK              RCC_AHB1Periph_GPIOB
#define LCD_SPI_SCK_PINSOURCE             GPIO_PinSource3
#define LCD_SPI_SCK_AF                    GPIO_AF_SPI1

#define LCD_SPI_MOSI_PIN                  GPIO_Pin_5                
#define LCD_SPI_MOSI_GPIO_PORT            GPIOB                     
#define LCD_SPI_MOSI_GPIO_CLK             RCC_AHB1Periph_GPIOB
#define LCD_SPI_MOSI_PINSOURCE            GPIO_PinSource5
#define LCD_SPI_MOSI_AF                   GPIO_AF_SPI1

#define LCD_CS_PIN                        GPIO_Pin_15         
#define LCD_CS_GPIO_PORT                  GPIOA                     
#define LCD_CS_GPIO_CLK                   RCC_AHB1Periph_GPIOA
#define LCD_SPI_CS_PINSOURCE              GPIO_PinSource15
#define LCD_SPI_CS_AF                     GPIO_AF_SPI1

#define LCD_DC_PIN                        GPIO_Pin_4         
#define LCD_DC_GPIO_PORT                  GPIOB                     
#define LCD_DC_GPIO_CLK                   RCC_AHB1Periph_GPIOB

#define LCD_RES_PIN                       GPIO_Pin_11         
#define LCD_RES_GPIO_PORT                 GPIOA                     
#define LCD_RES_GPIO_CLK                  RCC_AHB1Periph_GPIOA

#define LCD_BLK_PIN                       GPIO_Pin_12         
#define LCD_BLK_GPIO_PORT                 GPIOA                     
#define LCD_BLK_GPIO_CLK                  RCC_AHB1Periph_GPIOA

#define SPI_LCD_CS_LOW()      {LCD_CS_GPIO_PORT->BSRRH=LCD_CS_PIN;}
#define SPI_LCD_CS_HIGH()     {LCD_CS_GPIO_PORT->BSRRL=LCD_CS_PIN;}

#define SPI_LCD_DC_LOW()      {LCD_DC_GPIO_PORT->BSRRH=LCD_DC_PIN;}
#define SPI_LCD_DC_HIGH()     {LCD_DC_GPIO_PORT->BSRRL=LCD_DC_PIN;}

#define SPI_LCD_RES_LOW()      {LCD_RES_GPIO_PORT->BSRRH=LCD_RES_PIN;}
#define SPI_LCD_RES_HIGH()     {LCD_RES_GPIO_PORT->BSRRL=LCD_RES_PIN;}

#define SPI_LCD_BLK_LOW()      {LCD_BLK_GPIO_PORT->BSRRH=LCD_BLK_PIN;}
#define SPI_LCD_BLK_HIGH()     {LCD_BLK_GPIO_PORT->BSRRL=LCD_BLK_PIN;}

#define SPI_LCD_CS_LOW()      SPI_Cmd(LCD_SPI,ENABLE)
#define SPI_LCD_CS_HIGH()     SPI_Cmd(LCD_SPI,DISABLE)




void Lcd_Init(void);

#endif

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

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

相关文章

程序员学CFA——财务报告与分析(七)

财务报告与分析&#xff08;七&#xff09; 存货存货的初始确认简介初始确认存货的初始入账成本费用化支出 发出存货的计量发出存货的计价方法个别计价法先进先出法后进先出法加权平均法总结对比 存货盘点方法实地盘存法永续盘存法总结归纳 后进先出法的特殊问题后进先出储备后…

安全测试|AWVS渗透测试神器工具详解,零基础入门到精通,收藏这一篇就够了

前言 Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的自动化网络漏洞扫描工具&#xff0c;它通过网络爬虫测试你的网站安全&#xff0c;检测流行安全漏洞。它可以扫描任何可通过Web浏览器访问的和遵循HTTP/HTTPS规则的Web站点和Web应用程序。适用于任何中小型和大型…

终于有人将多模态重点内容做成了动画

CLIP是入门多模态的最佳选择&#xff0c;后续多模态模型基本上都延续了它的思想&#xff1a;分别用图像编码器和文本编码器将图像和文本编码到一个共享的特征空间中&#xff0c;然后通过多模态融合方法将配对的图像文本特征向量拉进。 [1] 给定 ↳ 一个包含3个文本-图像对的小…

C++期末知识点概述

《大学 C知识点概述》 在大学的计算机课程中&#xff0c;C作为一门重要的编程语言&#xff0c;有着广泛的应用和丰富的知识点。 一、基础语法 数据类型&#xff1a;C包含多种数据类型&#xff0c;如整数类型&#xff08;int、short、long 等&#xff09;、浮点类型&#xff…

shell脚本编写之传参

我们知道命令可以带参数&#xff0c;同样脚本文件运行时也可以带有参数。 1、脚本内获取参数 脚本内获取参数的格式为&#xff1a;$n n代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;以此类推。 举例&#xff0c;仍然…

新手必看 | 信息收集打点篇

0x1 前言 本篇文章主要是汇总自己在以往的信息收集打点中的一些总结&#xff0c;然后给师傅们分享下个人信息打点的各种方式&#xff0c;以及使用工具的快、准、狠的重要性。让师傅们在后面的一些红队和众测包括src的项目中可以拿到一个不错的结果。 0x2 信息打点方向 探讨下…

天气数据爬取

目录 历史气象数据获取浏览器访问模拟 历史气象数据获取 主要的python包 requests BeautifulSoup re pandas lxml 浏览器访问模拟 根据浏览器Request-Header参数&#xff0c;让request模拟浏览器行为 import requests from bs4 import BeautifulSoup import re import pandas…

Qt 实战(10)MVD | 10.1、MVD机制详解

文章目录 一、MVD机制1、MVC设计模式1.1、简介1.2、优缺点分析 2、什么是MVD&#xff1f;2.1、简介2.2、核心角色 前言&#xff1a; 在Qt框架中&#xff0c;MVD&#xff08;Model-View-Delegate&#xff09;机制是一种用于实现数据与用户界面分离的重要设计模式。它源于经典的M…

python 下载油管视频的评论

先说结果: 2024年9月2日上午, 能运行&#xff01; 起因(目的): Not Like Us 这首歌&#xff0c; 1.5亿播放量&#xff0c;34万个评论。 有时候很想知道大家都说了什么。 Youtube 也是互联网的一霸&#xff0c; 大公司。 想爬人家的数据&#xff0c; 先做好失败的心理准备。 …

不同框架下跑yolov10(pt、onnx_runtime、tensorrt)

不同框架下跑yolov10&#xff08;pt、onnx_runtime、tensorrt&#xff09; (qq.com)

cmake版本升级 CMake Error: Could not find CMAKE_ROOT !!!

背景 ubuntu默认安装cmake较低版本,但是有些开发环境需要较高的版本,这时候需要手动升级一波. 1 官网获取cmake安装包 https://cmake.org/files/LatestRelease/,cmak官网下载 下载后,放到ubuntu里面,然后解压. tar zxvf *.gz 解压之后, cd cmake-3.30.0-Linux-x86_64/bin/, …

asp.net Temporary ASP.NET Files修改为其他位置

Temporary ASP.NET Files这个文件夹是编译期间用于临时文件存储的目录。当请求一个新页面时ASP.NET会分析aspx页面并为其生成一个.cs文件&#xff0c;然后JIT编译器会编译这个cs生成一个dll&#xff0c;这些过程都是在这个目录里面进行的。其中还放了你在项目中引用的Assembly的…

[CTF]-Pwn:做题笔记

seccon2018_kindvm解析&#xff08;vm&#xff09;&#xff1a; 查看保护 这里有两次输入。 完整exp&#xff1a; from pwn import* pprocess(./kindvm)p.sendlineafter(bInput your name :,bflag) payloadb\x01\x00\xff\xd8 payloadb\x02\xff\xdc\x00 payloadb\x06 p.sendl…

FastAPI+Vue3零基础开发ERP系统项目实战课 20240831上课笔记 查询参数和分页实现

回顾 获取路径参数什么是路径参数&#xff1f;/user/{id}什么时候使用&#xff1f;需要传递参数怎么实现类型转换&#xff1f;声明参数的类型怎么捕获文件路径&#xff1f;{file_path:path} 什么是查询参数 查询字符串是键值对的集合&#xff0c;这些键值对位于 URL 的 ? 之…

深兰科技荣登《2024胡润中国元宇宙潜力企业榜》Top100

8月29日&#xff0c;“胡润中国元宇宙高峰论坛”在广州南沙隆重召开。论坛期间&#xff0c;胡润研究院发布了《2024胡润中国元宇宙潜力企业榜》&#xff0c;列出了元宇宙领域最具发展潜力和影响力的中国企业&#xff0c;深兰科技成功入围《2024胡润中国元宇宙潜力企业榜》Top10…

基质粘弹性咋回事?与组织生长啥关系?快来看看!

大家好&#xff0c;今天我们要来了解一个关于细胞外基质的有趣话题——《Matrix viscoelasticity controls spatio-temporal tissue organization》发表于《Nature materials》。细胞外基质的粘弹性对组织的时空组织起着重要作用&#xff0c;但这一作用尚未被完全理解。我们将通…

生成图片的base64编码(纯C语言实现)

一、前言 Base64编码是一种广泛使用的编码方案&#xff0c;将任意二进制数据转换为可打印的ASCII字符字符串。这种编码方式之所以重要&#xff0c;是因为许多通信协议和存储介质对数据的可传输性和可存储性有特定的要求&#xff0c;它们可能无法直接处理或有效传输二进制数据。…

[进阶]面向对象之static关键字

文章目录 一、什么是static关键字为什么要设置static关键字二、static的使用规则1、static修饰变量:2.static的修饰方法 练习&#xff08;定义数组工具类&#xff09;练习2&#xff08;定义学生工具类&#xff09;三、static的注意事项 一、什么是static关键字 static关键字是…

美国高防服务器运行《黑神话:悟空》配置需求及优化方法

《黑神话&#xff1a;悟空》作为一款备受关注的动作角色扮演游戏&#xff0c;其对计算资源和图形处理能力的需求相当高。在这种背景下&#xff0c;云服务器成为了一个能够提供强大支持的选项。下面将分析美国高防服务器在运行《黑神话&#xff1a;悟空》时的配置需求及优化方法…

微服务CI/CD实践(五)Jenkins Docker 自动化构建部署Node服务

微服务CI/CD实践系列&#xff1a; 微服务CI/CD实践&#xff08;一&#xff09;环境准备及虚拟机创建 微服务CI/CD实践&#xff08;二&#xff09;服务器先决准备 微服务CI/CD实践&#xff08;三&#xff09;gitlab部署及nexus3部署 微服务CI/CD实践&#xff08;四&#xff09…