航芯ACM32G103开发板评测 04 GC9A01 SPI-LCD 1.28圆形屏幕

news2024/10/6 12:21:39

航芯ACM32G103开发板评测 03 GC9A01 SPI-LCD 1.28圆形屏幕

硬件平台

  1. 航芯ACM32G103开发板
  2. 1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口GC9A01

产品介绍

推荐一个屏幕资料参考网站 http://www.lcdwiki.com/1.28inch_IPS_Module

在这里插入图片描述

  • 1.28寸圆形IPS彩屏,支持 RGB 65K色显示,显示色彩丰富
  • 240X240分辨率,显示清晰
  • IPS全视角面板,超宽可视范围
  • 采用4线制SPI串行总线,只需几个IO即可点亮
  • 提供丰富的Arduino、STM32、C51以及MSP430示例程序
  • 军工级工艺标准,长期稳定工作
  • 提供底层驱动技术支持

产品参数

名称参数
显示颜色RGB 65K 彩色
SKUMSP1281
尺寸1.28(inch)
面板材质TFT
驱动芯片GC9A01
分辨率240*240 (Pixel)
显示接口4-line SPI interface
有效显示区域(AA区)直径:32.40 (mm)
触摸屏类型无触摸屏
触摸IC无触摸IC
模块PCB底板尺寸38.03x45.80(mm)
视角全角度
工作温度-10℃~60℃
存储温度-20℃~70℃
工作电压3.3V

接口定义

序号模块引脚引脚说明
1GND液晶屏电源地
2VCC液晶屏电源正(3.3V/5V)
3SCL液晶屏SPI总线时钟信号
4SDA液晶屏SPI总线写数据信号
5RES液晶屏复位控制信号(低电平复位,模块有复位电路,该引脚可不接)
6DC液晶屏寄存器/数据选择控制信号(低电平:寄存器,高电平:数据)
7CS液晶屏片选控制信号(低电平使能)
8BLK液晶屏背光控制信号(高电平点亮,如不需要控制,请接3.3V)
硬件配置

LCD模块硬件电路包含五大部分:FPC接口电路、3.3V稳压电路、背光控制电路、排针接口、复位电路。

  1. FPC接口电路用于连接裸屏。
  2. 3.3V稳压电路用于稳定输出3.3V电压。
  3. 背光控制电路用于用于控制背光亮和灭,如果不需控制背光。可接3.3V电源。
  4. 排针接口用于连接各种开发板。
  5. 复位电路用于模块上电复位
GC9A01控制器

GC9A01控制器支持的最大分辨率为240*240,拥有一个129600字节大小的GRAM。同时支持8位、9位、12位、16位、18位并口数据总线,还支持3线制和4线制SPI串口。由于并行控制需要大量的I0口,所以最常用的还是SPI串口控制。ST7789还支持65K、262KRGB颜色显示,显示色彩很丰富,同时支持旋转和滚动显示以及视频播放,显示方式多样。
GC9A01控制器使用16bit(RGB565)来控制一个像素点显示,因此可以每个像素点显示颜色多达65K种。像素点地址设置按照行列的顺序进行,递增递减方向由扫描方式决定。GC9A01显示方法按照先设置地址再设置颜色值进行。

模拟SPI移植LCD屏幕驱动
  1. 建立工程模板,添加相关驱动文件

    //lcd_gc9a01 硬件驱动层代码
    lcd_gc9a01.c
    lcd_gc9a01.h
    //lcd_gc9a01 软件应用层代码
    lcd_guic
    lcd_gui.h
    lcd_font.h
    //lcd_gc9a01 软件测试代码
    lcd_example.c
    lcd_example.h
    

    在这里插入图片描述

  2. 配置引脚

    选择引脚,进入工程开始编写屏幕引脚初始化代码。

    为了方便后续移植,我在lcd_gc9a01.h处宏定义了每一个引脚,后续根据需要进行修改即可。

    #define LCD_GPIO_PORT  GPIOB
    
    #define SCL_GPIO_PORT            GPIOB
    #define SCL_GPIO_PIN             GPIO_PIN_0
    #define SCL_GPIO_CLK_ENABLE()    __RCC_GPIOB_CLK_ENABLE()
    
    #define SDA_GPIO_PORT            GPIOB
    #define SDA_GPIO_PIN             GPIO_PIN_1
    #define SDA_GPIO_CLK_ENABLE()    __RCC_GPIOB_CLK_ENABLE()
    
    #define RES_GPIO_PORT            GPIOB
    #define RES_GPIO_PIN             GPIO_PIN_2
    #define RES_GPIO_CLK_ENABLE()    __RCC_GPIOB_CLK_ENABLE()
    
    #define DC_GPIO_PORT            GPIOB
    #define DC_GPIO_PIN             GPIO_PIN_3
    #define DC_GPIO_CLK_ENABLE()    __RCC_GPIOB_CLK_ENABLE()
    
    #define CS_GPIO_PORT            GPIOB
    #define CS_GPIO_PIN             GPIO_PIN_4
    #define CS_GPIO_CLK_ENABLE()    __RCC_GPIOB_CLK_ENABLE()
    
    #define BLK_GPIO_PORT            GPIOB
    #define BLK_GPIO_PIN             GPIO_PIN_5
    #define BLK_GPIO_CLK_ENABLE()    __RCC_GPIOB_CLK_ENABLE()
    
    
    
  3. 屏幕GPIO端口初始化配置

    void lcd_gpio_init(void)
    {
        GPIO_InitTypeDef  GPIO_InitStruct;
        /* Enable the GPIO Clock */
        SDA_GPIO_CLK_ENABLE();
        SCL_GPIO_CLK_ENABLE();
    	RES_GPIO_CLK_ENABLE();
        DC_GPIO_CLK_ENABLE();
        CS_GPIO_CLK_ENABLE();
        BLK_GPIO_CLK_ENABLE();
        
        GPIO_InitStruct.Pin       = SDA_GPIO_PIN   	|SCL_GPIO_PIN|RES_GPIO_PIN|DC_GPIO_PIN|CS_GPIO_PIN|BLK_GPIO_PIN;
        GPIO_InitStruct.Mode      = GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Pull      = GPIO_PULLUP;
        GPIO_InitStruct.Drive     = GPIO_DRIVE_LEVEL3;
        GPIO_InitStruct.Alternate = GPIO_FUNCTION_0;
         
        GPIO_Init(LCD_GPIO_PORT, &GPIO_InitStruct);
    	
        
    }
    
  4. SPI 接口宏定义设置

    #define	SPI_SCLK_SET    GPIO_SetBits(SCL_GPIO_PORT,SCL_GPIO_PIN)
    #define	SPI_SCLK_CLR    GPIO_ResetBits(SCL_GPIO_PORT,SCL_GPIO_PIN)
    
    #define	SPI_MOSI_SET    GPIO_SetBits(SDA_GPIO_PORT,SDA_GPIO_PIN)
    #define	SPI_MOSI_CLR    GPIO_ResetBits(SDA_GPIO_PORT,SDA_GPIO_PIN)
       
    
    
    #define	LCD_RES_SET     GPIO_SetBits(RES_GPIO_PORT,RES_GPIO_PIN)
    #define	LCD_RES_CLR     GPIO_ResetBits(RES_GPIO_PORT,RES_GPIO_PIN)
    
    #define	LCD_DC_SET      GPIO_SetBits(DC_GPIO_PORT,DC_GPIO_PIN)
    #define	LCD_DC_CLR      GPIO_ResetBits(DC_GPIO_PORT,DC_GPIO_PIN)
    
    #define	LCD_CS_SET      GPIO_SetBits(CS_GPIO_PORT,CS_GPIO_PIN)
    #define	LCD_CS_CLR      GPIO_ResetBits(CS_GPIO_PORT,CS_GPIO_PIN)
    
    #define	LCD_BLK_SET     GPIO_SetBits(BLK_GPIO_PORT,BLK_GPIO_PIN) 
    
  5. 软件SPI代码实现

    /*****************************************************************************
    * @name       :void  SPI_WriteByte(uint8_t Data)
    * @function   :Write a byte of data using STM32's Software SPI
    * @parameters :Data:Data to be written
    * @retvalue   :None
    ******************************************************************************/
    void SPI_WriteByte(uint8_t Data)
    {
    unsigned char i=0;
    for(i=8;i>0;i--)
    {
    if(Data&0x80)	
      	SPI_MOSI_SET; //输出数据
     else
        SPI_MOSI_CLR;
       SPI_SCLK_CLR;       
       SPI_SCLK_SET;
       Data<<=1; 
    }
    }
    
    /*****************************************************************************
    * @name       :void LCD_WR_REG(uint8_t data)
    * @function   :Write an 8-bit command to the LCD screen
    * @parameters :data:Command value to be written
    * @retvalue   :None
    ******************************************************************************/
    void LCD_WR_REG(uint8_t data)
    { 
    LCD_CS_CLR;     
    LCD_DC_CLR;	  
    SPI_WriteByte(data);
    LCD_CS_SET;	
    }
    
    /*****************************************************************************
    * @name       :void LCD_WR_DATA(uint8_t data)
    * @function   :Write an 8-bit data to the LCD screen
    * @parameters :data:data value to be written
    * @retvalue   :None
    ******************************************************************************/
    void LCD_WR_DATA(uint8_t data)
    {
    LCD_CS_CLR;
    LCD_DC_SET;
    SPI_WriteByte(data);
    LCD_CS_SET;
    }
    

    如果传输的数据位为1,则将SPI数据引脚拉高;传输的数据位为0,则将SPI数据引脚拉低。每次传输一个字节数据,高位在前,每个时钟上升沿传输1位数据。

  6. LCD初始化函数

    /*****************************************************************************
    * @name       :void LCD_Init(void)
    * @date       :2018-08-09 
    * @function   :Initialization LCD screen
    * @parameters :None
    * @retvalue   :None
    ******************************************************************************/	 	 
    void LCD_Init(void)
    {  
    lcd_gpio_init();								 
      LCD_RESET(); //LCD 复位
    //************* GC9A01初始化**********//	
      LCD_WR_REG(0xEF);
    LCD_WR_REG(0xEB);
    LCD_WR_DATA(0x14); 
    
      LCD_WR_REG(0xFE);			 
    LCD_WR_REG(0xEF); 
    
    LCD_WR_REG(0xEB);	
    LCD_WR_DATA(0x14); 
    
    LCD_WR_REG(0x84);			
    LCD_WR_DATA(0x40); 
    
    LCD_WR_REG(0x85);			
    LCD_WR_DATA(0xFF); 
    
    LCD_WR_REG(0x86);			
    LCD_WR_DATA(0xFF); 
    
    LCD_WR_REG(0x87);			
    LCD_WR_DATA(0xFF);
    
    LCD_WR_REG(0x88);			
    LCD_WR_DATA(0x0A);
    
    LCD_WR_REG(0x89);			
    LCD_WR_DATA(0x21); 
    
    LCD_WR_REG(0x8A);			
    LCD_WR_DATA(0x00); 
    
    LCD_WR_REG(0x8B);			
    LCD_WR_DATA(0x80); 
    
    LCD_WR_REG(0x8C);			
    LCD_WR_DATA(0x01); 
    
    LCD_WR_REG(0x8D);			
    LCD_WR_DATA(0x01); 
    
    LCD_WR_REG(0x8E);			
    LCD_WR_DATA(0xFF); 
    
    LCD_WR_REG(0x8F);			
    LCD_WR_DATA(0xFF); 
    
    
    LCD_WR_REG(0xB6);
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(0x20);
    
    LCD_WR_REG(0x36);
    LCD_WR_DATA(0x08);
    
    LCD_WR_REG(0x3A);			
    LCD_WR_DATA(0x05); 
    
    
    LCD_WR_REG(0x90);			
    LCD_WR_DATA(0x08);
    LCD_WR_DATA(0x08);
    LCD_WR_DATA(0x08);
    LCD_WR_DATA(0x08); 
    
    LCD_WR_REG(0xBD);			
    LCD_WR_DATA(0x06);
    
    LCD_WR_REG(0xBC);			
    LCD_WR_DATA(0x00);	
    
    LCD_WR_REG(0xFF);			
    LCD_WR_DATA(0x60);
    LCD_WR_DATA(0x01);
    LCD_WR_DATA(0x04);
    
    LCD_WR_REG(0xC3);			
    LCD_WR_DATA(0x13);
    LCD_WR_REG(0xC4);			
    LCD_WR_DATA(0x13);
    
    LCD_WR_REG(0xC9);			
    LCD_WR_DATA(0x22);
    
    LCD_WR_REG(0xBE);			
    LCD_WR_DATA(0x11); 
    
    LCD_WR_REG(0xE1);			
    LCD_WR_DATA(0x10);
    LCD_WR_DATA(0x0E);
    
    LCD_WR_REG(0xDF);			
    LCD_WR_DATA(0x21);
    LCD_WR_DATA(0x0c);
    LCD_WR_DATA(0x02);
    
    LCD_WR_REG(0xF0);   
    LCD_WR_DATA(0x45);
    LCD_WR_DATA(0x09);
    LCD_WR_DATA(0x08);
    LCD_WR_DATA(0x08);
    LCD_WR_DATA(0x26);
      LCD_WR_DATA(0x2A);
    
      LCD_WR_REG(0xF1);    
      LCD_WR_DATA(0x43);
      LCD_WR_DATA(0x70);
      LCD_WR_DATA(0x72);
      LCD_WR_DATA(0x36);
      LCD_WR_DATA(0x37);  
      LCD_WR_DATA(0x6F);
    
    
      LCD_WR_REG(0xF2);   
      LCD_WR_DATA(0x45);
      LCD_WR_DATA(0x09);
      LCD_WR_DATA(0x08);
      LCD_WR_DATA(0x08);
      LCD_WR_DATA(0x26);
      LCD_WR_DATA(0x2A);
    
      LCD_WR_REG(0xF3);   
      LCD_WR_DATA(0x43);
      LCD_WR_DATA(0x70);
      LCD_WR_DATA(0x72);
      LCD_WR_DATA(0x36);
      LCD_WR_DATA(0x37); 
      LCD_WR_DATA(0x6F);
    
    LCD_WR_REG(0xED);	
    LCD_WR_DATA(0x1B); 
    LCD_WR_DATA(0x0B); 
    
    LCD_WR_REG(0xAE);			
    LCD_WR_DATA(0x77);
    
    LCD_WR_REG(0xCD);			
    LCD_WR_DATA(0x63);		
    
    
    LCD_WR_REG(0x70);			
    LCD_WR_DATA(0x07);
    LCD_WR_DATA(0x07);
    LCD_WR_DATA(0x04);
    LCD_WR_DATA(0x0E); 
    LCD_WR_DATA(0x0F); 
    LCD_WR_DATA(0x09);
    LCD_WR_DATA(0x07);
    LCD_WR_DATA(0x08);
    LCD_WR_DATA(0x03);
    
    LCD_WR_REG(0xE8);			
    LCD_WR_DATA(0x34);
    
    LCD_WR_REG(0x62);			
    LCD_WR_DATA(0x18);
    LCD_WR_DATA(0x0D);
    LCD_WR_DATA(0x71);
    LCD_WR_DATA(0xED);
    LCD_WR_DATA(0x70); 
    LCD_WR_DATA(0x70);
    LCD_WR_DATA(0x18);
    LCD_WR_DATA(0x0F);
    LCD_WR_DATA(0x71);
    LCD_WR_DATA(0xEF);
    LCD_WR_DATA(0x70); 
    LCD_WR_DATA(0x70);
    
    LCD_WR_REG(0x63);			
    LCD_WR_DATA(0x18);
    LCD_WR_DATA(0x11);
    LCD_WR_DATA(0x71);
    LCD_WR_DATA(0xF1);
    LCD_WR_DATA(0x70); 
    LCD_WR_DATA(0x70);
    LCD_WR_DATA(0x18);
    LCD_WR_DATA(0x13);
    LCD_WR_DATA(0x71);
    LCD_WR_DATA(0xF3);
    LCD_WR_DATA(0x70); 
    LCD_WR_DATA(0x70);
    
    LCD_WR_REG(0x64);			
    LCD_WR_DATA(0x28);
    LCD_WR_DATA(0x29);
    LCD_WR_DATA(0xF1);
    LCD_WR_DATA(0x01);
    LCD_WR_DATA(0xF1);
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(0x07);
    
    LCD_WR_REG(0x66);			
    LCD_WR_DATA(0x3C);
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(0xCD);
    LCD_WR_DATA(0x67);
    LCD_WR_DATA(0x45);
    LCD_WR_DATA(0x45);
    LCD_WR_DATA(0x10);
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(0x00);
    
    LCD_WR_REG(0x67);			
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(0x3C);
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(0x01);
    LCD_WR_DATA(0x54);
    LCD_WR_DATA(0x10);
    LCD_WR_DATA(0x32);
    LCD_WR_DATA(0x98);
    
    LCD_WR_REG(0x74);			
    LCD_WR_DATA(0x10);	
    LCD_WR_DATA(0x85);	
    LCD_WR_DATA(0x80);
    LCD_WR_DATA(0x00); 
    LCD_WR_DATA(0x00); 
    LCD_WR_DATA(0x4E);
    LCD_WR_DATA(0x00);					
    
     LCD_WR_REG(0x98);			
    LCD_WR_DATA(0x3e);
    LCD_WR_DATA(0x07);
    
    LCD_WR_REG(0x35);	
    LCD_WR_REG(0x21);
    
    LCD_WR_REG(0x11); 
    DelayMs(120); 
    
    LCD_WR_REG(0x29); 	
     LCD_direction(USE_HORIZONTAL);//设置LCD显示方向
    LCD_BLK_SET;//点亮背光	 
    LCD_Clear(WHITE);//清全屏白色
    }
    
    /*****************************************************************************
    * @name       :void LCD_SetWindows(uint16_t xStar, uint16_t yStar,uint16_t xEnd,uint16_t yEnd)
    * @date       :2018-08-09 
    * @function   :Setting LCD display window
    * @parameters :xStar:the bebinning x coordinate of the LCD display window
      						yStar:the bebinning y coordinate of the LCD display window
      						xEnd:the endning x coordinate of the LCD display window
      						yEnd:the endning y coordinate of the LCD display window
    * @retvalue   :None
    ******************************************************************************/ 
    void LCD_SetWindows(uint16_t xStar, uint16_t yStar,uint16_t xEnd,uint16_t yEnd)
    {	
    LCD_WR_REG(lcddev.setxcmd);	
    LCD_WR_DATA(xStar>>8);
    LCD_WR_DATA(xStar);		
    LCD_WR_DATA(xEnd>>8);
    LCD_WR_DATA(xEnd);
    
    LCD_WR_REG(lcddev.setycmd);	
    LCD_WR_DATA(yStar>>8);
    LCD_WR_DATA(yStar);		
    LCD_WR_DATA(yEnd>>8);
    LCD_WR_DATA(yEnd);
    
    LCD_WriteRAM_Prepare();	//开始写入GRAM			
    }   
    
  7. 驱动完整代码见仓库代码

    https://gitee.com/End-ING/embedded-acm32-board/tree/master/note

    在这里插入图片描述

屏幕测试

  1. 主程序

    #include "main.h" 
    #include "app.h"   
    void board_hardware_init(void)
    {
         //省略部分初始化代码
        printfS("ACM32G103-Board Testing 2024.01.06\r\n");
        LCD_Init();//屏幕初始化
    }
    /************************************************************************
    *@brief : main program
    *@param : none
    *@return: none
    ******************************************************************************/
    int main(void)
    {
       
        board_hardware_init();
        printfS("board_hardware_init [ok] \r\n");
        
        while(1)
        {
    
            printfS("lcd_init [start] \r\n");
            main_test(); 		    //测试主界面
            menu_test();			//测试界面
            English_Font_test();    //英文界面
            Chinese_Font_test();    //中文界面
            printfS("lcd_init [end] \r\n");
        }
        
    }
    
  2. 测试程序

    void main_test(void)
    {
    	DrawTestPage("综合测试程序");	
    	Show_Str(40,50,BLUE,YELLOW,"上海航芯 MCU芯片测试",16,0);
    	Gui_StrCenter(0,70,RED,BLUE,"上海航芯",24,1);//居中显示
    	Gui_StrCenter(0,95,RED,BLUE,"  ACM32G103-LCD_GC9A01",16,1);//居中显示	
    	Gui_StrCenter(0,112,BLUE,BLUE,"By CoderEnd",16,1);//居中显示
    	Gui_StrCenter(0,129,BLUE,BLUE,"GC9A01_LCD 240X240",16,1);//居中显示
    	Gui_StrCenter(0,146,BLUE,BLUE,"2024-01-06 Testing",16,1);//居中显示
    	DelayMs(1500);		
    	DelayMs(1500);
    }
    
    void menu_test(void)
    {
    	LCD_Clear(GRAY0);
    	
    	Display_ButtonUp((lcddev.width-98)/2,65,(lcddev.width-98)/2+98,85); //x1,y1,x2,y2
    	Gui_StrCenter(0,67,BRED,BLUE,"图形显示测试",16,1);
    
    	Display_ButtonUp((lcddev.width-98)/2,95,(lcddev.width-98)/2+98,115); //x1,y1,x2,y2
    	Gui_StrCenter(0,97,BLACK,GRAY0,"纯色填充测试",16,1);
    	
    	Display_ButtonUp((lcddev.width-98)/2,125,(lcddev.width-98)/2+98,145); //x1,y1,x2,y2
    	Gui_StrCenter(0,127,BLUE,GRAY0,"中文显示测试",16,1);
    
    	Display_ButtonUp((lcddev.width-98)/2,155,(lcddev.width-98)/2+98,175); //x1,y1,x2,y2
    	Gui_StrCenter(16,157,RED,GRAY0,"图片显示测试",16,1);
    	DelayMs(1500);
    	DelayMs(500);
    }
    
    void English_Font_test(void)
    {
    	DrawTestPage("英文显示测试");
    	Show_Str(50,77,BLUE,YELLOW,"6X12:abcdefgh01234567",12,0);
    	Show_Str(50,89,BLUE,YELLOW,"6X12:ABCDEFGH01234567",12,1);
    	Show_Str(50,101,BLUE,YELLOW,"6X12:~!@#$%^&*()_+{}:",12,0);
    	Show_Str(50,114,BLUE,YELLOW,"8X16:abcde01234",16,0);
    	Show_Str(50,130,BLUE,YELLOW,"8X16:ABCDE01234",16,1);
    	Show_Str(50,146,BLUE,YELLOW,"8X16:~!@#$%^&*()",16,0); 
    	DelayMs(1200);
    }
    
    void Chinese_Font_test(void)
    {	
    	DrawTestPage("中文显示测试");
    	Show_Str(45,82,BLUE,YELLOW,"16X16: 上海航芯",16,0);
    	Show_Str(45,102,BLUE,YELLOW,"24X24: 上海航芯",24,1);
    	Show_Str(45,127,BLUE,YELLOW,"32X32: 上海航芯",32,1);
    	DelayMs(1200);
    }
    
    
  3. 测试效果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

JAVA SpringBoot中使用redis的事务

目录 一、Java语言介绍 二、SpringBoot框架介绍 三、Redis缓存介绍 四、什么是redis的事务 一、Java语言介绍 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司于1995年推出。它的设计目标是要求“一次编写,到处运行”&#xff08;Write Once, Run Anywhere, WOR…

orin nx 安装paddlespeech记录

nx配置&#xff1a; 模块 版本说明 CPU 8核 内存 16G Cuda版本 11.4 Opencv版本 4.5.4 Tensorrt版本 5.1 Cudnn版本 8.6.0.166 Deepstream版本 6.2 Python版本 3.8 算力 100T 安装paddlepaddle&#xff1a; 去飞桨官网下载jetpack版本的&#xff1a;下…

Leetcode第383场周赛

Leetcode第383场周赛 本人水平有限&#xff0c;只做前3道。 一、边界上的蚂蚁 边界上有一只蚂蚁&#xff0c;它有时向 左 走&#xff0c;有时向 右 走。 给你一个 非零 整数数组 nums 。蚂蚁会按顺序读取 nums 中的元素&#xff0c;从第一个元素开始直到结束。每一步&#…

控价新规要及时了解

控价工作的开展&#xff0c;除了依托品牌本身的规则&#xff0c;还要依赖一些外部能力的赋能&#xff0c;如对数据的监测&#xff0c;这个可以依靠人工实现&#xff0c;也可以利用数据监测系统去完成&#xff0c;或者是对破价链接的治理&#xff0c;虽然品牌多利用知识产权进行…

视频上传 - 断点续传那点事

在上一篇文章中&#xff0c;我们讲解了分片上传的实现方式。在讲解断点续传之前&#xff0c;我要把上篇文章中留下的问题讲解一下。读过上一篇文章的小伙伴们都知道&#xff0c;对于分片上传来说&#xff0c;它的传输方式分为2种&#xff0c;一种是按顺序传输&#xff0c;一种是…

工业级加固平板丨亿道三防平板电脑丨安卓工业平板丨改善车队管理

在现代物流和运输行业中&#xff0c;车队管理是一个复杂而重要的任务。为了更好地管理车队&#xff0c;提高工作效率和减少成本&#xff0c;许多企业正在采用新技术和工具。其中&#xff0c;三防平板电脑作为一种功能强大且适应恶劣环境的设备&#xff0c;已经在车队管理中得到…

ShardingSphere实现openGauss分布式架构

本文档采用openGauss结合ShardingSphere中间件的架构&#xff0c;实现openGauss数据库分布式OLAP场景的环境部署。 术语说明&#xff1a; 开源数据库引擎&#xff1a;openGauss shardingsphere Proxy&#xff1a;定位为透明化的数据库代理端&#xff0c;提供封装了数据库二进…

飞天使-k8s知识点16-kubernetes实操1-pod

文章目录 深入Pod 创建Pod&#xff1a;配置文件详解写个pod的yaml 文件深入Pod 探针&#xff1a;探针技术详解 深入Pod 创建Pod&#xff1a;配置文件详解 资源清单参考链接&#xff1a;https://juejin.cn/post/6844904078909128712写个pod的yaml 文件 apiVersion: v1 kind: P…

UE4运用C++和框架开发坦克大战教程笔记(十八)(第55~57集)

UE4运用C和框架开发坦克大战教程笔记&#xff08;十八&#xff09;&#xff08;第55~57集&#xff09; 55. UI 进入退出动画HideOther 面板出现时隐藏其他面板添加面板出现和收起的动画效果编写遮罩管理器前的准备 56. 弹窗进入界面57. UI 显示隐藏与遮罩转移完善遮罩管理器 55…

DolphinScheduler本地安装

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

mysql入门到精通006-基础篇-多表查询

1、多表关系介绍 1.1 概念 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求和业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在各种联系&#xff0c;基本上分为3种&#xf…

实战分享:SpringBoot在创新创业项目管理中的应用

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【漏洞复现】斐讯FIR151M路由器未授权下载漏洞

Nx01 产品简介 斐讯数据通信技术有限公司成立于2009年&#xff0c;是为用户提供智慧家庭领域智能产品和云服务的科技创新性企业。 Nx02 漏洞描述 斐讯 FIR151M路由器配置文件未授权下载漏洞,攻击者可利用该漏洞获取敏感信息。 Nx03 产品主页 fofa-query: app"PHICOMM-F…

索引失效问题

1、 like 以%开头&#xff0c;索引无效&#xff1b;当like前缀没有%&#xff0c;后缀有%时&#xff0c;索引有效。 &#xff08;1&#xff09;创建索引 create index text1 on emp(name); &#xff08;2&#xff09;不走索引 EXPLAIN select id,name,age,workno from emp wh…

人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况

、 大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能基础部分24-人工智能的数学基础&#xff0c;汇集了人工智能数学知识最全面的概况&#xff0c;深度学习是一种利用多层神经网络对数据进行特征学习和表示学习的机器学习方法。要全面了解深度学习的数学基…

【Linux】环境基础开发工具的使用之gdb详解(三)

前言&#xff1a;上一篇文章中我们讲解了Linux下的gcc与g的使用&#xff0c;今天我们将进一步的学习gdb与makefile来帮我们更好的理解与使用基础开发工具。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的深度刨析 &#x1f448; …

LabVIEW多任务实时测控系统

LabVIEW多任务实时测控系统 面对现代化工业生产的复杂性和多变性&#xff0c;传统的测控系统已难以满足高效、精准、可靠的监控和控制需求。因此&#xff0c;开发一种基于LabVIEW的智能测控系统&#xff0c;能够提高生产效率&#xff0c;保证生产安全&#xff0c;是解决现代工…

echart - 柱状图添加阴影

有两种方法可以达到这个效果&#xff1a; 1. type: ‘shadow’ tooltip: {trigger: axis,axisPointer: {type: shadow,shadowStyle: {color: #FD8F67,opacity: 0.1,},},},2. type: ‘line’ 用这个方法可以改变阴影的宽度 tooltip: {trigger: axis,axisPointer: {type: li…

数据结构——D/二叉树

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.树概念及结构 1.1树的概念 树是一种非线性的…

S3 Browser工具得使用

新增账号 如果需要设置签名得版本&#xff0c;选择上图右下角得advanced setting