很喜欢板子上的那个液晶显示屏,拿到手上就想先驱动起来。本次实验就是以HC32L136 demo板官方例程为基础对HC32L136K8TA的LCD模块进行学习,LCD上的数字从“0”开始加“1”到“9999”,然后再归“0”重复进行。
一、实验资源
1、HC32L136 demo板;
2、keil 5.28.0.0;
3、HC32L136 SDK支持包;
更多资讯请访问https://www.hdsc.com.cn/mcu.htm
二、相关资源简介
1、LCD模块
HC32L136K8TA的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 区段和公共引脚可配置为数字或模拟功能。
2、LCD模块寄存器。寄存器看上去不少,但都非常简单。
其中的配置寄存器0(LCD_CR0) 应该是模块的核心寄存器,涉及的内容比较多,但使用也是非常简单。通过对该寄存的配置可对所驱动液晶显示屏的对比度调整、Bias电压来源选择及Bias配置、duty配置、电压泵时钟频率选择、LCD扫描频率选择及LCD使能失能等进行相应配置。其中的“Bias电压来源选择”提供三种选择,一、内部电阻分压;二、外部电阻分压;三、外部电容分压,这对于实际应用非常方便灵活。
其它的寄存器在手册中也同样有着非常详细的描述,这对于LCD模块的正确使用是非常有用的。配置寄存器1(LCD_CR1)中有个位比较重要,即“Mode”位,它与所使用的LCD显示器有关,支持两种显示模式:模式0与模式1。下面是1/4Duty下两种显示模式图例:
输出配置寄存器 0(LCD_POEN0)及输出配置寄存器 1(LCD_POEN1)对具备LCD功能的引脚进行配置,根据所使用LCD的不同可灵活地对"SEG"及“COM”进行配置,将用不的引脚配置为其它用途。
LCD_RAM0~7及LCD_RAM8~F两个寄存器也是非常容易理解,相让LCD的那一段点亮告诉它们就可以了;
三、本次实验
1、硬件连接
HC32L136 demo板上所配置的LCD显示屏是一款3.3v工作电压,支持1/4 Duty、1/3 Bias驱动方式的小巧型段式液晶屏。对于Bias 产生电路在DEMO板提供了外部电容(C26~C28)分压模式,外部电阻分压模式的电阻(R20~R23)没有焊接。
2、程序实现。实验程序是在官方提供的例程基础上进行了更改,例程中Bias 产生电路选用了内部电阻分压模式,显示模式为“模式0”;
主要代码如下:
void LCD_Config(void)
{
stc_lcd_config_t stcLcdCfg;
DDL_ZERO_STRUCT(stcLcdCfg);
Sysctrl_ClkSourceEnable(SysctrlClkRCL,TRUE);//系统时钟源使能,内部低速时钟
Sysctrl_SetRCLTrim(SysctrlRclFreq32768); //内部低速时钟频率TRIM值加载
Sysctrl_SetPeripheralGate(SysctrlPeripheralLcd,TRUE);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
/*和LCD相关端口都要配置为模拟端口*/
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
// Gpio_SetAnalogMode(GpioPortB, GpioPin3);//VLCDH
// Gpio_SetAnalogMode(GpioPortB, GpioPin4);//VLCD3
// Gpio_SetAnalogMode(GpioPortB, GpioPin5);//VLCD2
// Gpio_SetAnalogMode(GpioPortB, GpioPin6);//VLCD1
LCD_SetSegCom(0,0xffffff00); //设置seg0-7
LCD_SetSegCom(1,0x10ff); //设置com0-3
stcLcdCfg.enDispMode = LcdMode0; //显示模式为模式0
stcLcdCfg.enBias = LcdBias3; //1/3 Bias
stcLcdCfg.enBiasSrc = LcdInRes_High;//内部电阻分压,大功耗模式
stcLcdCfg.enClk = LcdRCL; //内部32k
stcLcdCfg.enDuty = LcdDuty4; //1/4Duty
stcLcdCfg.enCpClk = LcdClk2k; //电压泵时钟频率2k
stcLcdCfg.enScanClk = LcdClk128hz; //LCD扫描频率
LCD_Init(&stcLcdCfg);
LCD_EnFunc(LcdEn,TRUE); //模块使能或闪屏使能禁止
LCD_ClearDisp(); //清屏
}
int32_t main(void)
{
uint16_t cont;
LCD_Config();
//LCD_Display(3579);
//LCD_FullDisp(); //全屏显示
while(1)
{
for(cont=0; cont<10000; cont++)
{
LCD_Display(cont);
delay1ms(300);
}
}
}
四、实验结果
五、总结
之前只用过HT1621B对段码液晶进行过驱动,第一次使用微控制器所带的LCD控制器模块成功驱动LCD显示屏还是比较兴奋的,不过这都是源于华大电子好的产品及丰富的参考例程。参照官方例程再结合配套的数据及用户手册上手还是挺快的。接下来的时间里还要尝试一下其它的操作。
附件:编译好的测试文件
main.rar
(3.8 KB)
|