华大单片机HC32L136笔段式段码LCD显示
华大单片机LCD简介华大单片机LCD 控制器是一款适用于单色无源液晶显示器(LCD)的数字控制器/驱动器,以HC32L136K8TA为例,最多具有8 个公用端子(COM)和 40 个区段端子(SEG),用以驱动 160 (4x40)或 288 (8x36)个 LCD 图像元素。其它型号端子的确切数量取决于数据手册中所述的器件引脚。LCD 主要特性
高度灵活的帧速率控制。
支持静态、1/2、1/3、1/4、1/6 和 1/8 占空比。
支持 1/2、1/3 偏置。
多达 16 个寄存器的 LCD 数据 RAM。
可通过软件配置 LCD 的对比度。
3 种驱动波形生成方式
– 内部电阻分压、外部电阻分压,外部电容分压方式
– 可通过软件配置内部电阻分压方式的功耗,从而匹配 LCD 面板所需的电容电荷
支持低功耗模式:LCD 控制器可在 Active、Sleep、DeepSleep 模式下进行显示。
可配置帧中断。
支持 LCD 闪烁功能且可配置多种闪烁频率
未使用的 LCD 区段和公共引脚可配置为数字或模拟功能。 LCD 驱动波形
LCD 支持 5 种占空比(Duty)的驱动波形:静态、1/2、1/3、1/4、1/6 和 1/8,由LCD_CR0.Duty 进行设置。LCD 支持 2 种偏置(Bias)的驱动波形:1/2、1/3,由LCD_CR0.Bias 进行设置。建议的组合方式如下表所示:
LCD Bias 产生电路
LCD 的 Bias 电压具有 3 种来源:内部电阻分压、外部电阻分压、外部电容分压。当选择内部电阻分压时,芯片会自动切换内部的电路以产生符合 Bias 和 Duty 的电压。当选择外部电阻分压或外部电容分压时,需要用户在芯片的外围引脚搭建相关电路。 内部电阻模式
内部电阻模式 VLCDH,VLCD1~VLCD3 可以作为 LCD SEG 输出或者 IO 端口使用。内部电阻模式,LCD 的驱动电压由 CR0.Contrast 控制,如下表所示: 由于内部电阻驱动方式,无需外部电路支持。当选择内部电阻分压时,芯片会自动切换到内部的电路,这种模式驱动能力较弱。
当选择1/2bias时,大功耗/中功耗/小功耗的电阻分别为 240K/360K/720K;
当选择1/3bias时,大功耗/中功耗/小功耗的电阻分别为 360K/540K/1080K。
通过内部LCD_CR0中的Contrast调整电压使得VLCD电压 = LCD屏电压。 LCD显示模式
华大单片机根据把SEG或COM放在寄存器的方式不同分为显示模式0(MODE = 0)和显示模式1(MODE =1)。下面都以1/4Duty为例列出两种显示模式。 LCD驱动讲解
下面以芯缘意码HC32LFx3x-STK-V2.0开发板为例,讲解如何使用华大MCU HC32L136K8TA来驱动显示LCD段码屏。 LCD屏真值表 开发板接口电路 管脚配置代码
/********************************************************************************
** \brief初始化外部GPIO引脚
**
** \return 无
******************************************************************************/
void App_PortCfg(void)
{
Gpio_SetAnalogMode(GpioPortA, GpioPin9);//COM0
Gpio_SetAnalogMode(GpioPortA, GpioPin10); //COM1
Gpio_SetAnalogMode(GpioPortA, GpioPin11); //COM2
Gpio_SetAnalogMode(GpioPortA, GpioPin12); //COM3
Gpio_SetAnalogMode(GpioPortA, GpioPin8);//SEG0
Gpio_SetAnalogMode(GpioPortC, GpioPin9);//SEG1
Gpio_SetAnalogMode(GpioPortC, GpioPin8);//SEG2
Gpio_SetAnalogMode(GpioPortC, GpioPin7);//SEG3
Gpio_SetAnalogMode(GpioPortC, GpioPin6);//SEG4
Gpio_SetAnalogMode(GpioPortB, GpioPin15); //SEG5
Gpio_SetAnalogMode(GpioPortB, GpioPin14); //SEG6
Gpio_SetAnalogMode(GpioPortB, GpioPin13); //SEG7
} LCD屏参数
/********************************************************************************
** \brief配置LCD
**
** \return 无
******************************************************************************/
void App_LcdCfg(void)
{
stc_lcd_cfg_t LcdInitStruct;
stc_lcd_segcom_t LcdSegCom;
LcdSegCom.u32Seg0_31 = 0xffffff00; ///< 配置LCD_POEN0寄存器 开启SEG0~SEG7
LcdSegCom.stc_seg32_51_com0_8_t.seg32_51_com0_8 = 0xffffffff; ///< 初始化LCD_POEN1寄存器 全部关闭输出端口
LcdSegCom.stc_seg32_51_com0_8_t.segcom_bit.Com0_3 = 0; ///< 使能COM0~COM3
LcdSegCom.stc_seg32_51_com0_8_t.segcom_bit.Mux = 1; ///< Mux=0,Seg32_35=0,BSEL=1表示:选择外部电容工作模式,内部电阻断路
LcdSegCom.stc_seg32_51_com0_8_t.segcom_bit.Seg32_35 = 0xf;
Lcd_SetSegCom(&LcdSegCom); ///< LCD COMSEG端口配置
LcdInitStruct.LcdBiasSrc = LcdExtCap; ///< 电容分压模式,需要外部电路配合
LcdInitStruct.LcdDuty = LcdDuty4; ///< 1/4duty
LcdInitStruct.LcdBias = LcdBias3; ///< 1/3 BIAS
LcdInitStruct.LcdCpClk = LcdClk2k; ///< 电压泵时钟频率选择2kHz
LcdInitStruct.LcdScanClk = LcdClk128hz; ///< LCD扫描频率选择128Hz
LcdInitStruct.LcdMode = LcdMode0; ///< 选择模式0
LcdInitStruct.LcdClkSrc = LcdRCL; ///< LCD时钟选择RCL
LcdInitStruct.LcdEn = LcdEnable; ///< 使能LCD模块
Lcd_Init(&LcdInitStruct);
}
LCD参数配置 建立LCD映射表
我们可以根据屏的真值表来完成笔段定义,把表中的PIN5和PIN6定义为一个字节,PIN5为低位。其它PIN定义方法相同。宏定义代码如下:
#define LCDSEG_A 0x01
#define LCDSEG_B 0x10
#define LCDSEG_C 0x40
#define LCDSEG_D 0x80
#define LCDSEG_E 0x04
#define LCDSEG_F 0x02
#define LCDSEG_G 0x20
#define LCDPOINT1P 0x08
#define LCDPOINT2P 0x08
#define LCDPOINT3P 0x08
#define LCDPOINT4P 0x08
页:
[1]
2