LCD有官方给我们提供的库,我们使用其非常简单,唯一要注意的就是LCD和LED的引脚冲突。
引脚状况
STM32CubeMX
端口配置
使能
比赛给的选手 资源数据包中有以下三个文件,(除去led相关的),将他们复制到自己项目中
代码部分
在项目中将上面三个文件添加进入项目即可
主要记住的几个函数
void LCD_Init(void); //初始化
void LCD_SetTextColor(vu16 Color); //设置文本颜色
void LCD_SetBackColor(vu16 Color); //设置背景颜色
void LCD_Clear(u16 Color); //清屏
void LCD_DisplayStringLine(u8 Line, u8 *ptr); //在哪行写字,字使用指针传递
处理引脚冲突
资源复用场景下经典应用方法,通过寄存器状态的保存与恢复,确保外设间独立工作;
主要用于解决 GPIO 端口复用导致的外设状态冲突问题
void LCD_Init(void) { //保存 uint16_t temp = GPIOC->ODR; //保存 LCD_CtrlLinesConfig(); dummy = LCD_ReadReg(0); if(dummy == 0x8230) { REG_8230_Init(); } else { REG_932X_Init(); } dummy = LCD_ReadReg(0); GPIOC->ODR = temp; //恢复 } void LCD_Clear(u16 Color) { //保存 uint16_t temp = GPIOC->ODR; //保存 u32 index = 0; LCD_SetCursor(0x00, 0x0000); LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(index = 0; index < 76800; index++) { LCD_WriteRAM(Color); } GPIOC->ODR = temp; //恢复 } void LCD_DisplayStringLine(u8 Line, u8 *ptr) { //保存 uint16_t temp = GPIOC->ODR; //保存 u32 i = 0; u16 refcolumn = 319;//319; while ((*ptr != 0) && (i < 20)) // 20 { LCD_DisplayChar(Line, refcolumn, *ptr); refcolumn -= 16; ptr++; i++; } GPIOC->ODR = temp; //恢复 }
main部分
LCD_Init();
LCD_Clear(White);
LCD_SetBackColor(White);
LCD_SetTextColor(Black);
while部分
这是比赛要求的显示屏幕,我们可以按照这个设置行数和列数
while (1)
{
/* USER CODE END WHILE */
char text[20];
sprintf(text," PARA");
LCD_DisplayStringLine(Line3,(uint8_t *)text);
sprintf(text," R=1");
LCD_DisplayStringLine(Line4,(uint8_t *)text);
sprintf(text," K=1");
LCD_DisplayStringLine(Line5,(uint8_t *)text);
/* USER CODE BEGIN 3 */
}