目录
基础知识:
代码分析:
LCD底层浅析:
官方接口
LCD是低功耗显示器件,可以通过并口控制,也可以通过串口控制。嵌入式竞赛实训平台使用的是240×320TFT LCD,通过并行接口与STM32
因为官方提供了LCD的.c和.h文件,引脚时钟都已经初始化好了,
在这里我就只说一下代码的移植和使用:
1,在src(放入lcd.c)和ins(放入LCD.h和字库)文件里添加对应位置文件
根据给的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_Clear(Blue);//先清除一下屏幕的里的蓝色
Blue:在.h函数中有宏定义
LCD_SetBackColor(Blue);设置背景颜色
LCD_SetTextColor(White);设置文字的颜色
LCD_DisplayStringLine(Line0, (uint8_t *)" ");设置显示的字符串,入口参数为第几行和内容。
上图就是官方例程的显示:
下面咱们自己调用一下,咱们利用滴答定时器的计数作用来写这个的动态显示
__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函数前面声明一下。
下图是咱们写的代码显示,
显示效果
常用的几个函数:
1、初始化函数:
转入这个函数里边
定义了一些时钟引脚等的初始化,
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; }