我使用原子哥的iic程序去操作一个温湿度原件可是连应答都没都 我把原件资料和代码贴出来 希望有大神帮我找出问题 我接的是4.7的上拉电阻 Vcc=3.3
[mw_shl_code=c,true]#include "dht11_iic.h"
#include"myiic.h"
#include "delay.h"
#include "sys.h"
u16 ws_rec[10];//存放接受到的温湿度
void dht_write(void)//向传感器发送指令
{
IIC_Start();
IIC_Send_Byte(0XB8); //发送写命令
delay_us(1500);
IIC_Stop();//产生一个停止条件
delay_ms(2);
IIC_Start();
IIC_Send_Byte(0XB8); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(0x03);//发送功能码
IIC_Wait_Ack();
IIC_Send_Byte(0x00);//发送起始地址
IIC_Wait_Ack();
IIC_Send_Byte(0x04);//读取寄存器个数
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(2);
}
void dht11_rec(void)//接受传感器数据
{
u8 i;
IIC_Start();
IIC_Send_Byte(0XB9); //进入接收模式
IIC_Wait_Ack();
delay_us(50);
for(i=0;i<8;i++) //接收从机发来的字节
ws_rec=IIC_Read_Byte(1);
IIC_Stop();//产生一个停止条件
}
unsigned short crc16(u16 *ptr, unsigned char len)
{
unsigned short crc=0xFFFF;
unsigned char i;
while(len--)
{
crc ^=*ptr++; for(i=0;i<8;i++)
{
if(crc & 0x01)
{
crc>>=1;
crc^=0xA001;
}
else { crc>>=1; }
}
}
return crc;
}
void data_deal(u8 *tem,u8 *huim)//获取温湿度
{
dht_write();
delay_ms(10);
dht11_rec();
ws_rec[8]=ws_rec[7]<<8+ws_rec[6];
// if (ws_rec[8]==crc16(ws_rec,6))
{
*huim=ws_rec[3];
*tem=ws_rec[5];
}
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>