【RA4L1-SENSOR】ADC温度的LCD 显示
本文介绍了瑞萨 RA4L1-SENSOR 开发板通过瑞萨 e^2^ Studio 软件和灵活软件包(FSP)快速创建工程,ADC 读取芯片内部温度传感器,实现 LCD 段码屏实时显示芯片温度的项目设计。
项目介绍
介绍了瑞萨 RA4L1 开发套件通过 e^2^ studio 软件实现 ADC 温度 LCD 显示 的项目设计。
项目方案
- 创建 LCD 显示工程;
- 构建 LCD 显示函数库文件,实现自定义数字显示;
- 添加 UART 和 ADC 堆栈,将 A0 模拟通道采集的电压值通过串口打印,并输送至 LCD 显示;
- 连接水位传感器,通过 A0 读取模拟信号电压值,转换为水位高度,并输送至 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 .
硬件连接
- 使用 Type-C 数据线连接开发板串口接线端和电脑,用以串口通信;
- 使用 J-LINK 调试器连接板载 SWD 调试端口;
实物图

流程图

工程创建
打开 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 ,构建工程,确保没有报错。
代码
使用 e^2^ studio 软件和 FSP 快速创建目标工程,配置 UART、 ADC 和 LCD 堆栈,生成工程的基本架构;
添加 LCD 数字显示库文件和主函数代码;
LCD 驱动程序
包括 LCD_ShowNum.h 头文件和 LCD_ShowNum.c 源文件。
头文件
在项目工程目录 src 文件夹下新建 LCD 驱动头文件 LCD_ShowNum.h ,并添加如下代码
#ifndef LCD_SHOWNUM_H_
#define LCD_SHOWNUM_H_
extern const uint16_t Num;
void LCD_ShowNum(uint16_t Num);
void calculateTens(uint16_t Num);
void calculateOnes(uint16_t Num);
void calculateOnesDot(uint16_t Num);
void calculateTenths(uint16_t Num);
void calculatePercentiles(uint16_t Num);
void LCD_Clear();
void LCD_Light();
#endif
保存代码。
源文件
在 src 文件夹下新建 LCD 数显函数文件 LCD_ShowNum.c 并添加如下代码
#include "hal_data.h"
#include "LCD_ShowNum.h"
/**
@brief LCD 清屏
@param None
@return None
*/
void LCD_Clear()
{
// Clear SEG0-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));
}
/**
@brief LCD 全亮
@param None
@return None
*/
void LCD_Light()
{
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));
}
/**
@brief LCD屏显示频率
@param frequency -[in] 频率
@return 无
*/
void LCD_ShowNum(uint16_t Num)
{
calculateTens(Num); // 十位
//calculateOnes(Num); // 个位
calculateOnesDot(Num); // 个位(带小数点)
calculateTenths(Num); // 小数十分位
calculatePercentiles(Num); // 小数百分位
}
/**
@brief 计算十位,如33.31,则十位3
@param None
@return 无
*/
void calculateTens(uint16_t Num)
{
if(Num / 1000 % 10 == 0)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0xD, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0x7, 0xF); // 0
}
else if(Num / 1000 % 10 == 1)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0x0, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0x6, 0xF); // 1
}
else if(Num / 1000 % 10 == 2)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0xE, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0x3, 0xF); // 2
}
else if(Num / 1000 % 10 == 3)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0xA, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0x7, 0xF); // 3
}
else if(Num / 1000 % 10 == 4)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0x3, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0x6, 0xF); // 4
}
else if(Num / 1000 % 10 == 5)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0x5, 0xF); // 5
}
else if(Num / 1000 % 10 == 6)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0x5, 0xF); // 6
}
else if(Num / 1000 % 10 == 7)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0x1, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0x7, 0xF); // 7
}
else if(Num / 1000 % 10 == 8)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0xF, 0xF); // 8
}
else if(Num / 1000 % 10 == 9)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 22, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 23, 0xF, 0xF); // 9
}
}
/**
@brief 计算个位,如3.31,则个位 3
@param None
@return 无
*/
void calculateOnes(uint16_t Num)
{
if(Num / 100 % 10 == 0)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xD, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x7, 0xF); // 0
}
else if(Num / 100 % 10 == 1)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0x0, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x6, 0xF); // 1
}
else if(Num / 100 % 10 == 2)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xE, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x3, 0xF); // 2
}
else if(Num / 100 % 10 == 3)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xA, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x7, 0xF); // 3
}
else if(Num / 100 % 10 == 4)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0x3, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x6, 0xF); // 4
}
else if(Num / 100 % 10 == 5)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x5, 0xF); // 5
}
else if(Num / 100 % 10 == 6)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x5, 0xF); // 6
}
else if(Num / 100 % 10 == 7)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0x1, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x7, 0xF); // 7
}
else if(Num / 100 % 10 == 8)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x7, 0xF); // 8
}
else if(Num / 100 % 10 == 9)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0x7, 0xF); // 9
}
}
/**
@brief 计算个位,如3.31,则个位 3. (带小数点)
@param None
@return 无
*/
void calculateOnesDot(uint16_t Num)
{
if(Num / 100 % 10 == 0)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xD, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xF, 0xF); // 0.
}
else if(Num / 100 % 10 == 1)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0x0, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xE, 0xF); // 1.
}
else if(Num / 100 % 10 == 2)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xE, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xB, 0xF); // 2.
}
else if(Num / 100 % 10 == 3)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xA, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xF, 0xF); // 3.
}
else if(Num / 100 % 10 == 4)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0x3, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xE, 0xF); // 4.
}
else if(Num / 100 % 10 == 5)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xD, 0xF); // 5.
}
else if(Num / 100 % 10 == 6)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xD, 0xF); // 6.
}
else if(Num / 100 % 10 == 7)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0x1, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xF, 0xF); // 7.
}
else if(Num / 100 % 10 == 8)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xF, 0xF); // 8.
}
else if(Num / 100 % 10 == 9)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 24, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 29, 0xF, 0xF); // 9.
}
}
/**
@brief 计算小数十分位,如3.31,则十分位 3
@param voltage -[in] 电压
@return 无
*/
void calculateTenths(uint16_t Num)
{
if(Num / 10 % 10 == 0)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0xD, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0x7, 0xF); // 0
}
else if(Num / 10 % 10 == 1)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0x0, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0x6, 0xF); // 1
}
else if(Num / 10 % 10 == 2)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0xE, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0x3, 0xF); // 2
}
else if(Num / 10 % 10 == 3)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0xA, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0x7, 0xF); // 3
}
else if(Num / 10 % 10 == 4)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0x3, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0x6, 0xF); // 4
}
else if(Num / 10 % 10 == 5)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0x5, 0xF); // 5
}
else if(Num / 10 % 10 == 6)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0x5, 0xF); // 6
}
else if(Num / 10 % 10 == 7)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0x1, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0x7, 0xF); // 7
}
else if(Num / 10 % 10 == 8)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0xF, 0xF); // 8
}
else if(Num / 10 % 10 == 9)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 30, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 39, 0xF, 0xF); // 9
}
}
/**
@brief 计算小数百分位,如3.31,则百分位 1
@param None
@return 无
*/
void calculatePercentiles(uint16_t Num)
{
if(Num % 10 == 0)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0xD, 0xF); // 0
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x7, 0xF);
}
else if(Num % 10 == 1)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0x0, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x6, 0xF); // 1
}
else if(Num % 10 == 2)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0xE, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x3, 0xF); // 2
}
else if(Num % 10 == 3)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0xA, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x7, 0xF); // 3
}
else if(Num % 10 == 4)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0x3, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x6, 0xF); // 4
}
else if(Num % 10 == 5)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x5, 0xF); // 5
}
else if(Num % 10 == 6)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x5, 0xF); // 6
}
else if(Num % 10 == 7)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0x1, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0x7, 0xF); // 7
}
else if(Num % 10 == 8)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0xF, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0xF, 0xF); // 8
}
else if(Num % 10 == 9)
{
R_SLCDC_Modify(&g_slcdc0_ctrl, 40, 0xB, 0xF);
R_SLCDC_Modify(&g_slcdc0_ctrl, 41, 0xF, 0xF); // 9
}
}
完成文件创建和工程编译,上传固件至开发板,即可实现
主程序
在 .../src/hal_entry.c 主程序中添加 ADC 温度获取与 LCD 显示的相关代码
#include "hal_data.h"
#include <stdio.h>
#include "LCD_ShowNum.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
}
#ifdef __GNUC__ //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#endif
PUTCHAR_PROTOTYPE
{
err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
int _write(int fd,char *pBuffer,int size)
{
for(int i=0;i<size;i++)
{
__io_putchar(*pBuffer++);
}
return size;
}
volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{
//宏将告知编译器回调函数不使用参数 p_args,从而避免编译器发出警告,
FSP_PARAMETER_NOT_USED(p_args);
scan_complete_flag = true;
}
/******************
* ADC Temperature
* (详见 https://renesas.github.io/fsp/group___a_d_c.html )
*******************/
/* 官方例程常数 */
#define VCC_UV (3300000UL) /* 3.3 V → μV */
#define RES_SHIFT (12U) /* 12-bit ADC */
#define REF_TEMP (127) /* 校准点 127 ℃ */
#define SLOPE_UV_PER_C (4000L) /* 4 mV/℃ → 4000 μV/℃ */
/* 获取ADC通道温度 */
static int32_t get_temperature_c(void)
{
/* 1. 启动 ADC 并等待完成 */
R_ADC_ScanStart(&g_adc0_ctrl);
adc_status_t status = { .state = ADC_STATE_SCAN_IN_PROGRESS };
while (status.state == ADC_STATE_SCAN_IN_PROGRESS)
{
R_ADC_StatusGet(&g_adc0_ctrl, &status);
}
/* 2. 读温度通道原始码值 */
uint16_t raw;
R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_TEMPERATURE, &raw);
/* 3. 取 127 ℃ 校准码值(TSCDR) */
adc_info_t info;
R_ADC_InfoGet(&g_adc0_ctrl, &info);
int32_t cal127 = (int32_t)info.calibration_data;
/* 4. 官方公式(单位 μV) */
int32_t v1_uv = (VCC_UV >> RES_SHIFT) * cal127; /* 127 ℃ 对应电压 */
int32_t vs_uv = (VCC_UV >> RES_SHIFT) * raw; /* 当前电压 */
int32_t temp_c = (vs_uv - v1_uv) / SLOPE_UV_PER_C + REF_TEMP;
//printf("raw=%u cal127=%ld v1=%ld vs=%ld temp=%ld\r\n",raw, cal127, v1_uv, vs_uv, temp_c);
return temp_c;
}
/*******************************************************************************************************************//**
* main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
* is called by main() when no RTOS is used.
**********************************************************************************************************************/
void hal_entry(void)
{
/* TODO: add your own code here */
/* Open the transfer instance with initial configuration. */
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
/* Initializes the module. */
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* Enable channels. */
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
//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)
{
int32_t temp_c = get_temperature_c();
printf("{\"temp\": %ld}\r\n",temp_c);
uint16_t Num = temp_c * 100 ; // temperature display on LCD
LCD_ShowNum(Num);
R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
LCD_Clear();
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
- 构建工程;
- 调试、上传固件。
效果
- 使用 Type-C 数据线连接开发板的UART接口,
- 运行串口调试助手软件,
- 打开对应的端口即可获得输出本文
ADC 温度显示
连接 LCD 并显示芯片的实时温度值(单位:摄氏度)

触摸芯片可改变 LCD 显示的 ADC 温度值,同时串口打印温度值

总结
本文介绍了瑞萨 RA4L1-SENSOR 开发板通过瑞萨 e^2^ Studio 软件和灵活软件包(FSP)快速创建工程,ADC 读取芯片内部温度传感器,实现 LCD 段码屏实时显示芯片温度的项目设计,为瑞萨 RA4L1 系列单片机的快速开发和应用提供了参考。

全部评论