瑞萨RA4L1实现LCD 显示
本文介绍了 RA4L1 开发套件和瑞萨 e2 Studio 灵活软件包(FSP)实现 LCD 段码管显示的工程设计。
简介
液晶显示(liquid crystal display,LCD)是嵌入式系统中常见的人机交互方式,广泛应用于工业控制、智能家电、医疗设备和消费电子产品。
Renesas RA4L1 微控制器(MCU)内置 Segment LCD Controller (SLCDC),可直接驱动 静态、1/2、1/3、1/4 Bias 的段式 LCD 显示屏,无需额外的 LCD 驱动芯片。这种集成方案不仅降低了硬件成本,还简化了设计。
Renesas RA4L1 的 SLCDC 模块提供了一种高效、低功耗、低成本的 LCD 显示方案。
通过 FSP 提供的 r_slcdc 驱动,开发者可以快速初始化 LCD,轻松控制显示内容。
在实际项目中,合理配置 COM/SEG 引脚、优化时钟和对比度设置,可以进一步提升 LCD 显示效果。
详见:How LCDs Work , .
工作原理
LCD 的基本工作原理是遮光。它不能自行产生光。因此,需要一个外部光源。当外部光线从一个偏振器移动到下一个偏振器时,液晶接收到外部电源,偏振光自行对齐,在屏幕上形成图像。
液晶密封厚层两侧的透明层是氧化铟导电表面。在没有任何外部偏差的情况下,分子排列不受影响。
当发生外部偏倚时,分子排列会发生变化,使一个区域看起来是暗的,而另一个区域看起来是清晰的。
详见:What is LCD? .
LCD 引脚配置
这里使用的 LCD 缩略图
SEG(Segment):控制 LCD 具体显示的段,如数码管的 A-G 段。
COM(Common):LCD 的 公共信号,决定哪个段被驱动,多 COM 允许减少 I/O 引脚数量。
数字显示的实现
举例
令第 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 管脚连接
原理图(引脚对应关系)
详见:RA4L1_LCD: RA4L1_LCD .
工程测试
介绍了 RA4L1 实现 LCD 段码屏驱动的工程创建流程。
创建工程
打开 e2 studio 软件,依次点击 文件 - 新建 - 瑞萨 C/C++ 项目 - Renesas RA ;
依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择 R7FA4L1BD4CFP ,工具链选择 GNU ARM Embedded ,完成工程创建。
时钟配置
根据 MCU 外部硬件配置,设置晶振及时钟树
LCD 堆栈
新建数码管 LCD 堆栈
New Stack - Graphics - Segment LCD (r_slcdc)
属性设置
点击选中 Segment LCD 堆栈,修改属性配置
设置名称、LOCO 时钟源、(LOCO/SOSC)256 分频器、1/3偏压驱动、COM公共端、波形A、内部电压升压、VL1或VCC参考电压、0对比度。
引脚配置
LCD 引脚配置如下
VL(Voltage Level)引脚用于提供 LCD 偏置电压,控制 LCD 的对比度和驱动电压。
在内部电压提升模式(Internal Voltage Boosting) 下,RA MCU 会自动产生 VL1、VL2、VL3、VL4 并提供给 LCD 作为驱动电压。
配置完成后,点击 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 数码管的段显示;
切换数字前,清空所有显示。
效果演示
数字显示
总结
本文介绍了 RA4L1 开发套件和瑞萨 e2 Studio 灵活软件包(FSP)实现 LCD 段码屏显示的工程设计,工程快速构建、LCD 运行原理、硬件连接、代码、效果展示等流程,为瑞萨单片机 LCD 显示的相关产品设计和快速应用提供了参考。