开发板集成了SLCD,这种屏其实在日常的计算器、空调遥控器等应用方面比较常见,多应用于低功耗产品。不过在此之前并不知道是叫“SLCD屏”,所谓SLCD即“拼接专用液晶屏”,SLCD是液晶(LCD)的一个高档衍生品种,采用世界最先进的工业级的液晶面板,使用寿命长达6万小时。SLCD是一个完整的拼接显示单元,既能单独作为显示器使用,又可以拼接成超大屏幕使用。实现功能包括:单屏分割显示、单屏单独显示、任意组合显示、全屏拼接、竖屏显示,图像边框可选补偿或遮盖等。
灵动微MM32L0130系列MCU具有片上SLCD液晶显示控制器,SLCD驱动器是用于单色无源液晶显示器(SLCD)的数字驱动器,具有多达8个公共端和多达63个分段端,SLCD引脚最多为64个,因此最多可驱动240(60x4)或448(56x8)个段码。MM32L0136C7P板上SLCD特性如下:
• 可驱动40x4或36x8个段码
• 任意LCD引脚可配置成为COM或SEG功能
• 内置电荷泵,在电源电压下降时依然保持液晶屏清晰
• 支持静态、1/2、1/3、1/4、1/6和1/8占空比
• 可配置1/2、1/3和1/4偏压
• 对比度可调
• 显示帧率灵活控制
• 内置16*32bit显示数据寄存器,用于存储显示数据
• 支持闪烁功能,可选择闪烁1~8个段码或全部段码,频率0.5Hz/1Hz/2Hz/4Hz可配
• 可在除关机模式以外的所有低功耗模式下使用
SLCD驱动模块系统框图如下:
配置显示数据寄存器,官方给出如下示意图
开发板上的SLCD的引脚映射图如下,实验的效果正如图中所注明的,没用到的字符不会被显现。
测试一下SLCD屏的字符显示,实现计数累计,字符循环显示效果,部分代码如下:
void slcd_test(void)
{
slcd_init();
while(1)
{
LCD_DisplayDataUpdate();
DELAY_Ms(10);
}
}
void slcd_init(void)
{
u32 slcd_clk_source_freq;
SLCD_InitTypeDef slcd_struct;
SLCD_Prescaler_TypeDef pre_value = SLCD_Prescaler_1;
SLCD_Divider_TypeDef div_value = SLCD_Divider_16;
RCC_APB1PeriphClockCmd(RCC_APB1ENR_PWR, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1ENR_BKP, ENABLE);
if(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {
RCC_BackupResetCmd(ENABLE);
RCC_BackupResetCmd(DISABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSEConfig(RCC_LSE_OFF);
}
else {
PWR_BackupAccessCmd(ENABLE);
}
RCC_SLCD_ClockCmd(SLCD, ENABLE);
SLCD_DeInit();
void LCD_Clear(void)
{
SLCD->DR0 = 0;
SLCD->DR1 = 0;
SLCD->DR2 = 0;
SLCD->DR3 = 0;
SLCD->DR4 = 0;
SLCD->DR5 = 0;
SLCD->DR6 = 0;
SLCD->DR7 = 0;
SLCD->DR8 = 0;
SLCD->DR9 = 0;
SLCD->DR10 = 0;
SLCD->DR11 = 0;
SLCD->DR12 = 0;
SLCD->DR13 = 0;
SLCD->DR14 = 0;
SLCD->DR15 = 0;
}
工程编译完成后,下载到开发板中后,SLCD屏上显示数字不断累加,左上角显示四位整数值。
此次分享就到这儿了,非常感谢坛友提供的参考资料,后续有时间再深入探究SLCD的实现原理,咱们后会有期。
|