目录
温湿度通过串口上传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中进行分文件编程的基本步骤:
-
创建主文件:
- 首先,你需要一个主文件(通常是
.c
文件),它包含了main()
函数。 - 在这个主文件中,你可以包含(或称为“引用”)其他模块的头文件。
- 首先,你需要一个主文件(通常是
-
创建头文件(.h):
- 对于每个模块,创建一个头文件来声明该模块中定义的函数、变量和数据类型。
- 使用
#ifndef
、#define
和#endif
指令来防止头文件被多次包含(这通常被称为“包含守卫”或“头文件保护”)。 - 例如,如果你有一个名为
moduleA.c
的源文件,你可以创建一个名为moduleA.h
的头文件来声明它的函数。
-
编写源文件(.c):
- 对于每个模块,编写一个源文件来实现该模块的功能。
- 在源文件的开头,包含相应的头文件。
- 实现头文件中声明的函数和其他元素。
-
在主文件中包含头文件:
- 在主文件的开头,使用
#include
指令包含你需要的所有头文件。 - 这样,主文件就可以访问这些模块中声明的函数和变量了。
- 在主文件的开头,使用
-
在Keil中设置项目:
- 在Keil中创建一个新项目,并添加主文件和其他源文件。
- 确保Keil知道在哪里找到你的头文件(你可能需要将头文件所在的目录添加到Keil的包含路径中)。
-
编译和链接:
- 编译你的项目。Keil将分别编译每个源文件,并将它们链接成一个可执行文件。
- 如果一切正常,你应该能够生成一个可以在你的目标硬件上运行的可执行文件。
-
调试和测试:
- 使用Keil的调试功能来测试和验证你的代码。
- 确保每个模块都按预期工作,并且它们之间的交互也是正确的。
main:
在C语言中,extern
关键字用于声明一个变量或函数是在其他源文件中定义的,但在当前源文件中是可见的。这通常用于实现跨多个源文件的变量共享或函数调用。
当你看到extern char datas[5];
这样的声明时,它意味着:
- 有一个字符数组
datas
,其大小为5(即它可以存储5个字符,包括可能的字符串终止符\0
)。 - 这个数组
datas
是在当前源文件之外的其他地方定义的(可能是另一个源文件,或者是一个库文件等)。 - 当前源文件可以使用这个数组,但由于它只是在当前源文件中被声明,而不是定义,所以你不能在这里为它分配内存或初始化它。
为了使用datas
数组,你需要在某个源文件中实际定义它,例如:
然后,在其他需要访问datas
的源文件中,你可以使用extern
关键字来声明它:
delay:
uart:
dht:
lcd1602:
标签:DH11,头文件,Keil,温湿度,08,源文件,0x30,ASCII,datas From: https://blog.csdn.net/2301_76378962/article/details/140093012