首页 > 其他分享 >DH11温湿度检测模块、lcd1602、HC-08蓝牙构成温湿度数据管理系统

DH11温湿度检测模块、lcd1602、HC-08蓝牙构成温湿度数据管理系统

时间:2024-07-01 11:30:48浏览次数:24  
标签:DH11 头文件 Keil 温湿度 08 源文件 0x30 ASCII datas

目录

温湿度通过串口上传PC:

 温湿度数据管理系统:


温湿度通过串口上传PC:

sendByte(datas[0]/10 + 0x30);

sendByte(datas[0]%10 + 0x30);

这两行代码用于将一个字节(是DHT11传感器读取的湿度或温度的整数部分)转换为两个ASCII字符,并通过UART串口发送出去。

+ 0x30: 在ASCII字符集中,数字字符'0''9'的编码是连续的,从0x30(即48的十进制值)到0x39。因此,加上0x30实际上是将一个整数(在这里是0到9之间的值)转换为其对应的ASCII字符编码。

  • datas[0]/10计算该整数的十位数。例如,如果datas[0]是25,那么datas[0]/10就是2。
  • datas[0]%10计算该整数的个位数。对于上面的例子,datas[0]%10就是5。

接下来,这两部分都分别加上了0x30(ASCII码中数字'0'的值),从而将整数值转换为对应的ASCII字符。

  • datas[0]/10 + 0x30将十位数转换为ASCII字符。例如,2变成了字符'2'。
  • datas[0]%10 + 0x30将个位数转换为ASCII字符。例如,5变成了字符'5'。

最终,sendByte函数将这些ASCII字符作为字节发送出去,这样接收端就能理解这些字节是表示一个两位的十进制数字了。

 温湿度数据管理系统:

在Keil环境中进行分文件编程(也称为模块化编程)

在Keil中进行分文件编程的基本步骤:

  1. 创建主文件

    • 首先,你需要一个主文件(通常是.c文件),它包含了main()函数。
    • 在这个主文件中,你可以包含(或称为“引用”)其他模块的头文件。
  2. 创建头文件(.h)

    • 对于每个模块,创建一个头文件来声明该模块中定义的函数、变量和数据类型。
    • 使用#ifndef#define#endif指令来防止头文件被多次包含(这通常被称为“包含守卫”或“头文件保护”)。
    • 例如,如果你有一个名为moduleA.c的源文件,你可以创建一个名为moduleA.h的头文件来声明它的函数。
  3. 编写源文件(.c)

    • 对于每个模块,编写一个源文件来实现该模块的功能。
    • 在源文件的开头,包含相应的头文件。
    • 实现头文件中声明的函数和其他元素。
  4. 在主文件中包含头文件

    • 在主文件的开头,使用#include指令包含你需要的所有头文件。
    • 这样,主文件就可以访问这些模块中声明的函数和变量了。
  5. 在Keil中设置项目

    • 在Keil中创建一个新项目,并添加主文件和其他源文件。
    • 确保Keil知道在哪里找到你的头文件(你可能需要将头文件所在的目录添加到Keil的包含路径中)。
  6. 编译和链接

    • 编译你的项目。Keil将分别编译每个源文件,并将它们链接成一个可执行文件。
    • 如果一切正常,你应该能够生成一个可以在你的目标硬件上运行的可执行文件。
  7. 调试和测试

    • 使用Keil的调试功能来测试和验证你的代码。
    • 确保每个模块都按预期工作,并且它们之间的交互也是正确的。

main:

在C语言中,extern关键字用于声明一个变量或函数是在其他源文件中定义的,但在当前源文件中是可见的。这通常用于实现跨多个源文件的变量共享或函数调用。

当你看到extern char datas[5];这样的声明时,它意味着:

  1. 有一个字符数组datas,其大小为5(即它可以存储5个字符,包括可能的字符串终止符\0)。
  2. 这个数组datas是在当前源文件之外的其他地方定义的(可能是另一个源文件,或者是一个库文件等)。
  3. 当前源文件可以使用这个数组,但由于它只是在当前源文件中被声明,而不是定义,所以你不能在这里为它分配内存或初始化它。

为了使用datas数组,你需要在某个源文件中实际定义它,例如:

然后,在其他需要访问datas的源文件中,你可以使用extern关键字来声明它:

delay:

uart:

dht:

lcd1602:

标签:DH11,头文件,Keil,温湿度,08,源文件,0x30,ASCII,datas
From: https://blog.csdn.net/2301_76378962/article/details/140093012

相关文章

  • 【408考点之数据结构】排序的基本概念
    排序的基本概念排序是计算机科学中的一个基本操作,目的是将一组无序的数据元素按照特定的顺序排列起来。排序在数据管理、检索和分析中有着广泛的应用,能够提高数据处理的效率和准确性。1.排序的定义排序(Sorting)是指将一组记录按某个关键字或多个关键字的大小关系进行排列......
  • 【408考点之数据结构】顺序查找和折半查找
    顺序查找和折半查找在数据处理中,查找操作是非常重要的一部分。顺序查找和折半查找是两种常见的查找方法,它们各有优缺点和适用场景。以下是对这两种查找方法的详细介绍。1.顺序查找定义:顺序查找(SequentialSearch),也称线性查找,是一种最简单、最直接的查找方法。它从数据集......
  • QOJ 1086 Bank Security Unification
    令题目给定的序列为\(a_{1\simn}\)。考虑到一个比较基础的DP是设\(f_i\)为以\(a_i\)结尾的序列的最大值。然后转移就是\(f_i=\max\{f_j+(a_i\&a_j)\}\)。考虑排除掉一些不优的状态。令\(a_j\)的最高位为\(x\),且\(k\)满足\(a_k\)最高位也为\(x\)且\(k......
  • Linux操作系统学习:day08
    内容来自:Linux介绍视频推荐:Linux基础入门教程-linux命令-vim-gcc/g++-动态库/静态库-makefile-gdb调试目录day0853、命令和编辑模式之间的切换54、命令模式到末行模式的切换与末行模式下的保存退出命令模式到末行模式的切换保存退出55、末行模式下的替换操作56、末......
  • 2008年 - 2021年 地级市-人口密度数据
    人口密度是一个关键的人口统计指标,它反映了在一定地理范围内的人口分布情况。这个指标对于理解一个国家或地区的空间人口分布、资源分配、社会经济发展和城市规划等方面都具有重要意义。人口密度的计算方法人口密度是通过将一个地区的常住人口数除以其面积来计算的,公式为:......
  • 在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
    在Linux系统中,将本地80端口的请求转发到8080端口,可以通过使用iptables命令来实现。当前主机IP为10.0.0.104,具体命令如下:iptables-tnat-APREROUTING-d10.0.0.104-ptcp--dport80-jDNAT--to-destination10.0.0.104:8080解析:iptables:iptables命令用于配置Linux内核......
  • 通过ESP32读取I2C温湿度传感器项目:协议与代码实例
    简介在本项目中,我们将使用ESP32开发板读取I2C温湿度传感器的数据。我们将详细介绍I2C协议,并提供图文并茂的代码实例,帮助你快速上手。项目流程选择硬件:ESP32开发板、I2C温湿度传感器(如DHT12、HTU21D、SHT30等)、连接线和面包板。了解I2C协议:I2C(Inter-IntegratedCircuit)是......
  • Leetcode 力扣 125. 验证回文串 (抖音号:708231408)
    如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。示例1:输入:s="Aman,aplan,......
  • Leetcode 力扣 128. 最长连续序列 (抖音号:708231408)
    给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nums=......
  • qt开发-08_layout 布局
    Qt提供了非常丰富的布局类,基本布局管理类包括:QBoxLayout、QGridLayout、QFormLayout和QStackedLayout。这些类都从QLayout继承而来,它们都来源于QObject(而不是QWidget)。创建更加复杂的布局,可以让它们彼此嵌套完成。其中QBoxLayout提供了水平和垂直的布局管理;QFormLa......