[其他] 【HC32L196PCTA测评】+LCD屏显示篇

[复制链接]
2139|9
 楼主| jinglixixi 发表于 2023-8-5 14:51 | 显示全部楼层 |阅读模式
HC32L196PCTA开发板配有笔段式的液晶屏,并有相应的显示例程,其显示效果如图1所示。
1.jpg
1  显示效果

该液晶屏的驱动方式:1/4 Duty1/3 Bias、工作电压:3V3,其几何尺寸及引脚功能如图2所示。
2.jpg
2  几何尺寸及引脚功能

由于该例程只是一个测试例程,因此在实际使用过程中,该相应对它进一步完善,以实现数据显示的函数化。

为此,相应对例程加以分析和修改。其主程序为:
  1. int32_t main(void)
  2. {
  3.     Sysctrl_ClkSourceEnable(SysctrlClkRCL,TRUE);             ///< 使能RCL时钟
  4.     Sysctrl_SetRCLTrim(SysctrlRclFreq32768);                ///< 配置内部低速时钟频率为32.768kHz
  5.     Sysctrl_SetPeripheralGate(SysctrlPeripheralLcd,TRUE);     ///< 开启LCD时钟
  6.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);    ///< 开启GPIO时钟
  7.     App_PortCfg();               ///< LCD端口配置
  8.     App_LcdCfg();                ///< LCD模块配置
  9.     Lcd_ClearDisp();              ///< 清屏
  10.     Lcd_WriteRam(0,0x0f0f0f0f);   ///< 赋值寄存器LCDRAM0
  11.     Lcd_WriteRam(1,0x0f0f0f0f);   ///< 赋值寄存器LCDRAM1
  12.     while(1)
  13.     {
  14.         ;
  15.     }
  16. }

其引脚工作模式配置函数为:
  1. void App_PortCfg(void)
  2. {
  3.     Gpio_SetAnalogMode(GpioPortA, GpioPin9);  //COM0
  4.     Gpio_SetAnalogMode(GpioPortA, GpioPin10); //COM1
  5.     Gpio_SetAnalogMode(GpioPortA, GpioPin11); //COM2
  6.     Gpio_SetAnalogMode(GpioPortA, GpioPin12); //COM3
  7.     Gpio_SetAnalogMode(GpioPortA, GpioPin8);  //SEG0
  8.     Gpio_SetAnalogMode(GpioPortC, GpioPin9);  //SEG1
  9.     Gpio_SetAnalogMode(GpioPortC, GpioPin8);  //SEG2
  10.     Gpio_SetAnalogMode(GpioPortC, GpioPin7);  //SEG3
  11.     Gpio_SetAnalogMode(GpioPortC, GpioPin6);  //SEG4
  12.     Gpio_SetAnalogMode(GpioPortB, GpioPin15); //SEG5
  13.     Gpio_SetAnalogMode(GpioPortB, GpioPin14); //SEG6
  14.     Gpio_SetAnalogMode(GpioPortB, GpioPin13); //SEG7
  15.     Gpio_SetAnalogMode(GpioPortB, GpioPin3);  //VLCDH
  16.     Gpio_SetAnalogMode(GpioPortB, GpioPin4);  //VLCD3
  17.     Gpio_SetAnalogMode(GpioPortB, GpioPin5);  //VLCD2
  18.     Gpio_SetAnalogMode(GpioPortB, GpioPin6);  //VLCD1
  19. }

LCD 屏相指定寄存器写入数据的函数为:
  1. en_result_t Lcd_WriteRam(uint8_t u8Row,uint32_t u32Data)
  2. {
  3.     en_result_t  enRet = Error;
  4.     volatile uint32_t *ram = NULL;
  5.     ram = (volatile uint32_t*)&M0P_LCD->RAM0;
  6.     if (u8Row > 15)
  7.     {
  8.         enRet = ErrorInvalidParameter;
  9.         return enRet;
  10.     }
  11.     ram += u8Row;
  12.     *ram = u32Data;
  13.     enRet = Ok;
  14.     return  enRet;
  15. }

为实现数字的显示,所定义显示码为:
int16_td[10]={0x0f05,0x0600,0x0b06,0x0f02,0x0603,0x0d03,0x0d07,0x0700,0x0f07,0x0f03};

实现数字显示的测试主程序为:
  1. int32_t main(void)
  2. {
  3.         int8_t i=0;
  4.         Sysctrl_ClkSourceEnable(SysctrlClkRCL,TRUE);            ///< 使能RCL时钟
  5.     Sysctrl_SetRCLTrim(SysctrlRclFreq32768);                ///< 配置内部低速时钟频率为32.768kHz
  6.     Sysctrl_SetPeripheralGate(SysctrlPeripheralLcd,TRUE);      ///< 开启LCD时钟
  7.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);     ///< 开启GPIO时钟
  8.     App_PortCfg();               ///< LCD端口配置
  9.     App_LcdCfg();                ///< LCD模块配置
  10.     Lcd_ClearDisp();              ///< 清屏
  11.     Lcd_WriteRam(0,0x00000000);
  12.         Lcd_WriteRam(1,0x00000000);
  13. while(1)
  14.     {
  15.                           Lcd_WriteRam(0,(d[i]<<16)+d[i]);
  16.                           Lcd_WriteRam(1,(d[i]<<16)+d[i]);
  17.                           i=(i+1)%10;
  18.                           delay1ms(1000);
  19.     }
  20. }

经程序的编译与下载,其显示效果如图3所示。
3.jpg
3 测试效果

chenjun89 发表于 2023-8-5 16:59 来自手机 | 显示全部楼层
传统液晶屏除了没有彩屏的华丽,但是胜在稳定可靠。
gaoyang9992006 发表于 2023-8-31 09:07 | 显示全部楼层
chenjun89 发表于 2023-8-5 16:59
传统液晶屏除了没有彩屏的华丽,但是胜在稳定可靠。

应该是超低功耗吧
wangzsa 发表于 2023-8-31 20:15 | 显示全部楼层
超低功耗
xiaoxiaojs 发表于 2024-3-20 15:44 | 显示全部楼层
稳定可靠
guijial511 发表于 2024-3-23 12:45 来自手机 | 显示全部楼层
看起来还以为是一排开发板,哈哈。
小夏天的大西瓜 发表于 2024-3-26 17:30 | 显示全部楼层
传统液晶屏确实很实用,而且稳定性好
LOVEEVER 发表于 2024-3-27 11:12 | 显示全部楼层
传统液晶屏还是比较稳定可靠
xdvca 发表于 2024-7-31 22:38 | 显示全部楼层
在处理带有LCD显示屏的嵌入式系统时,优化显示效果并确保数据的正确显示是关键任务。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部