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 */}