【蓝桥杯】嵌入式编程_LCD模块

目录

增加lcd.c

LCD配置

LCD小练习

LCD与按键的搭配使用


无理论

由于赛方已经提前准备了相关的lcd模块的.c文件与头文件

所以我们不需要知晓lcd的原理 直接加入准备好的lcd文件就可以直接使用lcd功能

增加lcd.c

在目录 赛点资源数据包ES_2022\赛点资源数据包ES\2-新版竞赛平台\5-液晶驱动参考程序\HAL_06_LCD\Src

找到lcd.c

 复制到当前工程src目录下 平且将相应的头文件复制到inc目录下

要想使用lcd.h声明的函数 要在main.c下引用该头文件

LCD配置

#include <stdio.h> 
#include <string.h>
#include "main.h"  
#include "lcd.h"
__IO uint32_t uwTick_lcd;

void lcd_proc(void);

int main(void)
{
LCD_Init();
LCD_Clear(Blue);
LCD_SetBackColor(Blue);
LCD_SetTextColor(White); //初始化相关配置
while (1)
  {
		lcd_proc();

  }
}

void lcd_proc(void)
{
	if((uwTick-uwTick_lcd)<100) return;
	uwTick_lcd = uwTick;
	
	//用sprintf可以打印变量
	sprintf(&LCD_string[0],"welcome use LCD");
	LCD_DisplayStringLine(Line0,(uint8_t *)LCD_string);//借用line改变行数
}    

在lcd.c添加变量LCD_string的声明 在lcd.h扩展出去

lcd.c添加char LCD_string[21];

lcd.h添加extern char LCD_string[21];

查看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);

LCD小练习

B1按键实现lcd屏幕切换

标志位?、、异或?

LCD与按键的搭配使用

现实现 歌曲菜单 B3键下选歌曲  B2键上选歌曲 选中的那一行高亮显示。

void lcd_fun(void)
{
	
	static char song[10][10]={"abc","bcd","cde","def","ef"};
	
if(uwTick-uwTick_lcd<200) return;
			uwTick_lcd=uwTick;
	
	sprintf((char *)&uart_string[0],"    Musics menu");
	LCD_DisplayStringLine(Line1,(unsigned char *)&uart_string[0]);	
	
		sprintf((char *)&uart_string[0], " Music select: %s  ",(char *)&song[0]);
		if(Song_State == 1) 		LCD_SetBackColor(Green);
		LCD_DisplayStringLine(Line4, (unsigned char *)&uart_string[0]);				
		LCD_SetBackColor(White);
	
		sprintf((char *)&uart_string[0], " Music select: %s  ",(char *)&song[1]);
		if(Song_State == 2) 		LCD_SetBackColor(Green);
		LCD_DisplayStringLine(Line5, (unsigned char *)&uart_string[0]);				
		LCD_SetBackColor(White);
	
		sprintf((char *)&uart_string[0], " Music select: %s  ",(char *)&song[2]);
		if(Song_State == 3) 		LCD_SetBackColor(Green);
		LCD_DisplayStringLine(Line6, (unsigned char *)&uart_string[0]);				
		LCD_SetBackColor(White);
		
		sprintf((char *)&uart_string[0], " Music select: %s  ",(char *)&song[3]);
		if(Song_State == 4) 		LCD_SetBackColor(Green);
		LCD_DisplayStringLine(Line7, (unsigned char *)&uart_string[0]);				
		LCD_SetBackColor(White);
	
}

void key_song(void)
{
	if(uwTick-uwTick_time<100) return;
			uwTick_time=uwTick;
	unsigned char key_down=key_down_fun();
	if(key_down == B2)
	{
		Song_State--;
		if(Song_State == 0) Song_State=4;
	}
	if(key_down == B3)
	{

		Song_State++;
		if(Song_State == 5) Song_State=1;
	}
	
}

猜你喜欢

转载自blog.csdn.net/shelter1234567/article/details/129207480