【Lanqiao Cup Embedded】 Resuelve el conflicto entre LCD y LED

1. Busque el archivo lcd.h y busque las siguientes tres funciones a continuación:

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
}

Referencia: https://blog.csdn.net/weixin_45775710/article/details/108223836

Supongo que te gusta

Origin blog.csdn.net/qq_45689790/article/details/114645049
Recomendado
Clasificación