硬件:STC89C52开发板、1602数显、DHT温湿度传感器(利用其I2C数据线)
软件:Keil v4 C语言编译平台,stc-ipc-15xx-v6.85烧录程序
对DHT温度数据的解析有点问题,室温25度左右,温度的高、低位的最高位均为1,这与硬件说明文档不符,我就都屏蔽掉了最高位,得出的温度数据还比较靠谱,也不知怎么回事,各位读者如果知道的话不吝赐教!!!
DHT12的SDA、SCL分别接P2.0、P2.1,连接好电源、接地后采集结果如下图:
串口传出的数据分别通过P3.0 、P3.1传送给arm开发板
数据格式是每个数据前后各加一个空格,如:“空格78.5空格空格25.6空格……”,51单片机开发板的miniUSB是一个串口转USB的设备,通过它插入PC,就可以在PC端查看串口传出来的数据了,PC上通过串口助手看到单片机输出的结果,如下图:
代码:包括了利用I2C时序采集DHT的温湿度数据、1602显示采集到数据、利用串口中断将数据发送出去三大部分
#include <reg52.h> #include <intrins.h> #define AddWr 0xb8 //自己买的温湿度传感器DHT12器件地址 sbit sda=P2^0; sbit scl=P2^1; sbit rw = P1^1; sbit RS = P1^0; sbit LCDEN = P2^5; unsigned char bai,shi,ge; unsigned char table1[]="wendu:"; unsigned char table2[]="shidu:"; unsigned char table3[]="0123456789"; unsigned char table4[]="CRC Error !!!"; unsigned char table5[]="Sensor Error !!"; int Temprature,Humi; void delayUs() { _nop_(); } void delayMs(unsigned int a) { unsigned int i, j; for(i = a; i > 0; i--) for(j = 100; j > 0; j--); } void delay(unsigned char dat) { unsigned char i; for(i=dat;i>0;i--)_nop_(); } /******************************************************************* 总线初始化 函数原型: void I2c_Init(); 功能: 启动I2C总线,即发送I2C起始条件.