求AT89S52单片机同时控制两个温度的程序 20
用18B20测温我可以买在一个AT89S52上同时显示及控制两路温度温度值可设定到设定温度报警...
用18B20测温 我可以买
在一个AT89S52上同时显示及控制两路温度 温度值可设定 到设定温度报警 展开
在一个AT89S52上同时显示及控制两路温度 温度值可设定 到设定温度报警 展开
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
怎么控制温度都没说,别人怎么帮你?
要学会搜索查资料,18B20测温程序满世界都是。
要学会搜索查资料,18B20测温程序满世界都是。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考下这段程序吧
include <at89x051.h>
#include <intrins.h>
//sbit DQ =P3^3;//定义通信端口
#define DQ P3_3
extern void delay(unsigned char);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char);
unsigned int ReadTemperature(void);
void disptemp(void);
unsigned int tmprom[10]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
//延时函数
//void delay(unsigned int i)
//{
//while(i--);
//}
/*
//初始化函数
////////////以下是8M和11。0592M晶体///////////////
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(80);//精确延时 大于 480us
DQ = 1;//拉高总线
delay(9);
x=DQ;//稍做延时后 如果x=0则初始化成功 x=1则初始化失败
while(x){;}
delay(80);
} */
/*
//读一个字节
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;// 给脉冲信号
dat>>=1;
//delay(1);
DQ = 1;// 给脉冲信号
if(DQ)
dat|=0x80;
delay(10);
}
return(dat);
}*/
/*
//写一个字节
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
delay(0);
DQ = dat&0x01;
delay(7);
DQ = 1;
dat>>=1;
}
}
*/////////////////////////////////////
////////////以下是6M晶体///////////////////
//初始化函数
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(30);//精确延时 大于 480us
DQ = 1;//拉高总线
delay(4);
/*_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); */
x=DQ;//稍做延时后 如果x=0则初始化成功 x=1则初始化失败
while(x){;}
delay(25);
}
//读一个字节
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;// 给脉冲信号
dat>>=1;
//delay(1);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
//_nop_();
//_nop_();
//_nop_();
DQ = 1;// 给脉冲信号
if(DQ)
dat|=0x80;
/*_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); */
delay(3);
}
return(dat);
}
//写一个字节
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
//delay(0);
DQ = dat&0x01;
/*_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();*/
delay(3);
DQ = 1;
_nop_();
dat>>=1;
}
}
//////////////////////////////////////////
//读取温度
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC);// 跳过读序号列号的操作
WriteOneChar(0x44);// 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
//tt=(a&0x0f)*0.0625;
//a>>=4;
t=b;
t<<=8;
t=t|a;
//tt=t*0.0625;//将温度的高位与低位合并
//t= tt*10+0.5;//对结果进行4舍5入
return(t);
}
void disptemp(void){
EA=0;
tmprom[0]=ReadTemperature();
EA=1;
}
//////////////////////////////////////////////////
void delay(unsigned char us){
while(us--);
}
//6M的晶体振荡器 delay(20)=262us
//12M........... delay(20)=131us
/////////////////////////////////////////////////////
include <at89x051.h>
#include <intrins.h>
//sbit DQ =P3^3;//定义通信端口
#define DQ P3_3
extern void delay(unsigned char);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char);
unsigned int ReadTemperature(void);
void disptemp(void);
unsigned int tmprom[10]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
//延时函数
//void delay(unsigned int i)
//{
//while(i--);
//}
/*
//初始化函数
////////////以下是8M和11。0592M晶体///////////////
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(80);//精确延时 大于 480us
DQ = 1;//拉高总线
delay(9);
x=DQ;//稍做延时后 如果x=0则初始化成功 x=1则初始化失败
while(x){;}
delay(80);
} */
/*
//读一个字节
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;// 给脉冲信号
dat>>=1;
//delay(1);
DQ = 1;// 给脉冲信号
if(DQ)
dat|=0x80;
delay(10);
}
return(dat);
}*/
/*
//写一个字节
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
delay(0);
DQ = dat&0x01;
delay(7);
DQ = 1;
dat>>=1;
}
}
*/////////////////////////////////////
////////////以下是6M晶体///////////////////
//初始化函数
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(30);//精确延时 大于 480us
DQ = 1;//拉高总线
delay(4);
/*_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); */
x=DQ;//稍做延时后 如果x=0则初始化成功 x=1则初始化失败
while(x){;}
delay(25);
}
//读一个字节
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;// 给脉冲信号
dat>>=1;
//delay(1);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
//_nop_();
//_nop_();
//_nop_();
DQ = 1;// 给脉冲信号
if(DQ)
dat|=0x80;
/*_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); */
delay(3);
}
return(dat);
}
//写一个字节
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
//delay(0);
DQ = dat&0x01;
/*_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();*/
delay(3);
DQ = 1;
_nop_();
dat>>=1;
}
}
//////////////////////////////////////////
//读取温度
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC);// 跳过读序号列号的操作
WriteOneChar(0x44);// 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
//tt=(a&0x0f)*0.0625;
//a>>=4;
t=b;
t<<=8;
t=t|a;
//tt=t*0.0625;//将温度的高位与低位合并
//t= tt*10+0.5;//对结果进行4舍5入
return(t);
}
void disptemp(void){
EA=0;
tmprom[0]=ReadTemperature();
EA=1;
}
//////////////////////////////////////////////////
void delay(unsigned char us){
while(us--);
}
//6M的晶体振荡器 delay(20)=262us
//12M........... delay(20)=131us
/////////////////////////////////////////////////////
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询