stm32温湿度-超声波-LCD1602结合项目(Proteus仿真程序)

资料下载地址:stm32温湿度-超声波-LCD1602结合项目(Proteus仿真程序) 

程序实现功能:
程序基于stm32芯片实现了控制LED灯亮灭、按键控制、串口通信、电机控制、温湿度数据采集、超声波测距、LCD显示屏显示内容这几个功能,并用proteus8进行仿真。
1.电路图
1、我设计的电路图如下所示:

仿真原理图如下

2. 程序功能介绍
程序总共包括控制LED灯亮灭、按键控制、串口通信、电机控制、温湿度数据采集、超声波测距、LCD显示屏显示内容这几个功能,以下是这些功能的介绍:
2.1. LED灯亮灭与按键控制
程序默认运行时,两个LED灯会被点亮。当按下按钮后,两个LED灯会闪烁。

2.2. 串口通信
程序运行时,虚拟终端接串口通信用到的接收端和发送端,通过配置波特率、传输的奇偶校验位、停止位、字长以及重定向,将printf函数打印的内容打印到虚拟终端上。
2.3. 电机的控制
通过L298芯片,改变功率,来控制电机的转动。

2.4. 温湿度数据采集
用DHT11温湿度传感器来采集温湿度信息。
通过了解DHT11的工作时序,设计好对应的延时函数,进行数据采集,同时通过循环将每次采集的数据打印在虚拟终端上。
2.5. 超声波测距
通过超声波测距模块来进行测距。
通过了解超声波测距模块的时序,利用定时器,采集测到的距离,并且通过循环打印在虚拟终端上。
2.6. LCD液晶显示器显示数据
客户端可以通过发送“database”字符串进入到数据库的相关服务,在选择相应功能执行。如下图所示:
通过了解LM16016l中各引脚功能,相关控制指令以及写时序和读时序,在程序运行时,在显示屏上打印“hello”。
3.具体代码如下:
* 文件名  : UltrasonicWave.c
* 描述    :超声波测距模块,UltrasonicWave_Configuration()函数
             初始化超声模块,UltrasonicWave_StartMeasure()函数
                         启动测距,并将测得的数据通过串口1打印出来         
* 实验平台:野火STM32开发板
* 硬件连接:------------------
*          | PC8  - TRIG      |
*          | PC9  - ECHO      |
*           ------------------
* 库版本  :ST3.5.0
UltrasonicWave.H
  1. #ifndef __UltrasonicWave_H
  2. #define        __UltrasonicWave_H
  3. void UltrasonicWave_Configuration(void);               //对超声波模块初始化
  4. void UltrasonicWave_StartMeasure(void);                //开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
  5. #endif /* __UltrasonicWave_H */
复制代码

UltrasonicWave.c
*********************************************************************************/
#include "./Wave/UltrasonicWave.h"
#include "./usart/bsp_usart.h"
#include "./Tim2/TIM2.h"

#define        TRIG_PORT      GPIOC                //TRIG      
#define        ECHO_PORT      GPIOC                //ECHO
#define        TRIG_PIN       GPIO_Pin_8   //TRIG      
#define        ECHO_PIN       GPIO_Pin_9        //ECHO   

unsigned short int UltrasonicWave_Distance;      //计算出的距离   

/*
* 函数名:DelayTime_us
* 描述  :1us延时函数
* 输入  :Time           延时的时间 US
* 输出  :无        
*/
void DelayTime_us(int Time)   
{
   unsigned char i;
   for ( ; Time>0; Time--)
     for ( i = 0; i < 72; i++ );
}

/*
* 函数名:UltrasonicWave_Configuration
* 描述  :超声波模块的初始化
* 输入  :无
* 输出  :无        
*/
void UltrasonicWave_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;        
                 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
   
  GPIO_InitStructure.GPIO_Pin = TRIG_PIN;                                         //PC8接TRIG
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                     //设为推挽输出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  GPIO_Init(TRIG_PORT, &GPIO_InitStructure);                         //初始化外设GPIO

  GPIO_InitStructure.GPIO_Pin = ECHO_PIN;                                     //PC9接ECH0
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                 //设为输入
  GPIO_Init(ECHO_PORT,&GPIO_InitStructure);                                                 //初始化GPIOA
}

/*
* 函数名:UltrasonicWave_CalculateTime
* 描述  :计算距离
* 输入  :无
* 输出  :无        
*/
void UltrasonicWave_CalculateTime(void)
{
   UltrasonicWave_Distance=TIM_GetCounter(TIM2)*5*34/2000;
}

/*
* 函数名:UltrasonicWave_StartMeasure
* 描述  :开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
* 输入  :无
* 输出  :无        
*/
void UltrasonicWave_StartMeasure(void)
{
  GPIO_SetBits(TRIG_PORT,TRIG_PIN);                   //送>10US的高电平
  DelayTime_us(20);                                      //延时20US
  GPIO_ResetBits(TRIG_PORT,TRIG_PIN);
  
  while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                     //等待高电平
  TIM_Cmd(TIM2, ENABLE);                                             //开启时钟
  while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                         //等待低电平
  TIM_Cmd(TIM2, DISABLE);                                                         //定时器2失能
  UltrasonicWave_CalculateTime();                                                                         //计算距离
  TIM_SetCounter(TIM2,0);

        printf("\r\ndistance:%d%d cm\r\n",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256);        
            
}
 



  1.  

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新一代python管理工具--uv

uv 工具全方位介绍 起源与背景 uv 是由 Astral&#xff08;pipx 作者&#xff09;团队用 Rust 语言开发的新一代 Python 包和环境管理工具。其目标是解决传统 pip/venv/conda 在依赖解析慢、环境隔离繁琐、命令复杂等方面的痛点&#xff0c;为现代 Python 项目提供极速、自动…

路由交换技术-思科拓扑搭建

配置流程 1.搭建网络拓扑图。 2.规划配置IP地址&#xff0c;内网配置为192.168.1.0和192.168.2.0网段。 3.划分vlan10&#xff0c;vlan20&#xff0c;vlan30。 4.配置静态、动态路由。配置路由器Router7&#xff0c;使内外网互通。 5.配置链路聚合。通过链路聚合技术&#xff…

清华大学视觉空间智能新突破!Spatial-MLLM:提升多模态大语言模型的视觉空间智能能力

作者&#xff1a;Diankun Wu, Fangfu Liu, Yi‑Hsin Hung, Yueqi Duan 单位&#xff1a;清华大学 论文标题&#xff1a;Spatial-MLLM: Boosting MLLM Capabilities in Visual-based Spatial Intelligence 论文链接&#xff1a;https://arxiv.org/pdf/2505.23747 项目主页&a…

AI与机器学习ML:利用Python 从零实现神经网络

自线性回归以来&#xff0c;我们已经涵盖了很多领域。在本期中&#xff0c;我们将开始了解神经网络内部工作原理的旅程*。* 如果一个人试图了解任何使用生成式 AI 的工具、应用程序、网站或其他系统的内部工作原理&#xff0c;那么掌握神经网络的架构至关重要。在这个故事中&a…

Vim 匹配跳转与搜索命令完整学习笔记

Vim 匹配跳转与搜索命令完整学习笔记 文章目录 Vim 匹配跳转与搜索命令完整学习笔记1. 括号/结构匹配% - 括号匹配跳转[[ / ]] - 函数定义跳转[{ / ]} - 代码块边界跳转 2. 精确单词搜索* - 向下精确搜索# - 向上精确搜索 3. 模糊单词搜索g* - 向下模糊搜索g# - 向上模糊搜索 4…

安卓9.0系统修改定制化____系列 ROM解打包 修改 讲解 导读篇

专栏系列前言&#xff1a; &#x1f49d;&#x1f49d;&#x1f49d;本专栏作者从事rom系统修改以及手机维修 刷机多年。从当年山寨机开始。历经安卓4.--至目前的安卓15.合作伙伴遍及各类工作室以及PDA商家 私人玩友等。在广告机 平板 pda设备 会议机 车机的rom修改中略有经…

Vue3本地存储实现方案

在 Vue 3 中实现本地存储&#xff08;如用户配置数据&#xff09;&#xff0c;主要通过浏览器提供的 localStorage 或 sessionStorage API。以下是详细实现方案&#xff1a; 基础实现&#xff08;原生 API&#xff09; javascript 复制 下载 // 存储数据 localStorage.set…

计算机视觉与深度学习 | 2024年至2025年图像匹配算法总结(原理,公式,代码,开源链接)

图像匹配算法 一、核心算法分类与技术路线1. **传统局部特征 + 匹配优化**(鲁棒性强,适合资源受限场景)2. **端到端密集匹配网络**(高精度,适合复杂形变/弱纹理)3. **基于光流思想的匹配网络**4. **2024-2025年新趋势**二、核心开源工具库汇总三、典型代码流程(以LoFTR为…

瑞芯微 MIPI D-PHY 接收器(RX)驱动学习笔记

驱动文件位置 driver/phy/rockchip/phy-rockchip-mipi-rx.c 1 重要结构体 struct mipidphy_priv {struct device *dev;//表示与驱动程序关联的设备。它用于设备管理&#xff0c;如设备注册、注销等。struct regmap *regmap_grf;//用于映射和访问通用寄存器文件&#xff08;Gen…

MySQL从入门到DBA深度学习指南

目录 引言 MySQL基础入门 数据库基础概念 MySQL安装与配置 SQL语言进阶 数据库设计与规范化 数据库设计原则 表结构设计 MySQL核心管理 用户权限管理 备份与恢复 性能优化基础 高级管理与高可用 高可用与集群 故障诊断与监控 安全与审计 DBA实战与运维 性能调…

多个机器人同时加载在rviz及gazebo同一个场景中

1. 配置launch文件 gazebo的加载相对容易&#xff0c;但rviz中加载&#xff0c;需要构建完整的tf树&#xff08;world → map&#xff08;或map_merged&#xff09;→ odom → base_footprint → base_link → base_scan&#xff09;才能正常显示&#xff0c;launch文件主要是…

Text2SQL、Text2API基础

你有一个能力超强但“不太懂行”的助手&#xff08;大语言模型LLM&#xff09;。它能说会道&#xff0c;知识渊博&#xff0c;但它&#xff1a; 不懂你的数据库&#xff1a; 不知道你的数据库里有哪些表&#xff0c;表里有哪些字段&#xff0c;这些字段代表什么意思。不懂你的…

JDK 8u231安装教程 - Windows 64位下载安装及环境变量配置指南

下载安装包 把jdk-8u231-windows-x64.exe这个文件下载下来&#xff0c;下载链接&#xff1a;https://pan.quark.cn/s/a610ca7e5e9d&#xff0c;随便放哪儿&#xff0c;比如桌面或者下载文件夹。 双击运行安装 找到下载好的那个exe文件&#xff0c;直接双击打开。可能会弹个窗口…

LatentSync V8版 - 音频驱动视频生成数字人说话视频 更新V1.6版模型 支持50系显卡 支持批量 一键整合包下载

LatentSync 是字节跳动开源的一款"AI口型同步神器"&#xff0c;简单来说就是能让视频里的人物嘴巴动得和声音完美匹配的工具。比如你给一段配音&#xff0c;它能自动调整视频人物的嘴型&#xff0c;按照配音里的声音说出来&#xff0c;就像真人说话一样自然。简单说就…

从一组线段中得出四边形的算法

原始的需求是使用OpenCV的直线检测算法&#xff08;例如LSD&#xff09;之后&#xff0c;得到一组线段。然后需要从这些线段得到类似矩形的四边形&#xff0c;用于检测经过透视变换的矩形物体。这些线段不一定首尾相接&#xff0c;彼此之间可能相交或有一定距离。 以下是需求图…

提示词Prompts(2)

摘要&#xff1a; 本文介绍了langchain.prompts中基础的提示词模板的高级用法&#xff0c;包括利用PipelinePrompt组合Prompt使用&#xff0c;多模态场景、动态占位符的使用等进行了介绍。 文章目录 1. 背景2. PipelinePrompt2.1 组合两个Prompt模板2.2 多模态模板 3. 聊天提示…

服务器代码知识点补充

目录 UdpServer: 观察者模式: remove_if算法 管道补充: 文件的标准输出 ,标准输入,标准错误 UdpServer: 数据接收模块关心Adduser 和Deleuser 两个模块 线程池关心Route模块 将这三个方法注册进服务器 ,但是有临界区问题(线程池与数据接受模块可能同时访问用户管理模块,所…

R语言缓释制剂QBD解决方案之二

药物层优化研究 在药物层工艺中水溶剂蒸发起到重要的作用。湿的环境会使丸子聚集&#xff0c;而干的环境影响药物与MCC的粘合。输入变量如气流量&#xff0c;喷雾速率&#xff0c;雾化压力&#xff0c;和产品温度对MCC沉着和包衣溶剂蒸发的平衡有影响。进行了带3个中心点的24-…

Html实现图片上传/裁剪/马赛克/压缩/旋转/缩放

cropper下载 https://download.csdn.net/download/dongyan3595/90970115 前端代码 <!doctype html> <html lang"en"> <head><base href"/aishop/"><meta name"viewport" content"widthdevice-width, initial…

springboot项目中整合高德地图

一&#xff1a;高德开放平台的使用 高德开放平台 | 高德地图API 注册高德地图账号 认证填写个人信息&#xff1a; 认证方式选择“个人认证开发者”即可&#xff0c;然后完善信息 认证成功之后&#xff0c;再次进入控制台&#xff0c;创建关于地图的应用 创建Key&#xff08;y…