专业知识分享AM2302 温湿度传感器 C 程序(测试可以用)2017-8-13说明:DHT22 与 DHT11 程序基本相同,DHT11 起始信号拉低 18ms,DHT22 起始信号拉低是 SOOus,用户主机(MCU)发送一次起始信号(把数据总线 SDA 拉低至少 800ps)后,AM2302 从休眠模式转换到高速模式。待主机开始信号结束后,AM2302 发送响应信号,从数据总线 SDA 串行送出 40Bit 的数据,先发送字节的高位;发送的数据依次为湿度高位、湿度低位、温度高位、温度低位、校验位,发送数据结束触发一次信息采集,采集结束传感器自动转入休眠模式,直到下一次通信来临。注意事项:与 DHT11 相同,一次采集 8 个位数据,循环 4 次采集完成所有数据,40 位采集完成后,校验数据,如果数据正确,将高 8 位左移 8 位与低 8 位相或,再保存到一个 16 位变量中,就可以得到一个整数值。默认采集的数据是实际值的 10 倍,例如当前实际温度是 32.7 度,采集到的数据是 327,目的是为了编程时方便分离数据。(详细见后面说明书)0000001010001100000000010101111111101110~湿度数据鮫跖『湿度高 8 位十湿度低 8 位十温度高 8 位十温度低 8 位=的末 8 位=校验和如果需要处理零卞值,16 位的最高位为 1 表示负数,温度最人量程:-20〜80 度,分辨率:0.1 度。如果用数据码管显示且有中断,采集数据开始需要关中断,采集结束开中断,否则在采集数据过程中,中断会打断 DHT22 时序,造成采集数据不正确。每次采集间隔人于 1 秒,否则采集数据不准确。C 程序:为了方便程序阅读,其它器件的初始化及定义都删除掉了,以下代码纯 DHT22 代码,使用时直接调用 RH 函数即可。由于程序多次修改,可能有多余的变量,大家自己清理下。RH 函数调用后,以下四个变量会得相应的数据:R_HR_LT_HT_L湿度咼 8 位湿度低 8 位(包含小数)温度咼 8 位湿度低 8 位(包含小数)如果采集的数据是:00000010100011000000000101011111由上面四个变量是 16 位,采集数据是 8 位,分四次采完,8 位放在 16 位里面应该是这样:R_H=0000000000000010R_L=0000000010001100所以 R_H 左移 8 个位或上 R_L 才是我们要的数据。R_H=R_H&R_L以上采集数据湿度为 652,湿度为 351,再除以 10 就是实际温湿度值。专业知识分享^include^include无符号 8 位整型变量*/有符号 8 位整型变量无符号 16 位整型变量*/有符号 16...