void LCD_Init(void)
{
/* LCD使用外部32K做时钟源,需要先使能32K晶振 */
CLK->PWRCTL |= (0x1 << CLK_PWRCTL_LXT_EN_Pos); // LXT Enable
/* 等待晶振稳定 */
CLK_WaitClockReady(CLK_CLKSTATUS_LXT_STB_Msk);
/* 使能LCD的时钟 */
CLK->APBCLK |= CLK_APBCLK_LCD_EN;
/* 配置LCD多功能引脚: COMs, SEGs, V1 ~ V3, DH1, DH2,并关闭相应引脚的数字通路 */
MFP_LCD_TYPEA();
/* LCD 初始化,使用C-Type, 4个COM,1/3 bias,频率除以64,充电泵充电到3V */
LCD_Open(LCD_C_TYPE, 4, LCD_BIAS_THIRD, LCD_FREQ_DIV64, LCD_CPVOl_3V);
LCD_EnableDisplay();
/*全屏点亮*/
LCD->MEM_0 = 0x3F3F3F3F;
LCD->MEM_1 = 0x3F3F3F3F;
LCD->MEM_2 = 0x3F3F3F3F;
LCD->MEM_3 = 0x3F3F3F3F;
LCD->MEM_4 = 0x3F3F3F3F;
LCD->MEM_5 = 0x3F3F3F3F;
LCD->MEM_6 = 0x3F3F3F3F;
LCD->MEM_7 = 0x3F3F3F3F;
LCD->MEM_8= 0x3F3F3F3F;
}
上面的代码因为LCD要用外部32K做时钟源,所以先使能32K晶振并等待晶振稳定。因为LCD只能选择32K做时钟源,所以不用再选择时钟源。然后使能LCDIP的时钟,并配置多功能引脚,关闭相关引脚的数字通路。LCD配置为C-Type,1/3偏压,频率除以64就是32K/64=512 如果LCD会闪,或者某些地方特别黑/特别淡,这个一般有2个原因:LCD频率太快、给LCD的电压太高/太低 一般查看如下几点: ² 频率太快,可以调整 LCD_FREQ_DIV64的值 ² LCD的电压太高,如果是 C-Type就调整一下充电泵的电压,如果是 R-Type/Ext_C-Type调整一下 VLCD的电压。 ² 另外量一下 V1/V2/V3 输出的电压是不是 1/3 VLCD,2/3VLCD,VDD 和 GND,如果不是,可能 V1/V2/V3 外面没有接电容到地,所以电压稳不住。接上电容应该就可以了。
|