这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】瑞萨RA4L1实现LCD显示

共6条 1/1 1 跳转至

【换取手持数字示波器】瑞萨RA4L1实现LCD显示

助工
2025-05-09 18:10:14     打赏

瑞萨RA4L1实现LCD 显示

本文介绍了 RA4L1 开发套件和瑞萨 e2 Studio 灵活软件包(FSP)实现 LCD 段码管显示的工程设计。

简介

液晶显示(liquid crystal display,LCD)是嵌入式系统中常见的人机交互方式,广泛应用于工业控制、智能家电、医疗设备和消费电子产品。

LCD_Screens.jpg

Renesas RA4L1 微控制器(MCU)内置 Segment LCD Controller (SLCDC),可直接驱动 静态、1/2、1/3、1/4 Bias 的段式 LCD 显示屏,无需额外的 LCD 驱动芯片。这种集成方案不仅降低了硬件成本,还简化了设计。

Renesas RA4L1 的 SLCDC 模块提供了一种高效、低功耗、低成本的 LCD 显示方案。

LCD_Work.jpg

通过 FSP 提供的 r_slcdc 驱动,开发者可以快速初始化 LCD,轻松控制显示内容。

在实际项目中,合理配置 COM/SEG 引脚、优化时钟和对比度设置,可以进一步提升 LCD 显示效果。

详见:How LCDs Work , .

工作原理

Detailed-Structure-of-LCD.jpg

LCD 的基本工作原理是遮光。它不能自行产生光。因此,需要一个外部光源。当外部光线从一个偏振器移动到下一个偏振器时,液晶接收到外部电源,偏振光自行对齐,在屏幕上形成图像。

LCD_working.jpg

液晶密封厚层两侧的透明层是氧化铟导电表面。在没有任何外部偏差的情况下,分子排列不受影响。

当发生外部偏倚时,分子排列会发生变化,使一个区域看起来是暗的,而另一个区域看起来是清晰的。

详见:What is LCD? .

LCD 引脚配置

这里使用的 LCD 缩略图

LCD_Segment.jpg

SEG(Segment):控制 LCD 具体显示的段,如数码管的 A-G 段。

COM(Common):LCD 的 公共信号,决定哪个段被驱动,多 COM 允许减少 I/O 引脚数量。

数字显示的实现

LCD_Screen_num.jpg

举例

令第 6 个数码管(从左往右)显示数字 1 ,对应位号为 6B 和 6C,

第 6 个数码管对应的 段选 为 SEG40 和 SEG41;

根据 LCD 缩略图可知, 6B 和 6C 对应 SEG41,需要 位选 COM1 和 COM2 为 1,COM0 和 COM3 为 0,即二进制从后往前排列 0110,对应的 16 进制为 0x6 ;

且 SEG40 对应的 COM0 - COM3 全为 0,即二进制 0000 ,对应的 16 进制为 0x0 ;

因此,第 6 个数码管显示数字 1 的代码为


R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0x0, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x6, 0xF);


同理可实现其他各位数码管的 0 至 9 的数字显示。

注意到每位数码管显示相同数字时的位选相同,只有段选差异。

这为定义 LCD 数显函数库提供了方便。

LCD 管脚连接

原理图(引脚对应关系)

SCH_LCD_pinout.jpg

详见:RA4L1_LCD: RA4L1_LCD .

工程测试

介绍了 RA4L1 实现 LCD 段码屏驱动的工程创建流程。

创建工程

打开 e2 studio 软件,依次点击 文件 - 新建 - 瑞萨 C/C++ 项目 - Renesas RA ;

依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择 R7FA4L1BD4CFP ,工具链选择 GNU ARM Embedded ,完成工程创建。

时钟配置

根据 MCU 外部硬件配置,设置晶振及时钟树

LCD_clock_config.jpg

LCD 堆栈

新建数码管 LCD 堆栈

New Stack - Graphics - Segment LCD (r_slcdc)

属性设置

点击选中 Segment LCD 堆栈,修改属性配置

LCD_segment_setting.jpg

设置名称、LOCO 时钟源、(LOCO/SOSC)256 分频器、1/3偏压驱动、COM公共端、波形A、内部电压升压、VL1或VCC参考电压、0对比度。

引脚配置

LCD 引脚配置如下

pins_define_1.jpg

pins_define_2.jpg

pins_define_2

VL(Voltage Level)引脚用于提供 LCD 偏置电压,控制 LCD 的对比度和驱动电压。

在内部电压提升模式(Internal Voltage Boosting) 下,RA MCU 会自动产生 VL1、VL2、VL3、VL4 并提供给 LCD 作为驱动电压。

pins_define_3

pins_define_3.jpg

配置完成后,点击 Generate Project Content ,构建工程,确保没有报错。

工程代码


void hal_entry(void)
{
    /* TODO: add your own code here */
    fsp_err_t err;
    /* Open SLCDC driver */
    err = R_SLCDC_Open(&g_slcdc0_ctrl, &g_slcdc0_cfg);
    /* Handle any errors. This function should be defined by the user. */
    assert(FSP_SUCCESS == err);
    /* When using internal boost mode this delay is required to allow the boost circuit to charge. See RA4M1 User's
    * Manual (R01UH0887EJ0100) 8.2.18 "Segment LCD Source Clock Control Register (SLCDSCKCR)" for details. */
    R_BSP_SoftwareDelay(5, BSP_DELAY_UNITS_MILLISECONDS);
    /* Start SLCDC output */
    err = R_SLCDC_Start(&g_slcdc0_ctrl);
    assert(FSP_SUCCESS == err);

    /* Set Display Area of SLCDC driver.*/
    //    err = R_SLCDC_SetDisplayArea(&g_slcdc0_ctrl, SLCDC_DISP_A);
    //    assert(FSP_SUCCESS == err);

    while(1)
    {
            //清空0-41段
            uint8_t segment_data_num_off[41+1] ;
            for(int i=0;i<=41;i++)
                segment_data_num_off[i]=0;
            R_SLCDC_Write(&g_slcdc0_ctrl, 0, segment_data_num_off, sizeof(segment_data_num_off));
            R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);

            //全部点亮
            uint8_t segment_data_num_on[41+1] ;
            for(int i=0;i<=41;i++)
                segment_data_num_on[i]=0xf;
            R_SLCDC_Write(&g_slcdc0_ctrl, 0, segment_data_num_on, sizeof(segment_data_num_on));
            R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);

            //清空0-41段
            for(int i=0;i<=41;i++)
                segment_data_num_off[i]=0;
            R_SLCDC_Write(&g_slcdc0_ctrl, 0, segment_data_num_off, sizeof(segment_data_num_off));
            R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);

            //准备并写入段显示数据,第一个数码管显示1
            R_SLCDC_Modify(&g_slcdc0_ctrl, 3, 0x0, 0xF);
            R_SLCDC_Modify(&g_slcdc0_ctrl, 11, 0x6, 0xF);

            //准备并写入段显示数据,第二个数码管显示2
            R_SLCDC_Modify(&g_slcdc0_ctrl, 15, 0xE, 0xF);
            R_SLCDC_Modify(&g_slcdc0_ctrl, 16, 0x3, 0xF);

            //准备并写入段显示数据,第三个数码管显示3
            R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0xA, 0xF);
            R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0x7, 0xF);

            //准备并写入段显示数据,第四个数码管显示4
            R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0x3, 0xF);
            R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x6, 0xF);

            //准备并写入段显示数据,第五个数码管显示5
            R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0xB, 0xF);
            R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0x5, 0xF);

            //准备并写入段显示数据,第六个数码管显示6
            R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0xF, 0xF);
            R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x5, 0xF);
            R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
    }
#if BSP_TZ_SECURE_BUILD
 /* Enter non-secure code */
 R_BSP_NonSecureEnter();
#endif
}


通过循环实现指定 LCD 数码管的段显示;

切换数字前,清空所有显示。

效果演示

LCD_Segment_display.jpg

数字显示

LCD_segment_display.gif


总结

本文介绍了 RA4L1 开发套件和瑞萨 e2 Studio 灵活软件包(FSP)实现 LCD 段码屏显示的工程设计,工程快速构建、LCD 运行原理、硬件连接、代码、效果展示等流程,为瑞萨单片机 LCD 显示的相关产品设计和快速应用提供了参考。





关键词: 瑞萨     RA4L1     LCD     段码屏    

专家
2025-05-09 22:17:58     打赏
2楼

感谢分享


专家
2025-05-09 22:24:40     打赏
3楼

感谢分享


工程师
2025-05-17 14:52:26     打赏
4楼

image.png

与这篇帖子高度重合,不能评分哦


高工
2025-05-19 11:20:14     打赏
5楼

对于使用瑞萨的配置工具完成段码屏的驱动的可以参考使用


专家
2025-05-19 17:23:49     打赏
6楼

期待楼主更多作品


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]