蓝桥杯嵌入式准备LCD

目录

基础知识: 

代码分析:

LCD底层浅析:


基础知识: 

蓝桥杯嵌入式准备LCD_第1张图片

官方接口 

LCD是低功耗显示器件,可以通过并口控制,也可以通过串口控制。嵌入式竞赛实训平台使用的是240×320TFT LCD,通过并行接口与STM32蓝桥杯嵌入式准备LCD_第2张图片

因为官方提供了LCD的.c和.h文件,引脚时钟都已经初始化好了,

在这里我就只说一下代码的移植和使用:

1,在src(放入lcd.c)和ins(放入LCD.h和字库)文件里添加对应位置文件

蓝桥杯嵌入式准备LCD_第3张图片

 蓝桥杯嵌入式准备LCD_第4张图片

代码分析:

根据给的LCD.h文件官方给了我们许多的函数那这些函数都要怎么用呐?

void LCD_Init(void);
void LCD_SetTextColor(vu16 Color);
void LCD_SetBackColor(vu16 Color);
void LCD_ClearLine(u8 Line);
void LCD_Clear(u16 Color);
void LCD_SetCursor(u8 Xpos, u16 Ypos);
void LCD_DrawChar(u8 Xpos, u16 Ypos, uc16 *c);
void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);
void LCD_DisplayStringLine(u8 Line, u8 *ptr);
void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width);
void LCD_WindowModeDisable(void);
void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction);
void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width);
void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius);
void LCD_DrawMonoPict(uc32 *Pict);
void LCD_WriteBMP(u32 BmpAddress);
void LCD_DrawBMP(u32 BmpAddress);
void LCD_DrawPicture(const u8* picture);

/*----- Medium layer function -----*/
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue);
u16 LCD_ReadReg(u8 LCD_Reg);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(u16 RGB_Code);
u16 LCD_ReadRAM(void);
void LCD_PowerOn(void);
void LCD_DisplayOn(void);
void LCD_DisplayOff(void);

/*----- Low layer function -----*/
void LCD_CtrlLinesConfig(void);

void LCD_BusIn(void);
void LCD_BusOut(void);

void LCD_Scanning(void);

因为我们在比赛过程当中不需要太了解lcd的底层,我们可以参考官方给的例程进行使用

官方给的例程中在main函数中先进行了初始化:

所以我们第一件事情就是进行初始化

将初始化函数加到自己的工程main函数中,

官方的例程接下来就是一片应用代码:

蓝桥杯嵌入式准备LCD_第5张图片

 LCD_Clear(Blue);//先清除一下屏幕的里的蓝色

Blue:在.h函数中有宏定义

LCD_SetBackColor(Blue);设置背景颜色

LCD_SetTextColor(White);设置文字的颜色
LCD_DisplayStringLine(Line0, (uint8_t *)"                    ");

设置显示的字符串,入口参数为第几行和内容。

蓝桥杯嵌入式准备LCD_第6张图片根据.h文件的宏定义可知定义了九行

蓝桥杯嵌入式准备LCD_第7张图片

 上图就是官方例程的显示:

下面咱们自己调用一下,咱们利用滴答定时器的计数作用来写这个的动态显示

__IO uint32_t uwTick_LCD_last;//控制执行速度
unsigned int i;//测试变量
unsigned char LCD_String_Disp[22];

void LCD_Scanning(void)
{	
    if(uwTick-uwTick_LCD_last<100) return ;//减速函数每隔多少时间扫描一下
	uwTick_LCD_last=uwTick;
	i++;
	LCD_SetBackColor(Cyan);
	LCD_SetTextColor(Red);
	sprintf((char *)LCD_String_Disp,"   num:i=%03d        ",i);
	LCD_DisplayStringLine(Line3,LCD_String_Disp);


	
}

 uwTick:是库函数中定义的一个全局变量,用来滴答定时器的中断计数的(每1ms计数一次),具体原因私信我给你解释。

sprintf函数C语言原型
sprintf()函数用于将格式化的数据写入字符串,其原型为:

int sprintf(char *str, char * format [, argument, ...]);

【参数】str为要写入的字符串;format为格式化字符串,与printf()函数相同;argument为变量

 将LCD_Scanning();函数放在主函数while循环里边。

将显示函数放在lcd.c函数的时候要记得在.h中声明一下

如果放在了主函数当中,在main函数之前不用声明,在main函数之后要在main函数前面声明一下。

下图是咱们写的代码显示,

显示效果

LCD底层浅析:

常用的几个函数:

蓝桥杯嵌入式准备LCD_第8张图片

 1、初始化函数:

蓝桥杯嵌入式准备LCD_第9张图片

 转入这个函数里边

蓝桥杯嵌入式准备LCD_第10张图片

 定义了一些时钟引脚等的初始化,

LCD_BusOut;//配置了一些的串并行接口

/*******************************************************************************
* Function Name  : LCD_BusIn
* Description    : Configures the Parallel interface for LCD(PortC)
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void LCD_BusIn(void)
{	
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	
	GPIO_InitStruct.Pin = GPIO_PIN_All;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); 		
}

/*******************************************************************************
* Function Name  : LCD_BusOut
* Description    : Configures the Parallel interface for LCD(PortC)
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void LCD_BusOut(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	
	GPIO_InitStruct.Pin = GPIO_PIN_All;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); 	
}

2、LCD_Clear(u16 Color);上边已经解释

3、

/*******************************************************************************
* Function Name  : LCD_SetTextColor
* Description    : Sets the Text color.
* Input          : - Color: specifies the Text color code RGB(5-6-5).
* Output         : - TextColor: Text color global variable used by LCD_DrawChar
*                  and LCD_DrawPicture functions.
* Return         : None
*******************************************************************************/
void LCD_SetTextColor(vu16 Color)
{
	TextColor = Color;
}
/*******************************************************************************
* Function Name  : LCD_SetBackColor
* Description    : Sets the Background color.
* Input          : - Color: specifies the Background color code RGB(5-6-5).
* Output         : - BackColor: Background color global variable used by 
*                  LCD_DrawChar and LCD_DrawPicture functions.
* Return         : None
*******************************************************************************/
void LCD_SetBackColor(vu16 Color)
{
	BackColor = Color;
}

你可能感兴趣的:(蓝桥杯嵌入式,单片机,stm32,嵌入式硬件)