ILI9225 TFT显示屏16位并口方式驱动

 所用屏及资料如后图:

        ILI9225,176*220,8位或16位并口屏,IM0接GND,电源及背光接3.3v

主控:CH32V307驱动(库文件和STM32基本一样)

c281035882904959834e30a8f7bcf272.jpg

c21901d90e184cd7872f39d1657b7eb1.jpeg

2acba43771e6452a97e0b1758515f9e9.jpeg

一、源码

ILI9225.c

#include "ILI9225.h"
#include "ch32v30x_gpio.h"
//---汉字的字库头文件---//
#include"charcode.h"

/* Global Variable */
unsigned char fch,fcl;  //前景色高位和低位
/*
 *
 * CS --_____________________________--,低:有效
 * RD ---------------------------------,高:写
 * WR  -__--__--__--__--__--__--__-----,低:写
 * RS _________________________________,低:Index
 * RS ---------------------------------,高:Data
 *
 */
void LCD_Writ_Bus16(unsigned char VH,unsigned char VL)
{
    u16 val;
    val=((VH<<8)&0xFF00)+VL;

    LCD_WR_SET;
    LCD_RD_SET;

    GPIO_Write(LCD_PORT,val);

    LCD_WR_CLR;
    LCD_WR_SET;

}

void LCD_Write_COM(unsigned char VL)
{
    LCD_CS_CLR;
    LCD_RS_CLR;
    LCD_Writ_Bus16(0x00,VL);
    LCD_CS_SET;
}


void LCD_Write_DATA(unsigned char VH,unsigned char VL)
{
    LCD_CS_CLR;
    LCD_RS_SET;
    LCD_Writ_Bus16(VH,VL);
    LCD_CS_SET;
}

void LCD_Write_DATA16(unsigned short val)
{
    LCD_CS_CLR;
    LCD_RS_SET;
    LCD_RD_SET;
    LCD_WR_CLR;

    GPIO_Write(LCD_PORT,val);

    LCD_WR_CLR;
    LCD_WR_SET;
    LCD_CS_SET;

}

void LCD_Write_COM_DATA(unsigned char com1,unsigned short dat1)
{
    LCD_Write_COM(com1);
    LCD_Write_DATA16(dat1);
}

/*
 * @prief InitLCD
 */
void InitLCD()
{

    LCD_Reset();
    Delay_Ms(150);
 
    printf("ili9225 Initial\r\n");
    Delay_Ms(50);

    LCD_CS_CLR;

    LCD_Write_COM_DATA(0x10, 0x0000);
    LCD_Write_COM_DATA(0x11, 0x0000);
    LCD_Write_COM_DATA(0x12, 0x0000);
    LCD_Write_COM_DATA(0x13, 0x0000);
    LCD_Write_COM_DATA(0x14, 0x0000);
    Delay_Ms(40);

    LCD_Write_COM_DATA(0x11, 0x0018);
    LCD_Write_COM_DATA(0x12, 0x6121);
    LCD_Write_COM_DATA(0x13, 0x006F);
    LCD_Write_COM_DATA(0x14, 0x495F);
    LCD_Write_COM_DATA(0x10, 0x0800);
    Delay_Ms(10);
    LCD_Write_COM_DATA(0x11, 0x103B);
    Delay_Ms(50);
    LCD_Write_COM_DATA(0x01, 0x011C);
    LCD_Write_COM_DATA(0x02, 0x0100);
    LCD_Write_COM_DATA(0x03, 0x1030);
    LCD_Write_COM_DATA(0x07, 0x0000);
    LCD_Write_COM_DATA(0x08, 0x0808);
    LCD_Write_COM_DATA(0x0b, 0x1100);
    LCD_Write_COM_DATA(0x0c, 0x0000);
    LCD_Write_COM_DATA(0x0f, 0x0D01);
    LCD_Write_COM_DATA(0x15, 0x0020);
    LCD_Write_COM_DATA(0x20, 0x0000);
    LCD_Write_COM_DATA(0x21, 0x0000);

    LCD_Write_COM_DATA(0x30, 0x0000);
    LCD_Write_COM_DATA(0x31, 0x00DB);
    LCD_Write_COM_DATA(0x32, 0x0000);
    LCD_Write_COM_DATA(0x33, 0x0000);

    LCD_Write_COM_DATA(0x34, 0x00DB);
    LCD_Write_COM_DATA(0x35, 0x0000);
    LCD_Write_COM_DATA(0x36, 0x00AF);
    LCD_Write_COM_DATA(0x37, 0x0000);
    LCD_Write_COM_DATA(0x38, 0x00DB);
    LCD_Write_COM_DATA(0x39, 0x0000);

    LCD_Write_COM_DATA(0x50, 0x0000);
    LCD_Write_COM_DATA(0x51, 0x0808);
    LCD_Write_COM_DATA(0x52, 0x080A);
    LCD_Write_COM_DATA(0x53, 0x000A);
    LCD_Write_COM_DATA(0x54, 0x0A08);
    LCD_Write_COM_DATA(0x55, 0x0808);
    LCD_Write_COM_DATA(0x56, 0x0000);
    LCD_Write_COM_DATA(0x57, 0x0A00);
    LCD_Write_COM_DATA(0x58, 0x0710);
    LCD_Write_COM_DATA(0x59, 0x0710);

    LCD_Write_COM_DATA(0x07, 0x0012);
    Delay_Ms(50);
    LCD_Write_COM_DATA(0x07, 0x1017);
    LCD_Write_COM(0x22);
    LCD_CS_SET;
}

void LCD_Reset(void)
{
    LCD_RST_CLR;
    Delay_Ms(50);
    LCD_RST_SET;
    Delay_Ms(150);
}

/*
 * @prief clrScr 清屏
 */
void clrScr(unsigned short color)
{
    int i;
    u8 ch,cl;
    ch=color>>8;
    cl=color&0xff;

    clrXY();

    for (i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++)
    {
       LCD_Write_DATA(ch,cl);

    }

}

void setXY(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2)
{
    LCD_Write_COM_DATA(0x36,x2);
    LCD_Write_COM_DATA(0x37,x1);
    LCD_Write_COM_DATA(0x38,y2);
    LCD_Write_COM_DATA(0x39,y1);
    LCD_Write_COM_DATA(0x20,x1);
    LCD_Write_COM_DATA(0x21,y1);
    LCD_Write_COM(0x22);
}

void clrXY()
{
    setXY(0,0,disp_x_size,disp_y_size);
}
void setPixel(unsigned char color)
{

    LCD_Write_DATA((color>>8),(color&0xFF));    // rrrrrggggggbbbbb

}


void drawPixel(unsigned char  x, unsigned char  y)
{
    setXY(x, y, x, y);
    setPixel((fch<<8)|fcl);
    clrXY();
}


void setColor(unsigned short color)
{
    fch=color>>8;
    fcl=color & 0xFF;
}


void drawHLine(unsigned char x, unsigned char y, unsigned char l)
{
    setXY(x, y, x+l, y);

    for(int i=0; i<l+1; i++)
    {
        LCD_Write_DATA(fch, fcl);
    }

    clrXY();
}


void drawVLine(unsigned char x, unsigned char y, unsigned char l)
{
    setXY(x, y, x, y+l);

    for(int i=0; i<l+1; i++)
    {
        LCD_Write_DATA(fch, fcl);
    }

    clrXY();
}

void drawLine(unsigned char  x1, unsigned char  y1, unsigned char  x2, unsigned char  y2)
{
    if (y1==y2)
        drawHLine(x1, y1, x2-x1);
    else if (x1==x2)
        drawVLine(x1, y1, y2-y1);
    else
    {
        unsigned int    dx = (x2 > x1 ? x2 - x1 : x1 - x2);
        short           xstep =  x2 > x1 ? 1 : -1;
        unsigned int    dy = (y2 > y1 ? y2 - y1 : y1 - y2);
        short           ystep =  y2 > y1 ? 1 : -1;
        int             col = x1, row = y1;
        if (dx < dy)
        {
            int t = - (dy >> 1);
            while (1)
            {
                setXY (col, row, col, row);
                LCD_Write_DATA(fch, fcl);
                if (row == y2)
                    return;
                row += ystep;
                t += dx;
                if (t >= 0)
                {
                    col += xstep;
                    t   -= dy;
                }
            }
        }
        else
                {
                    int t = - (dx >> 1);
                    while (1)
                    {
                        setXY (col, row, col, row);
                        LCD_Write_DATA(fch, fcl);
                        if (col == x2)
                            return;
                        col += xstep;
                        t += dy;
                        if (t >= 0)
                        {
                            row += ystep;
                            t   -= dx;
                        }
                    }
                }
        }
        clrXY();
}

void drawRect(int x1, int y1, int x2, int y2)
{
    drawHLine(x1, y1, x2-x1);
    drawHLine(x1, y2, x2-x1);
    drawVLine(x1, y1, y2-y1);
    drawVLine(x2, y1, y2-y1);
}

void drawRect1(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned short c)
{
  setColor(c);
  drawRect(x, y,x+w-1 , y+h-1);
}

void fillRect(int x1, int y1, int x2, int y2)
{
/*
    for (int i=0; i<((x2-x1)/2)+1; i++)
    {
        drawVLine(x1+i, y1, y2-y1);
        drawVLine(x2-i, y1, y2-y1);
    }
    */
    setXY(x1, y1, x2, y2);

    for(int i=0; i<(x2-x1)*(y2-y1)-1; i++)
    {
        LCD_Write_DATA(fch, fcl);
    }
    clrXY();
}
void drawRoundRect(int x1, int y1, int x2, int y2)
{
    if ((x2-x1)>4 && (y2-y1)>4)
    {
        drawPixel(x1+1,y1+1);
        drawPixel(x2-1,y1+1);
        drawPixel(x1+1,y2-1);
        drawPixel(x2-1,y2-1);
        drawHLine(x1+2, y1, x2-x1-4);
        drawHLine(x1+2, y2, x2-x1-4);
        drawVLine(x1, y1+2, y2-y1-4);
        drawVLine(x2, y1+2, y2-y1-4);
    }
}

void fillRoundRect(int x1, int y1, int x2, int y2)
{
    if ((x2-x1)>4 && (y2-y1)>4)
    {
        for (int i=0; i<((y2-y1)/2)+1; i++)
        {
            switch(i)
            {
            case 0:
                drawHLine(x1+2, y1+i, x2-x1-4);
                drawHLine(x1+2, y2-i, x2-x1-4);
                break;
            case 1:
                drawHLine(x1+1, y1+i, x2-x1-2);
                drawHLine(x1+1, y2-i, x2-x1-2);
                break;
            default:
                drawHLine(x1, y1+i, x2-x1);
                drawHLine(x1, y2-i, x2-x1);
            }
        }
    }
}


void drawCircle(int x, int y, int radius)
{
    int f = 1 - radius;
    int ddF_x = 1;
    int ddF_y = -2 * radius;
    int x1 = 0;
    int y1 = radius;


    setXY(x, y + radius, x, y + radius);
    LCD_Write_DATA(fch,fcl);
    setXY(x, y - radius, x, y - radius);
    LCD_Write_DATA(fch,fcl);
    setXY(x + radius, y, x + radius, y);
    LCD_Write_DATA(fch,fcl);
    setXY(x - radius, y, x - radius, y);
    LCD_Write_DATA(fch,fcl);

    while(x1 < y1)
    {
        if(f >= 0)
        {
            y1--;
            ddF_y += 2;
            f += ddF_y;
        }
        x1++;
        ddF_x += 2;
        f += ddF_x;
        setXY(x + x1, y + y1, x + x1, y + y1);
        LCD_Write_DATA(fch,fcl);
        setXY(x - x1, y + y1, x - x1, y + y1);
        LCD_Write_DATA(fch,fcl);
        setXY(x + x1, y - y1, x + x1, y - y1);
        LCD_Write_DATA(fch,fcl);
        setXY(x - x1, y - y1, x - x1, y - y1);
        LCD_Write_DATA(fch,fcl);
        setXY(x + y1, y + x1, x + y1, y + x1);
        LCD_Write_DATA(fch,fcl);
        setXY(x - y1, y + x1, x - y1, y + x1);
        LCD_Write_DATA(fch,fcl);
        setXY(x + y1, y - x1, x + y1, y - x1);
        LCD_Write_DATA(fch,fcl);
        setXY(x - y1, y - x1, x - y1, y - x1);
        LCD_Write_DATA(fch,fcl);
    }
    clrXY();
}

void fillCircle(int x, int y, int radius)
{
    for(int y1=-radius; y1<=0; y1++)
        for(int x1=-radius; x1<=0; x1++)
            if(x1*x1+y1*y1 <= radius*radius)
            {
                drawHLine(x+x1, y+y1, 2*(-x1));
                drawHLine(x+x1, y-y1, 2*(-x1));
                break;
            }
}

void show_color_bar()
{
    unsigned long i,j;
    clrXY();

        for (i=0; i<disp_y_size; i++)
        {
            for (j=0; j<disp_x_size; j++)
            {
                  if(i>210){LCD_Write_DATA(0xFA,0x00);}
                  else if(i>180){LCD_Write_DATA(0x04,0x00);}
                  else if(i>150){LCD_Write_DATA(0xC6,0x18);}
                  else if(i>120){LCD_Write_DATA(0x00,0x1F);}
                  else if(i>90){LCD_Write_DATA(0x84,0x10);}
                  else if(i>60){LCD_Write_DATA(0x80,0x00);}
                  else if(i>30){LCD_Write_DATA(0xFF,0xE0);}
                  else {LCD_Write_DATA(0x80,10);}
                }
            }
}


/****************************************************************************
*函数名:GUI_Dot
*输  入:x:点的X坐标
*      * y:点的Y坐标
*      * color:点的颜色
*输  出:
*功  能:给一块3*3像素涂上颜色。
****************************************************************************/

void GUI_Dot(uint x, uint y, uint color)
{
    u8 i;

    setXY(x , y , x, y);  //单个像素  XS YS XE YE
    for(i=0; i<9; i++)
    {
        LCD_Write_DATA(color>>8,color&0xFF);
    }
}


void GUI_Write32CnChar(unsigned char x, unsigned char y, unsigned char *cn, unsigned short wordColor, unsigned short backColor)
{
    u8 i, j, wordNum;
    uint color;
    while (*cn != '\0')
    {
        setXY(x, y, x+31, y+28);
        for (wordNum=0; wordNum<20; wordNum++)
        {   //wordNum扫描字库的字数
            if ((CnChar32x29[wordNum].Index[0]==*cn)
                 &&(CnChar32x29[wordNum].Index[1]==*(cn+1)))
            {
                for(i=0; i<116; i++)
                {   //MSK的位数
                    color=CnChar32x29[wordNum].Msk[i];
                    for(j=0;j<8;j++)
                    {
                        if((color&0x80)==0x80)
                        {

                            LCD_Write_DATA(wordColor>>8,wordColor&0xFF);
                        }
                        else
                        {
                            LCD_Write_DATA(backColor>>8,backColor&0xFF);
                        }
                        color<<=1;
                    }//for(j=0;j<8;j++)结束
                }
            }
        } //for (wordNum=0; wordNum<20; wordNum++)结束
        cn += 2;
        x += 32;
    }
}


void GUI_WriteASCII(unsigned char  x, unsigned char  y, unsigned char  *p, unsigned short  wordColor, unsigned short  backColor)
{
    u8 j, wordByte,wordNum;
    uint color;
    while(*p != '\0')
    {
        wordNum = *p - 32;
        setXY(x,y,x+15, y+23);
        for (wordByte=0; wordByte<48; wordByte++)
        {
            color = ASCII16x24[wordNum][wordByte];
            for (j=0; j<8; j++)
            {
                if ((color&0x80) == 0x80)
                {
                    LCD_Write_DATA(wordColor>>8,wordColor&0xFF);
                }
                else
                {
                    LCD_Write_DATA(backColor>>8,backColor&0xFF);
                }
                color <<= 1;
            }
        }
        p++;
        x +=16;
    }
}

ILI9225.h

#ifndef USER_ILI9225_H_
#define USER_ILI9225_H_

#define disp_x_size 176
#define disp_y_size 220



//*********************************
// COLORS
//*********************************
// VGA color palette
#define VGA_BLACK       0x0000
#define VGA_WHITE       0xFFFF
#define VGA_RED         0xF800
#define VGA_GREEN       0x0400
#define VGA_BLUE        0x001F
#define VGA_SILVER      0xC618
#define VGA_GRAY        0x8410
#define VGA_MAROON      0x8000
#define VGA_YELLOW      0xFFE0
#define VGA_OLIVE       0x8400
#define VGA_LIME        0x07E0
#define VGA_AQUA        0x07FF
#define VGA_TEAL        0x0410
#define VGA_NAVY        0x0010
#define VGA_FUCHSIA     0xF81F
#define VGA_PURPLE      0x8010
#define VGA_TRANSPARENT 0xFFFFFFFF


/*
 *  GND-1;VDD(3V3)-2;  IM0-25 接GND 16bit; LED-:31~33;LED+:34
 */
#define LCD_CS GPIO_Pin_1       //4
#define LCD_RS GPIO_Pin_2       //5
#define LCD_WR GPIO_Pin_3       //6
#define LCD_RST GPIO_Pin_4      //24
#define LCD_RD GPIO_Pin_5       //7

#define LCD_PORT GPIOD          //8-23


#define LCD_CS_SET GPIO_WriteBit(GPIOA, LCD_CS,Bit_SET)
#define LCD_CS_CLR GPIO_WriteBit(GPIOA, LCD_CS,Bit_RESET)

#define LCD_RS_SET GPIO_WriteBit(GPIOA, LCD_RS,Bit_SET)
#define LCD_RS_CLR GPIO_WriteBit(GPIOA, LCD_RS,Bit_RESET)

#define LCD_WR_SET GPIO_WriteBit(GPIOA, LCD_WR,Bit_SET)
#define LCD_WR_CLR GPIO_WriteBit(GPIOA, LCD_WR,Bit_RESET)

#define LCD_RST_SET GPIO_WriteBit(GPIOA, LCD_RST,Bit_SET)
#define LCD_RST_CLR GPIO_WriteBit(GPIOA, LCD_RST,Bit_RESET)

#define LCD_RD_SET GPIO_WriteBit(GPIOA, LCD_RD,Bit_SET)
#define LCD_RD_CLR GPIO_WriteBit(GPIOA, LCD_RD,Bit_RESET)

void LCD_Writ_Bus16(unsigned char VH,unsigned char VL);
void LCD_Write_COM(unsigned char VL);
void LCD_Write_DATA(unsigned char VH,unsigned char VL);
void LCD_Write_DATA16(unsigned short val);
void LCD_Write_COM_DATA(unsigned char com1,unsigned short dat1);
void InitLCD();
void LCD_Reset(void);
void clrScr(unsigned short color);
void clrXY();
void setPixel(unsigned char color);
void drawPixel(unsigned char  x, unsigned char  y);
void setColor(unsigned short color);
void drawHLine(unsigned char x, unsigned char y, unsigned char l);
void drawVLine(unsigned char x, unsigned char y, unsigned char l);
void drawLine(unsigned char  x1, unsigned char  y1, unsigned char  x2, unsigned char  y2);

void fillRoundRect(int x1, int y1, int x2, int y2);
void drawCircle(int x, int y, int radius);
void fillCircle(int x, int y, int radius);
void drawRect(int x1, int y1, int x2, int y2);
void drawRect1(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned short c);
void fillRect(int x1, int y1, int x2, int y2);
void drawRoundRect(int x1, int y1, int x2, int y2);
void show_color_bar();

void GUI_Write32CnChar(unsigned char x, unsigned char y, unsigned char *cn, unsigned short wordColor, unsigned short backColor);
void GUI_WriteASCII(unsigned char  x, unsigned char  y, unsigned char  *p, unsigned short  wordColor, unsigned short  backColor);

#endif /* USER_ILI9225_H_ */

main.c

#include "debug.h"
#include "ILI9225.h"


/* Global typedef */



/* Global define */
#define CHAR32_SHOW
/* Global Variable */

void LCD_GPIO_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStructure = {0};

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

   GPIO_InitStructure.GPIO_Pin = LCD_CS|LCD_RS|LCD_WR|LCD_RST|LCD_RD;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

   //16位并口
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
   GPIO_Init(LCD_PORT, &GPIO_InitStructure);


}


/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	SystemCoreClockUpdate();
	Delay_Init();
	USART_Printf_Init(115200);	
	printf("SystemClk:%d\r\n",SystemCoreClock);
	printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
	printf("This is printf example\r\n");

	LCD_GPIO_Init();

	InitLCD();

	while(1)
    {
	    show_color_bar();
	    GUI_Write32CnChar(10,10,"科技日期",VGA_WHITE,VGA_BLUE);
	    GUI_WriteASCII(10,60,"abcdefghijkl",VGA_WHITE,VGA_RED);
	    GUI_WriteASCII(10,90,"ABCDEFGHIJKL",VGA_WHITE,VGA_RED);
	    GUI_WriteASCII(10,120,"!@#$%^&*()~;:",VGA_WHITE,VGA_RED);
	    Delay_Ms(3000);
	    setColor(VGA_WHITE);
	    clrScr(VGA_RED);
	    fillRoundRect(50,50,100,100);
	    Delay_Ms(1000);
	    clrScr(VGA_GREEN);
	    fillRoundRect(50,50,100,100);
	    Delay_Ms(1000);
	    clrScr(VGA_BLUE);
	    fillRoundRect(50,50,100,100);
	    Delay_Ms(1000);
	    clrScr(VGA_YELLOW);
	    fillRoundRect(50,50,100,100);
	    setColor(VGA_RED);
	    drawCircle(100,100,50);
	    Delay_Ms(1000);

	}
}

二、总结

1、不会看屏幕引脚定义.开始找了一款LGDP4525和这个定义是一样的,试了一天不行。又查了一下,相同款还有ILI9225驱动的,引脚定义完全相同。试了一下可以。

ILI9225演示用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二分查找——经典题目合集

文章目录 &#x1f99c;69. x 的平方根&#x1f33c;题目&#x1f33b;算法原理&#x1f337;代码实现 &#x1f433;35. 搜索插入位置&#x1f33c;题目&#x1f33b;算法原理&#x1f337;代码实现 &#x1f9ad;852. 山脉数组的峰顶索引&#x1f33c;题目&#x1f33b;算法原…

IBM ELM—系统工程全生命周期管理平台

产品概述 Engineering Lifecycle Management是IBM提供的工程全生命周期管理组合工具&#xff0c;帮助企业降低开发成本&#xff0c;应对开发挑战并更快地发展其流程和实践。 随着产品变得更加复杂且数字化&#xff0c;传统的工程开发不再能及时且有效地满足系统工程的复杂度&a…

AD7021C 触摸感应加灯光调节芯片IC 可用于触摸台灯、触摸玩具灯等

AD7021C触摸感应 IC 是为实现人体触摸界面而设计的集成电路。可替代机械式轻触按键&#xff0c;实现防水防尘、密封隔离、坚固美观的操作界面。使用该芯片可以实现 LED 灯光亮度调节&#xff0c;方案所需的外围电路简单&#xff0c;操作方便。确定好灵敏度选择电容&#xff…

最新PHP熊猫头图片表情斗图生成源码

这是一款能生成熊猫头表情斗图的自适应系统源码&#xff0c;无论是在电脑还是手机上都可以正常使用&#xff01;这个源码集成了搜狗搜索图片接口&#xff0c;可以轻松地一键搜索数百万张图片&#xff0c;并且还包含了表情制作等功能模块。对于一些新站来说&#xff0c;这是一个…

商务俄语学习,柯桥基础入门教学,千万别小看俄语中的“что”

1、что до (чего) 至于 例&#xff1a; что до меня, то я не могу согласиться 至于我&#xff0c;我不能同意。 А что до зимовки... Ты приедешь в этом году? 说到冬天和过冬…你今年回来吗…

【unity实战】unity3D中的PRG库存系统和换装系统(附项目源码)

文章目录 先来看看最终效果前言素材简单绘制库存UI前往mixamo获取人物模型动画获取一些自己喜欢的装备物品模型库存系统换装系统装备偏移问题添加消耗品最终效果源码完结 先来看看最终效果 前言 之前2d的换装和库存系统我们都做过不少了&#xff0c;这次就来学习一个3d版本的&…

利用Python进行数据分析【送书第六期:文末送书】

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

MQTT协议消息代理服务远程连接

目录 1. Linux 搭建 Mosquitto 2. Linux 安装Cpolar 3. 创建MQTT服务公网连接地址 4. 客户端远程连接MQTT服务 5. 代码调用MQTT服务 6. 固定连接TCP公网地址 7. 固定地址连接测试 Mosquitto是一个开源的消息代理&#xff0c;它实现了MQTT协议版本3.1和3.1.1。它可以在不…

HCIP-三、VRRP+BFD

三、VRRPBFD 实验拓扑实验需求及解法 实验拓扑 实验需求及解法 //本实验模拟某公司网关冗余结构&#xff0c;按以下要求完成配置&#xff1a; //1.如图所示&#xff0c;配置 R1/2/3 的设备名称及 IP 地址。 //2.内外网通信。 //2.1 在 R1/2 上配置默认路由&#xff0c;保证 R1…

爆款文章有诀窍,内容创作者如何能持续产出优质内容

内容营销人有没有这么一种共鸣&#xff1a;10 万 那么多&#xff0c;为什么不能多我一个&#xff1f; 通常&#xff0c;我们把浏览量 / 阅读量高、转评赞数量高的内容看作爆款&#xff0c;而数据如果达到 10 万 则是超级爆款。因为&#xff0c;阅读量高意味着内容得到了大量的曝…

2023年03月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 小猫的程序如图所示,积木块的颜色与球的颜色一致。点击绿旗执行程序后,下列说法正确的是?( ) A:小猫一直在左右移动,嘴里一直说着“抓到了”。 B:小猫会碰到球,然后停止。…

[点云分割] 条件欧氏聚类分割

介绍 条件欧氏聚类分割是一种基于欧氏距离和条件限制的点云分割方法。它通过计算点云中点与点之间的欧氏距离&#xff0c;并结合一定的条件限制来将点云分割成不同的区域或聚类。 在条件欧氏聚类分割中&#xff0c;通常会定义以下两个条件来判断两个点是否属于同一个聚类&…

记录小白第一次EDUsrc:任意密码漏洞

目录 一、漏洞说明&#xff1a; 二、漏洞复现&#xff1a; 三、漏洞修复建议&#xff1a; 一、漏洞说明&#xff1a; xxxx学院身份认证系统有严重的逻辑设计缺陷&#xff1a;账户登录、手机登录、密码找回三个接口找到n个逻辑漏洞包括任意账号密码修改、信息泄露&#xff0…

AIGC ChatGPT4总结SQL优化细节操作

数据库SQL优化是一个复杂的过程,它通常涉及到许多不同的技术和方法。以下是一些常用的SQL优化策略: 1. **索引使用**:索引可以极大地加速查询速度。但是,索引并不总是有好处的,因为它们需要额外的空间来存储,并且在插入和更新数据时可能会减慢速度。因此,选择正确的字段…

windows系统安装ubuntu22.04虚拟机

镜像文件准备 镜像文件 官网 企业开源和Linux | Ubuntu 镜像下载地址 https://cn.ubuntu.com/download/server/step1 选择合适的版本下载 虚拟机安装 文件-- 新建虚拟机 选择镜像 修改安装路径 修改大小&#xff0c;最好60g&#xff0c;大一点 设置用户信息 设置虚拟机网络…

羊大师提示,羊奶都有哪些惊人功效?

羊奶不仅是一种美味的健康饮品&#xff0c;在近年来备受瞩目的的健康圈子里&#xff0c;羊奶还被赋予了更多的功效&#xff0c;成为一种备受推崇的保健品。羊奶不但富含营养&#xff0c;而且还有着非常多的益处&#xff0c;它能够用来美容、保健&#xff0c;甚至还可以治疗某些…

Java8新特性 ----- Lambda表达式和方法引用/构造器引用详解

前言 在讲一下内容之前,我们需要引入函数式接口的概念 什么是函数式接口呢? 函数式接口&#xff1a;有且仅有一个抽象方法的接口 java中函数式编程的体现就是Lambda表达式,你可以认为函数式接口就是适用于Lambda表达式的接口. 也可以加上注解来在编译层次上限制函数式接口 Fun…

音频采集的相关基础知识

本文引注: https://zhuanlan.zhihu.com/p/652629744 1.麦克风的种类 (1)模拟麦克风 ECM麦克风&#xff1a;驻极体电容麦克风(ECM)&#xff0c;典型的汽车ECM麦克风是一种将ECM单元与小型放大器电路整合在单个外壳中的装置。放大器提供一个模拟信号&#xff0c;其电压电平允许…

反编译-ApkTool

ApkTool下载地址&#xff1a; Apktool | ApktoolA tool for reverse engineering Android apk fileshttps://apktool.org/ 1、使用 apktool 解包 执行 java -jar apktool_2.4.1.jar d demo.apk -o demo 命令 java -jar apktool_2.4.1.jar d demo.apk -o demo 其中 d 后面是…

postman设置接口关联这样做,薪资直接涨3k

postman设置接口关联 在实际的接口测试中&#xff0c;后一个接口经常需要用到前一个接口返回的结果&#xff0c; 从而让后一个接口能正常执行&#xff0c;这个过程的实现称为关联。 在postman中实现关联操作的步骤如下&#xff1a; 1、利用postman获取上一个接口指定的返回值…