52单片机万年历把18b20换成dht11 程序怎么改? 10
这是原来的仿真图把ds18b20换成dht11喇叭换成蜂鸣器万年历可以显示温湿度能设置闹铃http://hi.baidu.com/hlngmtqkqxhmxze这是原程序...
这是原来的仿真图 把ds18b20换成dht11 喇叭换成蜂鸣器 万年历 可以显示温湿度 能设置闹铃
http://hi.baidu.com/hlngmtqkqxhmxze 这是原程序 展开
http://hi.baidu.com/hlngmtqkqxhmxze 这是原程序 展开
3个回答
展开全部
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的,别的地方你基本可以不改,主要注意好延时的时间一定要参照备注
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个文档参照学习一下 要仔细看
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
proteus的是sht11吧?dht11和他不一样的,dht11是单总线的
更多追问追答
追问
把ds18b20换成dht11
追答
proteus里面没有dht11,只有sht11
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ds18b20不是万年历模块,他仅仅是温度模块。1302才是万年历模块
追问
你用电脑看的话我有电路图和程序的 1302万年历 加温度显示 但是现在没有18b20 只有dft11
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询