void LCD_Init(void)
{
// u16 DeviceCode;
RCC->APB2ENR|=1<<3; //PORTB时钟使能
RCC->APB2ENR|=1<<4; //PORTC时钟使能
RCC->APB2ENR|=1<<0; //辅助时钟使能
JTAG_Set(SWD_ENABLE); //禁止JTAG,使能SWD
//PORTB推挽输出
GPIOB->CRL=0x33333333;
GPIOB->CRH=0x33333333;
GPIOB->ODR&=0xFFFF;
//PORTC推挽输出
GPIOC->CRL&=0x00FFFFFF;
GPIOC->CRL|=0X33000000;
GPIOC->CRH&=0xFFFFF000;
GPIOC->CRH|=0x00000333;
GPIOC->ODR&=0x07C0;
delay_ms(50);
// LCD_WriteReg(0x0000,0x0001);
// delay_ms(50);
LCD_ReadReg(0x0000); //读取LCD型号,但没给赋值给其他变量
// printf("LCD ID:%x\n",DeviceCode);
//LCD寄存器初始化
LCD_WriteReg(0x0000,0x0000);
LCD_WriteReg(0x0000,0x0000);
LCD_WriteReg(0x0000,0x0000);
LCD_WriteReg(0x0000,0x0000);
LCD_WriteReg(0x00a4,0x0001);
delay_ms(20);
LCD_WriteReg(0x0060,0x2700);
LCD_WriteReg(0x0008,0x0202);
LCD_WriteReg(0x0030,0x0214);
LCD_WriteReg(0x0031,0x3715);
LCD_WriteReg(0x0032,0x0604);
LCD_WriteReg(0x0033,0x0e16);
LCD_WriteReg(0x0034,0x2211);
LCD_WriteReg(0x0035,0x1500);
LCD_WriteReg(0x0036,0x8507);
LCD_WriteReg(0x0037,0x1407);
LCD_WriteReg(0x0038,0x1403);
LCD_WriteReg(0x0039,0x0020);
LCD_WriteReg(0x0090,0x001a);
LCD_WriteReg(0x0010,0x0000);
LCD_WriteReg(0x0011,0x0007);
LCD_WriteReg(0x0012,0x0000);
LCD_WriteReg(0x0013,0x0000);
delay_ms(20);
LCD_WriteReg(0x0010,0x0730);
LCD_WriteReg(0x0011,0x0137);
delay_ms(20);
LCD_WriteReg(0x0012,0x01b8);
delay_ms(20);
LCD_WriteReg(0x0013,0x0f00);
LCD_WriteReg(0x002a,0x0080);
LCD_WriteReg(0x0029,0x0048);
delay_ms(20);
LCD_WriteReg(0x0001,0x0100);
LCD_WriteReg(0x0002,0x0700);
LCD_WriteReg(0x0003,0x1230);
LCD_WriteReg(0x0008,0x0202);
LCD_WriteReg(0x000a,0x0000);
LCD_WriteReg(0x000c,0x0000);
LCD_WriteReg(0x000d,0x0000);
LCD_WriteReg(0x000e,0x0030);
LCD_WriteReg(0x0050,0x0000);
LCD_WriteReg(0x0051,0x00ef);
LCD_WriteReg(0x0052,0x0000);
LCD_WriteReg(0x0053,0x013f);
LCD_WriteReg(0x0060,0x2700);
LCD_WriteReg(0x0061,0x0001);
LCD_WriteReg(0x006a,0x0000);
//LCD_WriteReg(0x0080,0x0000);
//LCD_WriteReg(0x0081,0x0000);
LCD_WriteReg(0x0090,0X0011);
LCD_WriteReg(0x0092,0x0600);
LCD_WriteReg(0x0093,0x0402);
LCD_WriteReg(0x0094,0x0002);
delay_ms(20);
LCD_WriteReg(0x0007,0x0001);
delay_ms(20);
LCD_WriteReg(0x0007,0x0061);
LCD_WriteReg(0x0007,0x0173);
LCD_WriteReg(0x0020,0x0000);
LCD_WriteReg(0x0021,0x0000);
LCD_WriteReg(0x00,0x22);
LCD_LED=1;//点亮背光
}
上面是型号为B505的LCD的初始化
int main(void)
{
u16 i=0,DeviceCode;
u16 color[6]={0xf800,0x01cf,0x841f,0x8430,0xffff,0xffe0};
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
LED_Init();
LCD_Init();
while(1)
{
DeviceCode=LCD_ReadReg(0x0000);
printf("LCD ID:%x\n",DeviceCode);
LCD_Clear(color);
i++;
if(i>=6)
i=0;
LED0=!LED0;
delay_ms(1000);
}
}
主函数是发送LCD ID和切换屏幕颜色。
现在问题来了,如果我把LCD初始化函数中红色字体注释掉,屏幕就变白色,主函数中执行切换颜色的代码没实际效果,这是为什么?
|