深度学习:Java DL4J基于RNN构建智能停车管理模型
### 深度学习:Java DL4J基于RNN构建智能停车管理模型
#### 引言
随着城市化进程的加速,停车问题日益成为城市管理的难点和痛点。传统的停车场管理方式效率低下,导致停车场资源无法得到充分利用,车主停车体验差。为了解决这些痛点,智能停车管理系统应运而生。智能停车管理系统借助先进的技术手段,如传感器、摄像头等收集停车场的实时数据,再通过数据分析和智能算法,实现车辆的高效引导、车位的合理分配等功能。其中,深度学习技术在处理复杂的停车数据和预测停车需求方面具有独特的优势。本文将详细介绍如何使用Java DL4J(Deeplearning4j)基于RNN(循环神经网络)构建智能停车管理模型。
#### 一、技术背景
##### 1.1 DL4J简介
Deeplearning4j(DL4J)是一个基于Java的深度学习库,它提供了丰富的工具和算法,方便开发者在Java环境中进行深度学习模型的开发和训练。DL4J支持多种深度学习模型,如多层感知机(MLP)、卷积神经网络(CNN)、循环神经网络(RNN)等。DL4J是一个开源的、分布式的深度学习库,用于在Java和Scala中进行深度学习。它易于使用,提供了简单的API,方便开发者快速搭建和训练深度学习模型;它高性能,支持多线程和分布式计算,能够充分利用计算资源,提高模型训练速度;它支持丰富的模型,满足开发者在不同应用场景下的需求。
##### 1.2 RNN简介
循环神经网络(RNN)是一种具有记忆能力的神经网络,它能够处理序列数据,非常适合处理时间序列相关的问题,如停车场的车辆进出数据。RNN通过在网络中引入循环连接,使得信息可以在不同的时间步之间传递,从而捕捉到数据中的时间依赖关系。在预测停车场某个时间段的车位占用情况时,我们不仅需要考虑当前的车辆进出情况,还需要考虑过去一段时间的历史数据。RNN能够很好地处理这种具有时间序列特征的数据,通过学习历史数据中的模式和规律,来预测未来的车位占用情况。
#### 二、数据集准备
在构建智能停车管理模型之前,我们需要准备相关的数据集。数据集包含停车场的使用情况和车辆进出数据。数据集以CSV格式存储,每行代表一个时间点的停车场数据。时间戳表示数据记录的时间,进入车辆数和离开车辆数分别表示在该时间点进入和离开停车场的车辆数量,剩余车位数表示该时间点停车场剩余的可用车位数。
假设数据集文件名为`parking_data.csv`,存储在项目的`resources`目录下。数据集的格式如下:
```
timestamp,enter_cars,leave_cars,available_spots
2023-01-01 00:00:00,10,5,30
2023-01-01 00:15:00,3,2,29
...
```
#### 三、模型构建
##### 3.1 引入DL4J相关的Maven依赖
要使用Deeplearning4j进行开发,我们需要在项目的`pom.xml`文件中引入相关的依赖。主要的依赖包括:
- `deeplearning4j-core`:DL4J的核心库,提供了深度学习模型的构建、训练和评估等功能。
- `nd4j-native-platform`:用于处理多维数组数据,是DL4J的数据处理基础库。
- `deeplearning4j-ui_2.13`:用于可视化深度学习模型的训练过程和结果。
Maven依赖配置如下:
```xml
<dependencies>
<!-- Deeplearning4j核心依赖 -->
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-core</artifactId>
<version>1.0.0-beta7</version>
</dependency>
<!-- 用于数据处理的依赖 -->
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-beta7</version>
</dependency>
<!-- 用于数据可视化的依赖 -->
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-ui_2.13</artifactId>
<version>1.0.0-beta7</version>
</dependency>
</dependencies>
```
##### 3.2 数据加载和预处理
首先,我们需要将数据集加载到内存中。使用Java代码加载CSV数据集的示例如下:
```java
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.factory.Nd4j;
import java.io.File;
import java.io.IOException;
import org.datavec.api.records.reader.RecordReader;
import org.datavec.api.records.reader.impl.csv.CSVRecordReader;
import org.datavec.api.split.FileSplit;
import org.deeplearning4j.datasets.datavec.RecordReaderDataSetIterator;
public class DataLoader {
public static DataSetIterator loadData(String filePath, int batchSize, int labelIndex, int numClasses) throws IOException, InterruptedException {
// 创建CSV记录读取器
RecordReader recordReader = new CSVRecordReader();
// 设置数据集文件路径
recordReader.initialize(new FileSplit(new File(filePath)));
// 创建数据集迭代器
DataSetIterator dataSetIterator = new RecordReaderDataSetIterator(recordReader, batchSize, labelIndex, numClasses);
return dataSetIterator;
}
}
```
在上述代码中,我们首先创建了一个`CSVRecordReader`对象,用于读取CSV格式的数据集。然后,通过`initialize`方法设置数据集文件的路径。最后,我们创建了一个`RecordReaderDataSetIterator`对象,用于迭代数据集。
##### 3.3 构建RNN模型
接下来,我们使用DL4J构建RNN模型。RNN模型包括输入层、隐藏层和输出层。输入层负责接收输入数据,隐藏层负责处理输入数据并提取特征,输出层负责输出预测结果。
在构建RNN模型时,我们需要设置模型的参数,如输入层的大小、隐藏层的大小、输出层的大小、学习率等。以下是一个简单的RNN模型构建示例:
```java
import org.deeplearning4j.nn.conf.MultiLayerConfiguration;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.layers.LSTM;
import org.deeplearning4j.nn.conf.layers.OutputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.optimize.listeners.ScoreIterationListener;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import org.nd4j.linalg.learning.config.Adam;
import org.nd4j.linalg.lossfunctions.LossFunctions;
public class ParkingRNNModel {
public static void main(String[] args) throws IOException, InterruptedException {
int inputSize = 3; // 输入层大小(进入车辆数、离开车辆数、剩余车位数)
int hiddenSize = 50; // 隐藏层大小
int outputSize = 1; // 输出层大小(预测剩余车位数)
int numEpochs = 100; // 训练轮数
int batchSize = 64; // 批量大小
// 加载数据集
DataSetIterator trainIter = DataLoader.loadData("path/to/parking_data.csv", batchSize, -1, 1);
// 构建RNN模型
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.updater(new Adam(0.01)) // 设置学习率
.list()
.layer(new LSTM.Builder().nIn(inputSize).nOut(hiddenSize)
.activation(Activation.TANH).build()) // LSTM层
.layer(new OutputLayer.Builder(LossFunctions.LossFunction.MSE)
.nIn(hiddenSize).nOut(outputSize).activation(Activation.IDENTITY).build()) // 输出层
.build();
MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();
model.setListeners(new ScoreIterationListener(10)); // 设置训练监听器
// 训练模型
for (int i = 0; i < numEpochs; i++) {
model.fit(trainIter);
}
// 保存模型
model.save(new File("path/to/parking_rnn_model.zip"), true);
}
}
```
在上述代码中,我们首先设置了模型的参数,如输入层大小、隐藏层大小、输出层大小、学习率等。然后,我们使用`NeuralNetConfiguration.Builder`构建RNN模型的配置,包括LSTM层和输出层。接着,我们创建了`MultiLayerNetwork`对象,并初始化模型。最后,我们使用`fit`方法训练模型,并保存训练好的模型。
#### 四、模型评估与优化
在训练完模型后,我们需要对模型进行评估和优化。评估模型的方法包括计算损失函数、准确率
相关文章:
深度学习:Java DL4J基于RNN构建智能停车管理模型
### 深度学习:Java DL4J基于RNN构建智能停车管理模型 #### 引言 随着城市化进程的加速,停车问题日益成为城市管理的难点和痛点。传统的停车场管理方式效率低下,导致停车场资源无法得到充分利用,车主停车体验差。为了解决这些痛点…...
创建型模式-工厂模式
工厂模式是一种创建型的设计模式,原理是父类提供一个创建对象的方法,允许子类去实现具体的实例化对象。通过此模式可减少创建和具体的产品之间的耦合关系。 适用场景: 1、当需求中无法预估对象确切类别及个别的依赖关系。例如: …...
UI自动化测试框架playwright--初级入门
一、背景:UI自动化的痛点: 1、设计脚本耗时: 需要思考要如何模拟用户的操作,如何触发页面的事件,还要思考如何设计脚本,定位和操作要交互的元素、路径、位置,再编写代码逻辑,往复循…...
算法 -归并排序
博客主页:【夜泉_ly】 本文专栏:【算法】 欢迎点赞👍收藏⭐关注❤️ 文章目录 🔀 归并排序📖 简介🖼️ 示意图💡 实现思路💻 代码实现💡 实现思路2 - 非递归💻…...
基于html5实现音乐录音播放动画源码
源码介绍 基于html5实现音乐录音播放动画源码是一款类似Shazam的UI,点击按钮后,会变成为一个监听按钮。旁边会有音符飞入这个监听按钮,最后转换成一个音乐播放器。 效果预览 源码获取 基于html5实现音乐录音播放动画源码...
NRC优先级中比较特殊的—NRC0x13和NRC0x31
1、基础知识 大家都了解 NRC0x13,表示长度错误和格式错误 NRC0x31,表示DID不支持和数据格式不支持 2、为什么说这两个NRC比较特殊 看下图的标注部分: 2.1、先看NRC0x13 步骤一:仔细看是先判断Minmun Length Check ࿰…...
文件的介绍4
一、文件的随机读写 1.fseek I 从左往右 第一个参数 stream 是一个 指向已经被打开的文件流 的指针 第三个参数 origin 是个常量,指定从哪个位置开始偏移,它的取值: SEEK_SET:从文件开头开始偏移。SEEK_CUR:从当前…...
Mysql - 多表连接和连接类型
在关系型数据库中,多表连接(JOIN)是用于从多个表中检索数据的常用操作。通过连接多个表,可以将分散在不同表中的相关数据组合在一起,从而进行更复杂的查询和分析。在这篇文章中,我们将深入探讨MySQL中的多表…...
Tableau数据可视化与仪表盘搭建-可视化原则及BI仪表盘搭建
目录 可视化原则 BI仪表盘搭建 仪表盘搭建原则 明确仪表盘主题 仪表盘主题拆解 开发设计工作表 经营情况总览:突出显示的文字 经营数据详情:表格 每日营收数据:多轴折线图 每日流量数据:双轴组合图 新老客占比…...
如何制作一份出色的公司介绍PPT?
制作一份公司介绍的PPT需要精心设计,以确保内容既专业又吸引人。以下是一个基本的框架和一些建议,帮助您创建一份有效的公司介绍PPT: PPT标题页 标题:公司全称(可使用公司Logo作为背景或嵌入标题中)副标题…...
【Arm】Arm 处理器的半主机(semihosting)机制
概览 通过 semihosting 机制,主机可以通过调试器使用目标计算机 IO 接口。 例如开发者的 PC 通过 J-Link 来使用 STM32 MCU 的输入输出。 这些功能的示例包括键盘输入、屏幕输出和硬盘 I/O。例如,可以使用此机制启用 C Library 中的函数,如…...
C语言基本知识复习浓缩版:输出函数printf
输出函数printf学习 printf()的作用是将文本输出到屏幕上使用之前需要先引入stdio.h头文件printf函数在使用的时候,至少需要一个参数 printf() 是 C 语言标准库中的一个函数,用于将格式化的文本输出到标准输出设备(通常是屏幕)。…...
pygame飞机大战
飞机大战 1.main类2.配置类3.游戏主类4.游戏资源类5.资源下载6.游戏效果 1.main类 启动游戏。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置类 该类主要存放游戏的各种设置参数。 #窗口尺寸 #窗口尺寸 import random import p…...
WebRTC:构建实时通信应用的利器
都已无处不在。而 WebRTC(Web Real-Time Communication)则为开发者提供了一种简便的方式,来在浏览器中实现实时的音视频通信和数据传输。本文将介绍 WebRTC 的基本概念、工作原理,以及如何利用 WebRTC 构建实时通信应用。 什么是…...
个人博客搭建(二)—Typora+PicGo+OSS
个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚: 做个超努力的小奚-CSDN博客 一、前言 博客搭建完一直没有更新,因为WordPress自带的文档编辑器不方便,以前用CSDN写作的时候,习惯了Typora。最近对比了…...
华纳云:在centos7中tomcat内存怎么设置?
在 CentOS 7 中,可以通过修改 Tomcat 的启动脚本来调整 Tomcat 的内存设置。Tomcat 的内存配置主要涉及 JVM 参数(Java Virtual Machine),可以通过设置 -Xms(初始内存)和 -Xmx(最大内存)来调整内存大小。 步骤如下: 1. 修改 Tomcat 启动脚本 …...
樱桃键盘win键按了没反应怎么处理
游戏模式:部分樱桃键盘在进入游戏模式后会禁用Win键,以防止在游戏过程中误触。可以通过按下Fn F9键来切换游戏模式和办公模式,确保键盘处于办公模式下,Win键即可恢复正常功能。 (至此我的问题已解决,…...
【UE5 C++课程系列笔记】23——多线程基础——AsyncTask
目录 概念 函数说明 注意事项 (1)线程安全问题 (2)依赖特定线程执行的任务限制 (3)任务执行顺序和时间不确定性 使用示例 概念 AsyncTask 允许开发者将一个函数或者一段代码逻辑提交到特定的线程去执…...
Docker运维高级容器技术知识点总结
1、虚拟机部署和容器化部署的区别是什么? 1、技术基础: <1>.虚拟化技术在物理硬件上创建虚拟机,每台虚拟机运行自己完整的操作系统、从而实现资源隔离。 <2>.容器化技术:将应用程序打包在容器内,在进程空间…...
Docker的安装和使用
容器技术 容器与虚拟机的区别 虚拟机 (VM) VM包含完整的操作系统,并在虚拟化层之上运行多个操作系统实例。 VM需要更多的系统资源(CPU、内存、存储)来管理这些操作系统实例。 容器 (Container) 容器共享主机操作系统的内核,具…...
Java语法总结
Java的数据类型分为基本数据类型和引用数据类型。 1.基本数据类型:四类八种 byte 和short 比较特殊,不必考虑int类型,只关注是否超出了表示范围。 数据超出了int的范围,改正:在后边添加L ,定义变量报错…...
Linux文件系统的安全保障---Overlayroot!
overlayroot 是一种使用 OverlayFS 实现的功能,可将根文件系统挂载为只读,并通过一个临时的写层实现对文件系统的修改。这种方法非常适合嵌入式设备或需要保持系统文件完整性和安全性的场景。下文以 RK3568 平台为例,介绍制作 overlayroot 的…...
net-http-transport 引发的句柄数(协程)泄漏问题
Reference 关于 Golang 中 http.Response.Body 未读取导致连接复用问题的一点研究https://manishrjain.com/must-close-golang-http-responsehttps://www.reddit.com/r/golang/comments/13fphyz/til_go_response_body_must_be_closed_even_if_you/?rdt35002https://medium.co…...
Elasticsearch:在 HNSW 中提前终止以实现更快的近似 KNN 搜索
作者:来自 Elastic Tommaso Teofili 了解如何使用智能提前终止策略让 HNSW 加快 KNN 搜索速度。 在高维空间中高效地找到最近邻的挑战是向量搜索中最重要的挑战之一,特别是当数据集规模增长时。正如我们之前的博客文章中所讨论的,当数据集规模…...
嵌入式c语言的内存管理
目录 一、内存布局概述 二、栈(Stack) 2.1. 定义与用途 2.2. 内存分配与释放 2.3. 增长方向与大小限制 三、堆(Heap) 3.1. 定义与用途 3.2. 内存分配与释放 3.3. 增长方向与潜在问题 四、全局/静态存储区 4.1. 定义与用…...
uniapp-vue3 实现, 一款带有丝滑动画效果的单选框组件,支持微信小程序、H5等多端
采用 uniapp-vue3 实现, 是一款带有丝滑动画效果的单选框组件,提供点状、条状的动画过渡效果,支持多项自定义配置,适配 web、H5、微信小程序(其他平台小程序未测试过,可自行尝试) 可到插件市场下载尝试&…...
【Linux】shell脚本编程
目录 概念: shell脚本的本质: shell脚本编程: shell变量: 变量的定义格式: 变量的分类 自定义变量: 环境变量: 命令变量与命令行参数: 预定义变量: shell中的…...
ingress-nginx-controller安装
ingress-nginx-controller安装 ingress-nginx-controller是配置ingress发布的基础。以下主要采用Helm安装。地址: GitHub - kubernetes/ingress-nginx: Ingress NGINX Controller for Kubernetes 1 Helm安装 安装不难,需要找到合适的压缩包就行。我自…...
机器学习基础-机器学习的常用学习方法
目录 半监督学习的概念 规则学习的概念 基本概念 机器学习里的规则 逻辑规则 规则集 充分性与必要性 冲突消解 命题逻辑 → 命题规则 序贯覆盖 单条规则学习 剪枝优化 强化学习的概念 1. 强化学习对应了四元组 2. 强化学习的目标 强化学习常用马尔可夫决策过程…...
如何在Windows 11 WSL2 Ubuntu 环境下安装和配置perf性能分析工具?
在Windows 11 WSL2 Ubuntu 环境下完整安装和配置perf性能分析工具 一、背景二、准备工作三、获取并编译Linux内核源码四、安装和配置perf五、测试perf六、总结 一、背景 由于WSL2使用的是微软定制的内核,并非标准的Ubuntu内核,因此直接使用apt安装linux…...
人工智能知识分享第十天-机器学习_聚类算法
聚类算法 1 聚类算法简介 1.1 聚类算法介绍 一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。 目的是将数据集中的对象分成多个簇(Cluster),使得同一簇内的对象相似度较高,而不同簇之间的对象相…...
使用wav2vec 2.0进行音位分类任务的研究总结
使用wav2vec 2.0进行音位分类任务的研究总结 原文名称: Using wav2vec 2.0 for phonetic classification tasks: methodological aspects 研究背景 自监督学习在语音中的应用 自监督学习在自动语音识别任务中表现出色,例如说话人识别和验证。变换器模型…...
【Leetcode 热题 100】33. 搜索旋转排序数组
问题背景 整数数组 n u m s nums nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前, n u m s nums nums 在预先未知的某个下标 k ( 0 ≤ k < n u m s . l e n g t h ) k(0 \le k \lt nums.length) k(0≤k<nums.length) 上进行了 旋转&…...
【VScode】设置代理,通过代理连接服务器
文章目录 VScode编辑器设置代理1.图形化界面1.1 进入proxy设置界面1.2 配置代理服务器 2.配置文件(推荐)2.1 打开setting.json 文件2.2 配置代理 VScode编辑器设置代理 根据情况安装nmap 1.图形化界面 1.1 进入proxy设置界面 或者使用快捷键ctrl , 。…...
每日一题-两个链表的第一个公共结点
文章目录 两个链表的第一个公共结点问题描述示例说明示例 1示例 2 方法及实现方法描述代码实现 复杂度分析示例运行过程示例 1示例 2 总结备注 两个链表的第一个公共结点 问题描述 给定两个无环的单向链表,找到它们的第一个公共节点。如果没有公共节点,…...
Linux存储管理之核心秘密(The Core Secret of Linux Storage Management)
Linux存储管理之核心秘密 如果你来自Windows环境,那么Linux处理和管理存储设备的方式对你而言可能显得格外不同。我们知道,Linux的文件系统并不采用Windows那样的物理驱动器表示方式(如C:、D:或E:),而是构建了一个以&…...
js单例模式
保证一个类只有一个实例,并提供一个访问它的全局访问点 实现 静态方法实现 class SingleTon{//全局的访问点static getInstance(){// 保证一个类只有一个实例if(!this.instance){this.instancenew SingleTon()}return this.instance}}let aSingleTon.getInstance()let bSing…...
搭建一个本地轻量级且好用的学习TypeScript语言的环境
需求说明 虽然 TypeScript 的在线 Playground 很方便 https://www.tslang.com.cn/play/,但毕竟是在浏览器中使用,没有本地的 IDE 那么顺手。所以我想搭建一个本地类似 Playground 的环境,这样在学习 TypeScript 的过程中,可以更方…...
大模型(LLM)面试全解:主流架构、训练目标、涌现能力全面解析
系列文章目录 大模型(LLMs)基础面 01-大模型(LLM)面试全解:主流架构、训练目标、涌现能力全面解析 大模型(LLMs)进阶面 文章目录 系列文章目录大模型(LLMs)基础面一、目…...
入门嵌入式(七)——PWM
PWM 脉冲宽度调制PWM(Pulse-Width Modulation) 一组方波 周期 1ms 频率 1s / 周期 占空比 高电平/周期 数字信号:0/1高低电平 串口 IIC PWM都属于数字信号 模拟信号:电压值, 会受到电磁影响 ADC 模数转换 用于读取…...
Flutter 实现 列表滑动过程控件停靠效果 学习
实现一个 Flutter 应用程序,使用 Sliver 系列组件来创建具有滚动效果的复杂布局。使用 NestedScrollView 和 SliverPersistentHeader 来实现固定和动态的头部效果,以及一个可滚动的列表。 前置知识点学习 SingleTickerProviderStateMixin SingleTicker…...
STM32+WIFI获取网络时间+8位数码管显示+0.96OLED显
资料下载地址:STM32WIFI获取网络时间8位数码管显示0.96OLED 1、项目介绍 主控芯片STM32C8T6 接线:串口1:PA9 PA10 OELD :PB6 PB7 数码管使用:MAX7219 8位数码管 Max7219_pinCLK PAout(5) Max7219_pinC…...
Kivy App开发之UX控件Slider滑块
在app中可能会调节如音量,亮度等,可以使用Slider来实现,该控件调用方便,兼容性好,滑动平稳。在一些参数设置中,也可以用来调整数值。 支持水平和垂直方向,可以设置默认值,最小及最大值。 使用方法,需用引入Slider类,通过Slider类生成一个滑块并设置相关的样式后,再…...
STM32学习(十)
I2C模块内部结构 I2C(Inter-Integrated Circuit)模块是一种由Philips公司开发的二线式串行总线协议,用于短距离通信,允许多个设备共享相同的总线。 硬件连接简单:I2C通信仅需要两条总线,即SCL&…...
何为“正则表达式”!
详细解释: ^:在JSON的正则表达式中,^表示匹配输入字符串的开始位置。这意味着正则表达式将从字符串的开头开始进行匹配,确保整个字符串符合后续的模式要求。例如,对于字符串"3.14",正则表达式会…...
创建Java项目,并添加MyBatis包和驱动包
一 : Mybatis和jsp使用上,只有Dao层有区别 Mybatis 使用方法: 测试类的7步骤 1.读取核心配置文件 2.构建sql会话工厂 3.开启sql会话 4.获取mapper接口 5.调用相对应的增删改查方法 6.打印 7.关闭回话 /*** 用户列表* throws IOException*/Testpublic void roleList() throws IO…...
目标检测文献阅读-DETR:使用Transformer进行端到端目标检测
目录 摘要 Abstract 1 引言 2 DETR结构 2.1 Backbone 2.2 Encoder 2.3 Decoder 2.4 FFN 3 目标检测集合预测损失 3.1 二分图匹配损失 3.2 损失函数 总结 摘要 本周阅读的论文题目是《End-to-End Object Detection with Transformers》(使用Transformer进行端到端目…...
C#里对已经存在的文件进行压缩生成ZIP文件
先要对目录下所有文件获取到: private List<string> GetXDFiles(string dirPath){//获取目录中的所有文件string suffix = "*.txt"; // 要查找的文件后缀var files = Directory.GetFiles(dirPath, suffix, SearchOption.TopDirectoryOnly).ToList();return fi…...
单片机软件定时器V4.0
单片机软件定时器V4.0 用于单片机定时执行任务等,比如LED GPIO等定时控制,内置前后台工作模式 头文件有使用例子 #ifndef __SORFTIME_APP_H #define __SORFTIME_APP_H#ifdef __cplusplus extern "C" { #endif#include <stdint.h>// #…...
【嵌入式硬件】嵌入式显示屏接口
数字显示串行接口(Digital Display Serial Interface) SPI 不过多赘述。 I2C-bus interface 不过多赘述 MIPI DSI MIPI (Mobile Industry Processor Interface) Alliance, DSI (Display Serial Interface) 一般用于移动设备,下面是接口…...