STM32/51单片机实训day6(二)——Proteus8.6版本+STM32F103驱动LCD128x64显示信息|Keil5程序设计|串行并行通信笔记

2023-11-04

目录

main.c

lcd.c

lcd.h


 内  容:实现LCD显示  
学  时:4学时
知识点:LCD12864芯片介绍,读写操作时序,电路设计
重点: 读写操作时序
难点:读写操作时序
时间:2022年12月26日 13:30~16:20


总结
1 了解LCD12864芯片配置
2 使用proteus设计LCD显示电路
3 编程实现LCD显示

控制引脚:LCD_Struct.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出

数字引脚:LCD_Struct.GPIO_Mode = GPIO_Mode_Out_OD; // 开漏输出 

1 2引脚连接电源

15引脚  选择并行通讯 

控制引脚    LCD_Struct.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出

数字引脚    LCD_Struct.GPIO_Mode = GPIO_Mode_Out_OD; // 开漏输出 

main.c

	LCD_Init();
	LCD_DIS_Char(0,0,"Welcome System",MIDDLE);
	LCD_DIS_Char(2,0,"Please login",MIDDLE);
	

	
  while (1)
  {

		if(isRec==1){
			LCD_CLEAR_ALL();
			if(pd==1){
				LCD_DIS_Char(0,0,name,MIDDLE);
				//LCD_DIS_Char(3,0,id,MIDDLE);
				LCD_DIS_Char(6,0,"Login succeeded",MIDDLE);
			}else{
				LCD_DIS_Char(4,0,"Login failed",MIDDLE);
			}
			isRec=3;
		}
		if(isRec==3&&bh=='1'){
					LCD_CLEAR_ALL();
					LCD_DIS_Char(0,0,"Item:Ibuprofen",MIDDLE);
					 LCD_DIS_Char(3,0,"Number:",MIDDLE);
					 LCD_DIS_Number(3,60,8,MIDDLE);
					 LCD_DIS_Char(6,0,"Weight:gram",MIDDLE);
					bh=0;
		}
		if(isRec==3&&bh=='2'){
					LCD_CLEAR_ALL();
					LCD_DIS_Char(0,0,"Item:Penicillin",MIDDLE);
 LCD_DIS_Char(3,0,"Number:",MIDDLE);
 LCD_DIS_Number(3,60,16,MIDDLE);
 LCD_DIS_Char(6,0,"Weight:gram",MIDDLE);
					bh=0;
		}
		if(isRec==3&&bh=='3'){
					LCD_CLEAR_ALL();
					LCD_DIS_Char(0,0,"Item:Vitamin C",MIDDLE);
 LCD_DIS_Char(3,0,"Number:",MIDDLE);
 LCD_DIS_Number(3,60,3,MIDDLE);
 LCD_DIS_Char(6,0,"Weight:kilogram",MIDDLE);
					bh=0;
		}
		if(isRec==3&&bh=='4'){
					LCD_CLEAR_ALL();
					LCD_DIS_Char(0,0,"Item:Vitamin D",MIDDLE);
 LCD_DIS_Char(3,0,"Number:",MIDDLE);
 LCD_DIS_Number(3,60,86,MIDDLE);
 LCD_DIS_Char(6,0,"Weight:gram",MIDDLE);
					bh=0;
		}
		if(isRec==3&&bh=='5'){
					LCD_CLEAR_ALL();
					LCD_DIS_Char(0,0,"Item:Pepsin ",MIDDLE);
 LCD_DIS_Char(3,0,"Number:",MIDDLE);
 LCD_DIS_Number(3,60,59,MIDDLE);
 LCD_DIS_Char(6,0,"Weight:gram",MIDDLE);
					bh=0;
		}
	if(isRec==3&&bh=='6'){
					LCD_CLEAR_ALL();
					LCD_DIS_Char(0,0,"Item:Aspirin ",MIDDLE);
 LCD_DIS_Char(3,0,"Number:",MIDDLE);
 LCD_DIS_Number(3,60,9,MIDDLE);
 LCD_DIS_Char(6,0,"Weight:gram",MIDDLE);
					bh=0;
		}

lcd.c

#include "lcd.h"
#include "delay.h"

static	u8 INITIAL_COLUNM=0;



void LCD_FUNCTION_Config(void)
{
		GPIO_InitTypeDef LCD_Struct;
		RCC_APB2PeriphClockCmd(LCD12864_Periph,ENABLE);
		LCD_Struct.GPIO_Mode = GPIO_Mode_Out_PP; //控制引脚
		LCD_Struct.GPIO_Speed = GPIO_Speed_50MHz;
	
		LCD_Struct.GPIO_Pin = LCD12864_RES_GPIO;
		GPIO_Init(LCD12864_GPIO,&LCD_Struct);
	
		LCD_Struct.GPIO_Pin = LCD12864_E_GPIO; //高电平
		GPIO_Init(LCD12864_GPIO,&LCD_Struct);
	
	  LCD_Struct.GPIO_Pin = LCD12864_RS_GPIO;
		GPIO_Init(LCD12864_GPIO,&LCD_Struct);
	
		LCD_Struct.GPIO_Pin = LCD12864_RW_GPIO;
		GPIO_Init(LCD12864_GPIO,&LCD_Struct);
	
		LCD_Struct.GPIO_Pin = LCD12864_CS1_GPIO;
		GPIO_Init(LCD12864_GPIO,&LCD_Struct);
	
		LCD_Struct.GPIO_Pin = LCD12864_CS2_GPIO;
		GPIO_Init(LCD12864_GPIO,&LCD_Struct);
}  

void LCD_GPIO_Config(void)
{
	  GPIO_InitTypeDef LCD_Struct;
		RCC_APB2PeriphClockCmd(LCD12864_Periph,ENABLE);
		LCD_Struct.GPIO_Mode = GPIO_Mode_Out_OD; //数字引脚
		LCD_Struct.GPIO_Speed = GPIO_Speed_50MHz;
	  LCD_Struct.GPIO_Pin = LCD12864_DATA_GPIO;
		GPIO_Init(LCD12864_GPIO,&LCD_Struct);	
}

void LCD_Init(void)        //lcd初始化
{
	LCD_GPIO_Config();
	LCD_FUNCTION_Config();
	LCD12864_RES_0;
	delay_ms(10);
	LCD12864_RES_1;
	delay_ms(50);
	LCD_CMD_DIS(ON);
	LCD_INITIAL_COLUNM(INITIAL_COLUNM);
	
}

void LCD_GPIO_MASK(u8 data)       //数据掩码包装 
{
	u16 mask;
	mask = GPIO_ReadOutputData(LCD12864_GPIO) & 0XFF00 ; 
	
	mask = mask | data ;
	GPIO_Write(LCD12864_GPIO,mask);
}

void LCD_CMD_BUSY(void)    //忙检测
{
	LCD12864_RS_CMD;
	LCD12864_RW_R;
	LCD12864_E_1;
	LCD_GPIO_MASK(0xFF);
	while(1)
	{
		LCD12864_E_0;
		delay_us(2);
		LCD12864_E_1;
		if(!(GPIO_ReadInputData(LCD12864_GPIO)&CMD_BUSY))
			break;
	}
	LCD12864_E_0;
}

//parameter: ON/OFF
void LCD_CMD_DIS(u8 Switch)
{
	LCD_CMD_BUSY();
	LCD12864_RS_CMD;
	LCD12864_RW_W;
	LCD12864_E_1;
	if(Switch)
		LCD_GPIO_MASK(CMD_DIS_ON);
	else
		LCD_GPIO_MASK(CMD_DIS_OFF);
	delay_us(2);
	LCD12864_E_0;
}


void LCD_DIS_SELECT(u8 select)   //0全灭 1左屏 2右屏 3全屏
{
	select%=4;
	switch(select)
	{
		case DIS_RIGHT:
			LCD12864_CS2_ON;
			LCD12864_CS1_OFF;
			break;
		case DIS_LEFT:
			LCD12864_CS2_OFF;
			LCD12864_CS1_ON;
			break;
		case DIS_ALL:
			LCD12864_CS2_ON;
			LCD12864_CS1_ON;
			break;
		case DIS_NONE:
			LCD12864_CS2_OFF;
			LCD12864_CS1_OFF;
			break;
	}
}

//指令起始行
//parameter: 0-63
void LCD_INITIAL_COLUNM(u8 Colunm)
{
	Colunm%=64;
	Colunm = 64 - Colunm;
	LCD_CMD_BUSY();
	LCD12864_RS_CMD;
	LCD12864_RW_W;
	LCD12864_E_1;
	Colunm = CMD_COLUNM|Colunm;
	LCD_GPIO_MASK(Colunm);
	delay_us(2);
	LCD12864_E_0;
}

//指令写入数据显示列
//parameter: 0-128
void LCD_CMD_Line(u8 Line)
{
	Line %= 128; 
	if(Line<64)
	{
		LCD_DIS_SELECT(DIS_LEFT);
	}
	else
	{
		LCD_DIS_SELECT(DIS_RIGHT);
	}
	LCD_CMD_BUSY();
	LCD12864_RS_CMD;
	LCD12864_RW_W;
	LCD12864_E_1;
	Line = CMD_LINE|Line;
	LCD_GPIO_MASK(Line);
	delay_us(2);
	LCD12864_E_0;
}

//指令写入数据显示页
//parameter: 0-7
void LCD_CMD_PAGE(u8 Page)
{
	Page%=8;
	LCD_CMD_BUSY();
	LCD12864_RS_CMD;
	LCD12864_RW_W;
	LCD12864_E_1;
	Page = CMD_PAGE|Page;
	LCD_GPIO_MASK(Page);
	delay_us(2);
	LCD12864_E_0;
}

//写入数据0-7行
void LCD_CMD_COLUNM(u8 Colunm)
{
	Colunm%=8;
	Colunm=Colunm-INITIAL_COLUNM/8;
	LCD_CMD_PAGE(Colunm);
}

//计算数据长度
u8 LCD_NUMS_SIZE(int num)
{
	u8 size=0;
	if(num==0)
	{
		size=1;
	}else
	{
		while(num)
		{
			size++;
			num=num/10;
		}
	}
	return size;
}

int LCD_POW(u8 mi)  //计算10的次方
{
	int di=1;
	while(mi--)
	{
		di=di*10;
	}
	return di;
}

void LCD_DATA_WRIRE(u8 data)   //写一位数据
{
	LCD_CMD_BUSY();
	LCD12864_RS_DATA;
	LCD12864_RW_W;
	LCD12864_E_1;
	LCD_GPIO_MASK(data);
	delay_us(2);
	LCD12864_E_0;
}

//显示一个字符 支持小、中尺寸  反侧显示
//parameter: 行0-7 列0-127 data数据 size尺寸SMALL MIDDLE
void LCD_DIS_Char(u8 row,u8 col,u8* data,int size)
{
	u8 length=0;
	u8 line;
	u8 i;
	row%=8;
	col%=128;
	LCD_CMD_Line(col);
	line=col-1;
	if(size==SMALL)
	{
		LCD_CMD_COLUNM(row);
		while(data[length])
		{
			for(i=0;i<6;i++)
			{
				line+=1;
				if(line==64)
				{
					LCD_CMD_Line(line);
					LCD_CMD_COLUNM(row);
				}else if(line==128)
				{
					line=0;
					LCD_CMD_Line(line);
					LCD_CMD_COLUNM(row);
				}
				LCD_DATA_WRIRE(CHAR_SMALL[data[length]-32][i]);
			}	
			length++;
		}
	}else if(size==MIDDLE)
	{
		while(data[length])
		{
			LCD_CMD_COLUNM(row);
			for(i=0;i<16;i++)
			{
				line+=1;
				if(i==8)
				{
					if(line<8)
						line=128-(8-line);
					else
						line-=8;
					LCD_CMD_Line(line);
					LCD_CMD_COLUNM(row+1);
				}
				else if(line==64)
				{
					LCD_CMD_Line(line);
					if(i<8)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=8)
					{
						LCD_CMD_COLUNM(row+1);
					}
				}else if(line==128)
				{
					line=0;
					LCD_CMD_Line(line);
					if(i<8)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=8)
					{
						LCD_CMD_COLUNM(row+1);
					}	
				}
				LCD_DATA_WRIRE(CHAR_MIDDLE[data[length]-32][i]);
			}
			length++;
		}
	}
}

//写数字 支持小、中尺寸 数字可支持小数  小数位数只包括2位  反侧显示
//parameter: 行0-7 列0-127 data数据 size尺寸SMALL MIDDLE
void LCD_DIS_Number(u8 row,u8 col,float num,int size)
{
	u8 line;
	u8 length;
	u8 i;
	u8 flag=0;
	float number=0;
	row%=8;
	col%=128;
	length=LCD_NUMS_SIZE((int)num);
	LCD_CMD_Line(col);
	line=col-1;
	if(num-(int)num>0)
	{
		flag=1;
		number=num;
	}
	if(size==SMALL)
	{
		LCD_CMD_COLUNM(row);//1行
		while(length--)//6位
		{
			for(i=0;i<6;i++)
			{
				line+=1;
				if(line==64)
				{
					LCD_CMD_Line(line);
					LCD_CMD_COLUNM(row);
				}else if(line==128)
				{
					line=0;
					LCD_CMD_Line(line);
				}
				if(flag==2)
				{
					LCD_DATA_WRIRE(CHAR_SMALL[14][i]);
				}else
					LCD_DATA_WRIRE(CHAR_SMALL[(int)num/LCD_POW(length)+16][i]);	
			}
			if(flag==2)
			{
				flag=0;
				continue;
			}
			num=(int)num%LCD_POW(length);	
			if(flag==1&&length==0)
			{
				flag=2;
				length=3;
				num=(int)((number- (int)number)*100);
			}
		}
	}else if(size==MIDDLE)//中尺寸
	{
		while(length--)
		{
			LCD_CMD_COLUNM(row);
			for(i=0;i<16;i++)
			{
				line+=1;
				if(i==8)
				{
					if(line<8)
						line=128-(8-line);
					else
						line-=8;
					LCD_CMD_Line(line);
					LCD_CMD_COLUNM(row+1);
				}
				else if(line==64)
				{
					LCD_CMD_Line(line);
					if(i<8)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=8)
					{
						LCD_CMD_COLUNM(row+1);
					}
				}else if(line==128)
				{
					line=0;
					LCD_CMD_Line(line);
					if(i<8)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=8)
					{
						LCD_CMD_COLUNM(row+1);
					}
				}
				if(flag==2)
				{
					LCD_DATA_WRIRE(CHAR_MIDDLE[14][i]);
				}else				
					LCD_DATA_WRIRE(CHAR_MIDDLE[(int)num/LCD_POW(length)+16][i]);
			}
			if(flag==2)
			{
				flag=0;
				continue;
			}
			num=(int)num%LCD_POW(length);
			if(flag==1&&length==0)
			{
				flag=2;
				length=3;
				num=(int)((number-(int)number)*100);
			}
		}
	}else if(size==LONG)//大尺寸
	{
		while(length--)
		{
			LCD_CMD_COLUNM(row);
			for(i=0;i<36;i++)
			{
				line+=1;
				if(i==12)
				{
					if(line<12)
						line=128-(12-line);
					else
						line-=12;
					LCD_CMD_Line(line);
					LCD_CMD_COLUNM(row+1);
				}else if(i==24)
				{
					if(line<12)
						line=128-(12-line);
					else
						line-=12;
					LCD_CMD_Line(line);
					LCD_CMD_COLUNM(row+2);
				}
				else if(line==64)
				{
					LCD_CMD_Line(line);
					if(i<12)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=12&&i<24)
					{
						LCD_CMD_COLUNM(row+1);
					}else if(i>=24)
					{
						LCD_CMD_COLUNM(row+2);
					}
				}else if(line==128)
				{
					line=0;
					LCD_CMD_Line(line);
					if(i<12)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=12&&i<24)
					{
						LCD_CMD_COLUNM(row+1);
					}else if(i>=24)
					{
						LCD_CMD_COLUNM(row+2);
					}
				}	
				if(flag==2)
				{
					LCD_DATA_WRIRE(NUMBER_LONG[10][i]);
				}else
					LCD_DATA_WRIRE(NUMBER_LONG[(int)num/LCD_POW(length)][i]);
			}
			if(flag==2)
			{
				flag=0;
				continue;
			}
			num=(int)num%LCD_POW(length);
			if(flag==1&&length==0)
			{
				flag=2;
				length=3;
				num=(int)((number-(int)number)*100);
			}
		}
	}
}

//写汉字   支持中、大尺寸  data为库
void LCD_DIS_WORD(u8 row,u8 col,u8* data,int size)
{
	u8 length=0;
	u8 i;
	u8 line;
	row%=8;
	col%=128;
	LCD_CMD_Line(col);
	line=col-1;
	if(size==MIDDLE)
	{
		while(data[length]!=0)
		{
			LCD_CMD_COLUNM(row);
			for(i=0;i<20;i++)
			{
				line+=1;
				if(i==10)
				{
					if(line<10)
						line=128-(10-line);
					else
						line-=10;
					LCD_CMD_Line(line);
					LCD_CMD_COLUNM(row+1);
				}
				else if(line==64)
				{
					LCD_CMD_Line(line);
					if(i<10)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=10)
					{
						LCD_CMD_COLUNM(row+1);
					}
				}else if(line==128)
				{
					line=0;
					LCD_CMD_Line(line);
					if(i<10)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=10)
					{
						LCD_CMD_COLUNM(row+1);
					}
				}
				LCD_DATA_WRIRE(WORD_MIDDLE[data[length]-1][i]);
			}
			length++;
		}
	}else if(size==LONG)
	{
		while(data[length]!=0)
		{
			LCD_CMD_COLUNM(row);
			for(i=0;i<32;i++)
			{
				line+=1;
				if(i==16)
				{
					if(line<16)
						line=128-(16-line);
					else
						line-=16;
					LCD_CMD_Line(line);
					LCD_CMD_COLUNM(row+1);
				}
				else if(line==64)
				{
					LCD_CMD_Line(line);
					if(i<16)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=16)
					{
						LCD_CMD_COLUNM(row+1);
					}
				}else if(line==128)
				{
					line=0;
					LCD_CMD_Line(line);
					if(i<16)
					{
						LCD_CMD_COLUNM(row);
					}else if(i>=16)
					{
						LCD_CMD_COLUNM(row+1);
					}
				}
				LCD_DATA_WRIRE(WORD_LONG[data[length]-1][i]);
			}
			length++;
		}
	}
}

//图片显示 尺寸64*128
void LCD_DIS_PICTURE(void)
{
	u8 row;
	u8 col;
	for(row=0;row<8;row++)
	{
		LCD_CMD_Line(0);
		LCD_CMD_COLUNM(row);
		for(col=0;col<128;col++)
		{
			if(col==64){
				LCD_CMD_Line(64);
				LCD_CMD_COLUNM(row);
			}
			if(col<64)
			{
				LCD_DATA_WRIRE(BMP_TEST[row*2][col]);
			}else if(col>=64)
			{
				LCD_DATA_WRIRE(BMP_TEST[row*2+1][col-64]);
			}
		}
		
	}
}
//清除屏幕单独一行
void LCD_CLEAR_COL(u8 row)
{
	u8 j;
	LCD_DIS_SELECT(DIS_ALL);
	LCD_CMD_COLUNM(row);
	for(j=0;j<128;j++)
	{
		LCD_DATA_WRIRE(0xFF);
	}
}
//清除全屏
void LCD_CLEAR_ALL(void)
{
	u8 i;
	u8 j;
	LCD_DIS_SELECT(DIS_ALL);
	for(i=0;i<8;i++)
	{
		LCD_CMD_COLUNM(i);
		for(j=0;j<128;j++)
		{
			LCD_DATA_WRIRE(0xFF);
		}
	}
}

lcd.h

#ifndef __LCD_H
#define	__LCD_H


#include "stm32f10x.h"
#include "word.h"

#define LCD12864_GPIO     GPIOC
#define LCD12864_Periph   RCC_APB2Periph_GPIOC
#define LCD12864_E_GPIO   GPIO_Pin_8
#define LCD12864_RW_GPIO  GPIO_Pin_9
#define LCD12864_RS_GPIO  GPIO_Pin_10
#define LCD12864_CS2_GPIO GPIO_Pin_11
#define LCD12864_CS1_GPIO GPIO_Pin_12
#define LCD12864_RES_GPIO GPIO_Pin_13
#define LCD12864_DATA_GPIO     GPIO_Pin_0|GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6|GPIO_Pin_7

#define LCD12864_RES_0  GPIO_ResetBits(LCD12864_GPIO,LCD12864_RES_GPIO)
#define LCD12864_RES_1  GPIO_SetBits(LCD12864_GPIO,LCD12864_RES_GPIO)

#define LCD12864_E_0    GPIO_ResetBits(LCD12864_GPIO,LCD12864_E_GPIO)
#define LCD12864_E_1    GPIO_SetBits(LCD12864_GPIO,LCD12864_E_GPIO)

#define LCD12864_RW_W   GPIO_ResetBits(LCD12864_GPIO,LCD12864_RW_GPIO)
#define LCD12864_RW_R   GPIO_SetBits(LCD12864_GPIO,LCD12864_RW_GPIO)

#define LCD12864_RS_CMD  GPIO_ResetBits(LCD12864_GPIO,LCD12864_RS_GPIO)
#define LCD12864_RS_DATA GPIO_SetBits(LCD12864_GPIO,LCD12864_RS_GPIO)

#define LCD12864_CS1_ON   GPIO_ResetBits(LCD12864_GPIO,LCD12864_CS1_GPIO)
#define LCD12864_CS1_OFF  GPIO_SetBits(LCD12864_GPIO,LCD12864_CS1_GPIO)

#define LCD12864_CS2_ON  GPIO_ResetBits(LCD12864_GPIO,LCD12864_CS2_GPIO)
#define LCD12864_CS2_OFF GPIO_SetBits(LCD12864_GPIO,LCD12864_CS2_GPIO)

//开启或关闭
#define ON  1
#define OFF 0

//LCD命令
#define CMD_DIS_ON   0X3F
#define CMD_DIS_OFF  0X3E
#define CMD_BUSY     0X80
#define CMD_COLUNM   0XC0
#define CMD_LINE     0X40
#define CMD_PAGE     0XB8

//显示屏幕选择
#define DIS_NONE  0
#define DIS_LEFT  1
#define DIS_RIGHT 2
#define DIS_ALL   3

//尺寸
#define SMALL  1
#define MIDDLE 2
#define LONG   3

//方向选择
#define UP   1
#define DOWN 2


//内部处理函数
void LCD_CMD_DIS(u8 Switch);   //开关函数
void LCD_CMD_COLUNM(u8 Colunm);//指定初始行
void LCD_CMD_Line(u8 Line);    //写入列
void LCD_CMD_COLUNM(u8 Colunm); //写入页
void LCD_INITIAL_COLUNM(u8 Colunm);//初始行
void LCD_DATA_WRIRE(u8 data);  //写一位数据
void LCD_CMD_PAGE(u8 Page);    //初始页

//外部调用函数
void LCD_Init(void);           //初始化
void LCD_DIS_Char(u8 row,u8 col,u8* data,int size);//显示字符 
void LCD_MODE_ROLL(u8 path,u8 step,u8 direction,u16 delay);//滚动模式
void LCD_DIS_Number(u8 row,u8 col,float num,int size);//显示数字
void LCD_CLEAR_COL(u8 row);//清零一行
void LCD_CLEAR_ALL(void);//清屏
void LCD_DIS_WORD(u8 row,u8 col,u8* data,int size);//写字
void LCD_DIS_PICTURE(void);//显示罗小黑图片
#endif  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32/51单片机实训day6(二)——Proteus8.6版本+STM32F103驱动LCD128x64显示信息|Keil5程序设计|串行并行通信笔记 的相关文章

  • 炒冷饭,springboot自定义logo详解

    初学springboot的朋友 是不是经常能看到项目启动时日志打印的springboot图标logo 有没有人想让他长成自己的样子 现在我就告诉你 如果不想显示logo 你可以在配置文件中增加如下配置 spring main banner

随机推荐

  • 64位操作系统不能安装64位虚拟机的解决办法

    很多人都遇到过这样的情况把 就是自己的电脑CPU明明是64的 为什么安装64的虚拟机却不能安装 安装时出现如下错误 但是在真实机上安装却没有问题 这是为什么呢 这是因为你电脑的硬件虚拟化没有开启 据说host系统是64位的 guest系统才
  • 1.错误处理org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core。是什么原因造成

    解决方法 tomcat 8 5 启用项目时提示 无法在web xml或使用此应用程序部署的jar文件中解析绝对uri http java sun com jsp jstl core 项目需要扫描Tld文件 修改一下tomcat 配置conf
  • retrofit应用详解与源码解析--奇技淫巧

    本文出自门心叼龙的博客 属于原创类容 未经允许 不得转载 本专栏的同步视频教程已经发布到CSDN学院 https edu csdn net course detail 30408 文章目录 请求超时设置 日志拦截器的设置 网络的缓存设置 自
  • linux shell中\w \s \d \b ^ $等常用匹配用法

    正则表达式 w s d b 用法 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线 s 匹配任意的空白符 d 匹配数字 等价于 0 9 D 匹配非数字字符 b 匹配单词的开始或结束 匹配字符串的开始 匹配字符串的结束 其中 A Z 表
  • running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.6 GB of

    昨天使用hadoop跑五一的数据 发现报错 Container pid 47660 containerID container 1453101066555 4130018 01 000067 is running beyond physic
  • starUML教程-用例图/类图

    用例图 也称为用户模型图 是从软件需求分析到最终实现的第一步 它是从客户的角度来描述系统功能 它包含3个基本组件 1 参与者 与系统打交道的人或使用该系统的人 2 用例 表示该系统的某项完整功能 3 关系 定义用例之间的关系 泛化关系 扩展
  • 蓝桥杯每日一题(12):猜年龄(小明)(python)

    Topic 来道简单的 小明带两个妹妹参加元宵灯会 别人问她们多大了 她们调皮地说 我们俩的年龄之积是年龄之和的6倍 小明又补充说 她们可不是双胞胎 年龄差肯定也不超过8岁啊 请你写出 小明的较小的妹妹的年龄 Solution 填空题以快为
  • 【web安全】——命令执行漏洞(RCE)详解

    作者名 Demo不是emo 主页面链接 主页传送门创作初心 舞台再大 你不上台 永远是观众 没人会关心你努不努力 摔的痛不痛 他们只会看你最后站在什么位置 然后羡慕或鄙夷座右铭 不要让时代的悲哀成为你的悲哀专研方向 网络安全 数据结构 每日
  • 华为OD机试 - 找出两个整数数组中同时出现的整数(Java)

    题目描述 现有两个整数数组 需要你找出两个数组中同时出现的整数 并按照如下要求输出 有同时出现的整数时 先按照同时出现次数 整数在两个数组中都出现并目出现次数较少的那个 进行归类 然后按照出现次数从小到大依次按行输出 没有同时出现的整数时
  • 区块链分布式存储

    想知道更多区块链技术知识 请百度 链客区块链技术问答社区 链客 有问必答 BAT垄断了互联网创业道路 DAPP成为创投界新趋势 区块链革命引领市场变天 区块链 创业当红 互联网 创业成为经典 Dapp 区块链 应用 将会如何改变我们的互联网
  • Nacos配置中心一直连接本地问题&解决

    最近使用写了一个微服务的demo 使用nacos做配置中心 项目启动我的nacos一直去连接本地 配置文件中也指定了nacos的地址 后来 也是查阅资料才得知 bootstrap yml bootstrap properties 用来在程序
  • Vue解决CDN引入的echarts,通过ajax异步请求的数据不能被正确渲染到视图层的问题

    在参加计算机设计大赛做作品的时候遇到的一个困难 花了挺长时间才解决 在这里做个记录 一 这里先介绍如何CDN引入ECharts 在需要用到ECharts的界面加入 即可 或者先下载好这个文件 src改为这个文件的相对路径 二 以南丁格尔玫瑰
  • 数据结构与算法分析--Java语言描述(第二章(1))

    习题2 8 假设需要生成前N个自然数的一个随机置换 例如 4 1 2 5 2 和 3 1 4 2 5 就是合法的置换 但 5 4 1 2 1 却不是 因为数1出现了两次而数 3 缺没有 这个程序常常用于模拟一些算法 我们假设存在一个随机数生
  • 最快可达 SwinIR 4倍的高效超分网络

    本文首发于 我爱计算机视觉 如需转载等事宜请联系我爱计算机视觉 作者单位 香港理工大学 OPPO 论文链接 https arxiv org abs 2203 06697 代码链接 https github com xindongzhang
  • 如何用NPM删除node_modules文件夹

    大家在日常的开发中相必都遇到过如何快速方便的删除node modules文件夹的问题 很明显如果用常规方式会很费时费力 这里教给大家一种快捷的方式 通过npm命令来删除node modules文件夹 首先通过npm安装删除工具 npm in
  • 10行代码实现Java文件大小格式化,支持GB、TB到YB可再扩展

    话不多说 直接上代码 自己实现的 private static String fileSizeToText Long size Double unit 1024D sizeUnit unit String sizes B KB MB GB
  • 字符串匹配算法总结

    http blog csdn net WINCOL article details 4795369 KMP虽然经典 但是理解起来极其复杂 好不容易理解好了 便起码来巨麻烦 老子就是今天图书馆在写了几个小时才勉强写了一个有bug的 效率不高的
  • L2TP/IPSEC搭建详细步骤

    背景 长沙分公司访问北京总公司的办公OA业务 目前的方法是通过在北京总公司出口防火墙上配置OA业务的端口映射 然后在长沙分公司通过输入北京总部给的域名带上映射的端口即可访问 但该访问过程经过公网 存在数据被截取的风险 当前北京总公司空闲一台
  • github前端插件大全

    常用的插件和库 2017年09月12日 11 42 08 阅读数 1300 本文整合罗列一些平时工作或者练手项目中很可能用到的 github上实用 轻量级 无依赖的插件和库 包括功能插件 UI组件 炫酷动画 前沿技术等 让你在少造轮子的同时
  • STM32/51单片机实训day6(二)——Proteus8.6版本+STM32F103驱动LCD128x64显示信息|Keil5程序设计|串行并行通信笔记

    目录 main c lcd c lcd h 内 容 实现LCD显示 学 时 4学时 知识点 LCD12864芯片介绍 读写操作时序 电路设计 重点 读写操作时序 难点 读写操作时序时间 2022年12月26日 13 30 16 20 总结