使用Renesas R7FA8D1BH (Cortex®-M85)实现多功能UI

目录

概述

1 系统框架介绍

1.1 模块功能介绍

1.2 UI页面功能

2 软件框架结构实现

2.1 软件框架图

2.1.1 应用层API

2.1.2  硬件驱动层

2.1.3 MCU底层驱动

 2.2 软件流程图 

4 软件功能实现

4.1 状态机功能核心代码

 4.2 页面功能函数

 4.3 源代码文件

5 功能测试

5.1 软件的代码结构

5.2 功能测试 


测试视频

使用Renesas R7FA8D1BH (Cortex®-M85)控制多类i2c类型设备,实时读取数据显示在OLED 屏幕,按键实现页面切换

概述

本文主要介绍使用Renesas R7FA8D1BH (Cortex®-M85)实现多功能UI,包括整个系统的硬件框架,软件框架结构,还介绍了软件实现的逻辑,包括:状态机跳转的核心代码,源代码等内容。

1 系统框架介绍

1.1 模块功能介绍

1)数据采集部分

SHT20:  温湿度传感器,采集环境温度和湿度

ISL29035:  光照传感器,采集环境的光照强度

DS18B20: 高精度温度传感器,设备工作环境温度监测

ADC(Temperatre): MCU内部温度监测

ADC(可调电阻): 模拟数据输入

2)显示部分

OLED: 实时显示传感器的数据 

3)模式切换

KEY-UP:  物理按键,正方向切换UI

KEY-DOWM:  物理按键,反方向切换UI

1.2 UI页面功能

1)页面一显示数据

2)页面二数据

 3)页面三数据

 4)页面四数据

2 软件框架结构实现

2.1 软件框架图

2.1.1 应用层API

1)  实时读取各类sensor的数据

2)实时获取按键的状态

3)处理sensor数据,根据按键状态实现UI页面的切换

2.1.2  硬件驱动层

1)实现外围驱动的driver

2)  读取MCU内部的各类应用模块参数

2.1.3 MCU底层驱动

1)实现I2C驱动(用于驱动I2C接口设备)

2)实现UART驱动(用于debug)

3)  IO层驱动实现

4)内部各个模块驱动(ADC,RTC)

 2.2 软件流程图 

4 软件功能实现

4.1 状态机功能核心代码

1)定义函数指针

代码第12行: 定义状态跳转函数指针

代码第13行:外部引用的函数指针变量

2)入口函数

代码65行: 系统启动后,跳转到第一个页面为ADC数据显示功能

3)根据按键值判断页面的位置 

4)页面功能函数

 4.2 页面功能函数

1)显示ADC数据

代码第110行: 实时显示ADC的数据

2)显示DS18B20 数据页面

显示数据函数:

3)显示ISL29035数据页面

4)显示SHT20数据页面

数据显示函数

 

 4.3 源代码文件

创建app_state.c文件,编写如下代码:

 /*FILE NAME  :  app_state.cDescription:  app UIAuthor     :  tangmingfei2013@126.comDate       :  2024/06/03*/
#include "bsp_i2c.h" 
#include "hal_data.h"
#include "oled_drv.h"
#include "bsp_led.h"
#include "bsp_timer.h"
#include "bsp_uart.h"
#include "bsp_adc.h"
#include "ds18b20.h" 
#include "app_ui.h" 
#include "key.h" 
#include "app_state.h" typedef enum{INIT_DQ = 0,NEXT_0,NEXT_1,NEXT_2,NEXT_3,BACK,}APP_STATE;static void dispADC_state( void *ptr );
static void dispDS18B20_state( void *ptr );
static void dispISL29035_state( void *ptr );
static void dispSHT2X_state( void *ptr );STATE_FUNC pSt_State = dispADC_state;uint8_t key_getState( void )
{static uint8_t run_state = INIT_DQ;if( Key_Scan(KEY1_SW2_PIN) == KEY_ON){run_state++;}else if( Key_Scan(KEY2_SW3_PIN) == KEY_ON){run_state--;}if( run_state >= NEXT_3 ){run_state = NEXT_3;}if( run_state <= NEXT_0 ){run_state = NEXT_0;}return run_state;
}void state_machine(void)
{pSt_State((void *)pSt_State);
}void run_action( uint8_t state )
{switch( state ){case NEXT_0:pSt_State = dispADC_state;return;case NEXT_1:pSt_State = dispDS18B20_state;return;case NEXT_2:pSt_State = dispISL29035_state;return;case NEXT_3:pSt_State = dispSHT2X_state;return;default:break;}
}static void dispADC_state( void *ptr )
{uint8_t run_state;(void)ptr;oled_Clear();oled_SetCharSize( FONT_16 );  oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  while(1){run_state = key_getState();if( run_state != NEXT_0 ){run_action( run_state );return;}ui_active();}
}static void dispDS18B20_state( void *ptr )
{uint8_t run_state;(void)ptr;oled_Clear();oled_SetCharSize( FONT_16 );  oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  while(1){run_state = key_getState();if( run_state != NEXT_1 ){run_action( run_state );return;}ui_dispDS18b20();}
}static void dispISL29035_state( void *ptr )
{uint8_t run_state;(void)ptr;oled_Clear();oled_SetCharSize( FONT_16 );  oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  while(1){run_state = key_getState();if( run_state != NEXT_2 ){run_action( run_state );return;}ui_disISL29035();}
}static void dispSHT2X_state( void *ptr )
{uint8_t run_state;(void)ptr;oled_Clear();oled_SetCharSize( FONT_16 );  oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  while(1){run_state = key_getState();if( run_state != NEXT_3 ){run_action( run_state );return;}ui_disSht2x();}
}

创建app_state.h文件,编写如下代码:

 /*FILE NAME  :  app_state.hDescription:  app ui interfaceAuthor     :  tangmingfei2013@126.comDate       :  2024/06/03*/#ifndef APP_STATE_H#define APP_STATE_H#include "hal_data.h"typedef void (*STATE_FUNC)(void *ptr);
extern STATE_FUNC pSt_State;void state_machine(void);#endif   /* APP_STATE_H */

5 功能测试

5.1 软件的代码结构

代码结构分为3个部分

1) MCU的驱动层

2) Device的驱动层

3) 功能应用层

5.2 功能测试 

1)页面一

2)页面二

 3)页面三

4)页面四

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145667.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AI字幕翻译器行业分析:前五大厂商占有大约29.5%的市场份额

AI 字幕翻译器正在彻底改变我们使用不同语言消费媒体的方式&#xff0c;使内容可以普遍访问。这些先进的技术利用机器学习和自然语言处理&#xff0c;将口语对话实时翻译成字幕。这一功能不仅打破了语言障碍&#xff0c;提升了观众的体验&#xff0c;而且还使内容创作者能够毫不…

火语言RPA流程组件介绍--获取关联元素

&#x1f6a9;【组件功能】&#xff1a;获取指定元素的父元素、子元素、相邻元素等关联信息 配置预览 配置说明 目标元素 支持T或# 默认FLOW输入项 通过自动捕获工具捕获(选择元素工具使用方法)或手动填写网页元素的css,xpath&#xff0c;指定对应网页元素作为操作目标 关联…

Arthas jvm(查看当前JVM的信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.3 jvm&#xff08;查看当前JVM的信息&#xff09; 二、命令列表 2.1 jvm相关命令 2.1.3 jvm&#xff08;查看当前JVM的信息&#xff09; 基础语法&#xff1a; jvm [arthas18139]$ jvmRUNTIME …

JUC 高并发编程的入门学习

课程内容概览 什么是 JUCLock 接口线程间通信集合的线程安全多线程锁Callable 接口JUC 三大辅助类: CountDownLatch CyclicBarrier Semaphore读写锁: ReentrantReadWriteLock阻塞队列ThreadPool 线程池Fork/Join 框架CompletableFuture 1 什么是 JUC 1.1 JUC 简介 在 Java …

小tips:MySQL中如何导出表中的数据(Navicat)

1.在Navicat中找出想要导出数据的表 2.将箭头放在目的表上&#xff0c;点击右键--->点击复制表--->点击结构和数据或者仅结构&#xff08;根据需求选择需要复制的内容&#xff09;

CertiK因发现Apple Vision Pro眼动追踪技术漏洞,第6次获苹果认可

​2024年9月20日&#xff0c;头部Web3.0安全机构CertiK自豪地宣布&#xff0c;CertiK的工程师因发现Apple Vision Pro MR&#xff08;混合现实&#xff09;头显设备中的关键漏洞而获得Apple公司认可&#xff0c;这已经是Apple公司第六次公开发布对CertiK的致谢&#xff0c;Cert…

JAVA自助高效安全无人台球茶室棋牌室系统小程序源码

​探索“自助高效安全无人台球茶室棋牌室系统”的奇妙之旅 &#x1f3b1;&#x1f375;&#x1f3b2; &#x1f50d; 初见惊艳&#xff1a;未来娱乐新体验 &#x1f50d; 走进这家无人值守的台球茶室棋牌室&#xff0c;第一感觉就像是穿越到了未来&#xff01;没有繁琐的前台登…

伊犁云计算22-1 ftp 配置

1 局域网搭建好 2 yum 编译好 开干 查看有没有安装vsftpd 加载iso 光盘

如何短期提高品牌声量?说几个有效策略

在如今竞争激烈的市场环境中&#xff0c;品牌声量成为了衡量一个品牌市场影响力的关键指标。一个强大的品牌声量不仅可以增加品牌的可见度&#xff0c;还能有效提升品牌的市场竞争力。但是&#xff0c;如何有效提升品牌声量&#xff0c;成为很多企业面临的挑战。首先我们要明确…

球形包围框-Bounding Sphere-原理-代码实现

定义&#xff1a;通过一个球体包围所有点云点&#xff0c;该球体的球心和半径由点云的分布决定&#xff0c;并且球体的半径尽可能小。优点&#xff1a;计算简单&#xff0c;通常用于快速粗略估计物体的范围。缺点&#xff1a;对于不规则形状的物体&#xff0c;包围不紧密&#…

VMware tools安装

1.安装VMware tools工具 2.将压缩文件拖到桌面再解压 3. 进入终端 4.输入sudo ./vmware-install.pl 5.等待即安装成功 6.可以选择自动调整大小 7.自行调试即可

Lucene 倒排索引原理详解:深入探讨相关算法设计

引言 随着互联网的快速发展&#xff0c;数据量呈现爆炸性的增长&#xff0c;如何从海量数据中快速准确地获取所需信息成为了一项挑战。全文搜索引擎的出现极大地解决了这个问题&#xff0c;而 Lucene 正是一款优秀的开源全文搜索引擎库。本文将深入探讨 Lucene 的核心技术之一…

为人机交互保持预见性丨基于G32A1445的T-BOX应用方案

T-BOX是一种集成了通信、计算和控制功能的车载信息处理终端&#xff0c;通过车辆与云端、移动网络等进行数据交互&#xff0c;用于车、人、外部环境的互联互通&#xff0c;支持车辆定位、车载通信、远程控制、故障诊断、数据传输、紧急呼叫等功能&#xff0c;帮助车辆实现更加智…

力扣(leetcode)每日一题 2332 坐上公交的最晚时间

题目&#xff1a; 给你一个下标从 0 开始长度为 n 的整数数组 buses &#xff0c;其中 buses[i] 表示第 i 辆公交车的出发时间。同时给你一个下标从 0 开始长度为 m 的整数数组 passengers &#xff0c;其中 passengers[j] 表示第 j 位乘客的到达时间。所有公交车出发的时间互…

长亭WAF绕过测试

本文的Bypass WAF 的核心思想在于&#xff0c;一些 WAF 产品处于降低误报考虑&#xff0c;对用户上传文件的内 容不做匹配&#xff0c;直接放行 0、环境 环境&#xff1a;两台服务器&#xff0c;一台配置宝塔面板&#xff0c;一台配置长亭雷池WAF 思路主要围绕&#xff1a;m…

【渐冻勇士的营养秘籍!这些营养素让爱更坚强】

Hey小伙伴们~&#x1f44b; 今天我们来聊聊一个温暖而坚强的话题——渐冻症患者的营养补充攻略&#xff01;&#x1f4aa; 在这个充满挑战的路上&#xff0c;合理的营养摄入就像是他们最坚实的盔甲&#xff0c;让爱与希望的光芒更加耀眼。✨ &#x1f308; ‌蛋白质&#xff1…

Altium Designer(AD)百度云下载与安装(附安装步骤)

在我们日常使用当中&#xff0c;Altium designer常常也被简称为AD&#xff0c;是一款一体化的电子产品开发系统软件&#xff0c;主要运行在Windows操作系统上。 我们通过Altium designer把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技…

商业终端架构技术-未来之窗行业应用跨平台架构

未来之窗行业应用跨平台架构 以下是对未来之窗行业应用跨平台架构中客户端的稳定优势和网页跨平台性质的扩展列举&#xff1a; 一、客户端的稳定优势&#xff1a; 1. 离线可用性 - 即使在没有网络连接的…

AI与量化投资人才培养计划-连接职场 助力走在金融行业前沿

AI与量化投资人才培养计划-连接职场 助力走在金融行业前沿 人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;量化投资已逐渐成为金融行业的新趋势&#xff0c;对专业人才的需求日益迫切。本文将深入探讨一项针对AI与量化投资的人才培养计划&#xff0c;旨在为金融专业…

电气自动化入门05:三相异步电动机的正反转点动控制电路

视频链接&#xff1a;3.2 电工知识&#xff1a;三相异步电动机的正反转点动控制电路_1_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p6&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.断路器及其选型 1.1断路器定义、分类、表示符号 1.2.断路器功能、…