52单片机万年历把18b20换成dht11 程序怎么改?

这是原来的仿真图 把ds18b20换成dht11 喇叭换成蜂鸣器 万年历 可以显示温湿度 能设置闹铃
http://hi.baidu.com/hlngmtqkqxhmxze 这是原程序

sbit DQ1= P3^7 ; //车内探头
sbit DQ2= P1^1 ; //车外探头
sbit AC_CTRL = P2^2; //AC空调控制端。1为开启
/*------------------------------------------------
定义区
------------------------------------------------*/
xdata signed int Memory_buf2[5]={0,0,0,0,0};//xdata 前2分钟记忆值:车外湿度,车外温度,车内湿度,车内温度,电压
xdata signed int Memory_buf1[5]={0,0,0,0,0};//xdata 前1分钟记忆值:车外湿度,车外温度,车内湿度,车内温度,电压
unsigned int U16RH_data1,U16T_data1, U16RH_data2,U16T_data2,Voltage;
bit Minus_Flag1,Minus_Flag2,TIMEshow; //定义温度符号位 时间闪烁的:

/***************************************************************************

串行总线 收发信号检测,数据读取 车内探头
***************************************************************************/
unsigned char COM1(void)
{unsigned char i,U8temp,U8comdata,U8FLAG;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!DQ1)&&U8FLAG++);
delay40us();
U8temp=0;
if(DQ1)U8temp=1; //延时40us后 如果仍为高电平则数据为1 否则为0
U8FLAG=2;
while((DQ1)&&U8FLAG++);
if(U8FLAG==1)break;
U8comdata<<=1; U8comdata|=U8temp; //整合数据
}
return(U8comdata);
}

/*------------------------------------------------

读取温、湿度 车内探头
------------------------------------------------*/
void RH1(void)
{
unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8temp,U8FLAG;
unsigned char U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
DQ1=0; delay100us(5); //主机拉低总线 至少500us
DQ1=1; delay40us(); //总线由上拉电阻拉高 主机延时20us-40us
if(!DQ1) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
{
U8FLAG=2;
while((!DQ1)&&U8FLAG++); //判断从机是否发出 80us 的低电平响应信号是否结束
U8FLAG=2;
while((DQ1)&&U8FLAG++); //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
//数据接收状态
U8RH_data_H_temp=COM1(); //读湿度高8位
U8RH_data_L_temp=COM1(); //读湿度低8位
U8T_data_H_temp =COM1(); //读温度高8位
U8T_data_L_temp =COM1(); //读温度低8位
U8checkdata_temp=COM1(); //读校验数据
DQ1=1; //释放总线
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); //数据校验
if(U8temp==U8checkdata_temp) //如果数据读取无误
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H = U8T_data_H_temp;
U8T_data_L = U8T_data_L_temp;
if(U8T_data_H&0x80) //如果温度高8位首位为1 则为负温度
{Minus_Flag1=1;U8T_data_H = U8T_data_H-0x80;}
else
{Minus_Flag1=0;U8T_data_H = U8T_data_H;}
U16RH_data1=(U8RH_data_H*256)|U8RH_data_L;

U16T_data1 = (U8T_data_H*256)|U8T_data_L;
}
}

}
}

这是我正在用的程序的一部分,用的是1T的单片机,给你参考一下吧。晶体是12M的,别的地方你基本可以不改,主要注意好延时的时间一定要参照备注追问

我能说不懂么 毕竟我才刚开始学单片机

追答

可以 我也是这时候过来的,你看过DHT11的说明文档吗?编程的依据是他,必须遵从。给你2个文档参照学习一下 要仔细看

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-02
proteus的是sht11吧?dht11和他不一样的,dht11是单总线的追问

把ds18b20换成dht11

追答

proteus里面没有dht11,只有sht11

追问

我知道

第2个回答  2014-06-03
ds18b20不是万年历模块,他仅仅是温度模块。1302才是万年历模块追问

你用电脑看的话我有电路图和程序的 1302万年历 加温度显示 但是现在没有18b20 只有dft11

相似回答