【蓝桥杯嵌入式】解决 LCD与LED冲突的方法

1、找到lcd.h文件,并且在下面找到下面三个函数:

void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(u16 RGB_Code);
三个函数在首加上u16 pcout = GPIOC->ODR,尾加上GPIOC->ODR = pcout,在改变GPIOC->ODR寄存器的值前将其保留,
直到lcd完成写操作再把值还给GPIOC->ODR寄存器
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{
    
    
	u16 pcout = GPIOC->ODR;  //声明临时变量,保留ODR
	GPIOB->BRR = 0x0200;  
	GPIOB->BRR = 0x0100;  
	GPIOB->BSRR = 0x0020; 

	GPIOC->ODR = LCD_Reg; 
	GPIOB->BRR = 0x0020; 
	GPIOB->BSRR = 0x0020; 
	GPIOB->BSRR = 0x0100; 

	GPIOC->ODR = LCD_RegValue; 
	GPIOB->BRR = 0x0020;   
	GPIOB->BSRR = 0x0020; 
	GPIOB->BSRR = 0x0100; 
	GPIOC->ODR = pcout;  //恢复ODR
}
void LCD_WriteRAM_Prepare(void)
{
    
     
	u16 pcout = GPIOC->ODR; //声明临时变量,保留ODR
	GPIOB->BRR = 0x0200;  
	GPIOB->BRR = 0x0100; 
	GPIOB->BSRR = 0x0020; 

	GPIOC->ODR = R34;     
	GPIOB->BRR = 0x0020;   
	GPIOB->BSRR = 0x0020;
	GPIOB->BSRR = 0x0100; 

	GPIOB->BSRR = 0x0200; 
	GPIOC->ODR = pcout;//恢复ODR
}
void LCD_WriteRAM(u16 RGB_Code)
{
    
    
	u16 pcout = GPIOC->ODR;//声明临时变量,保留ODR
	GPIOB->BRR = 0x0200;  
	GPIOB->BSRR = 0x0100; 
	GPIOB->BSRR = 0x0020; 

	GPIOC->ODR = RGB_Code;
	GPIOB->BRR = 0x0020;  
	GPIOB->BSRR = 0x0020; 
	GPIOB->BSRR = 0x0100; 

	GPIOB->BSRR = 0x0200; 
	GPIOC->ODR = pcout;//恢复ODR
}

参考:https://blog.csdn.net/weixin_45775710/article/details/108223836

猜你喜欢

转载自blog.csdn.net/qq_45689790/article/details/114645049