求单片机控制水温的C程序

单片机是89C52 温度传感器DS18B20 继电器控制温度开关 q1136426671

//18B20单线温度检测的应用样例程序
#include<REG52.H>
#include<math.h>
#include<INTRINS.H>

#define uchar unsigned char
#define uint unsigned int;
/*****************************************************************************/
//sbit seg1=P1^0;
//sbit seg2=P1^1;
//sbit seg3=P1^2;

sbit key = P1^3; // 继电器开关 1 打开 0 关断
sbit DQ=P2^7;//ds18b20 端口
sfr dataled=0x80;//显示数据端口
/**********************************************************************/
uchar temp;
uchar flag_get,count,num,minute,second;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段数码管段码表共阴
uchar a,b;
/***********************************************************************/
void delay1(uchar MS);
unsigned char ReadTemperature(void);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void delay(unsigned int i);
/************************************************************************/
main()
{

TMOD|=0x01;//定时器设置
TH0=0xef;
TL0=0xf0;
IE=0x82;
TR0=1;//启动定时器
P1=0x00;

count=0;

while(1)
{
// str[2]=0x39;//显示C符号
a=tab[temp/10]; //十位温度
b=tab[temp%10]; //个位温度
if(flag_get==1) //定时读取当前温度
{
temp=ReadTemperature()-1; //temp是当前温度 通过这个温度与你设定温度比较
if(temp==你设定的值)
key=0; //关掉继电器停止加热
key=1; //否则继续加热
flag_get=0;
}
}
}

void tim(void) interrupt 1 using 1//中断,用于数码管扫描和温度检测间隔
{
TH0=0xef;//定时器重装值
TL0=0xf0;
num++;
if (num==50)
{num=0;
flag_get=1;//标志位有效
second++;
if(second>=60)
{second=0;
minute++;
}
}
count++;
if(count==1)
{P1=0xfe;
dataled=a;}//数码管扫描
if(count==2)
{P1=0xfd;
dataled=b;count=0;}
/*if(count==3)
{ P1=2;
dataled=str[2];
count=0;}*/
}
/*************************************************************************************/
void delay(unsigned int i)//延时函数
{
while(i--);
}
/***************************************************************************************/
//18b20初始化函数
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
delay(10);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(5);
}

//读一个字节
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}

//写一个字节
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
delay(5);
}

//读取温度
unsigned char ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned char t=0;
//float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
delay(200);
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar();
b=ReadOneChar();

b<<=4;
b+=(a&0xf0)>>4;
t=b;
//tt=t*0.0625;
//t= tt*10+0.5; //放大10倍输出并四舍五入
return(t);
}

这是一个带数码管显示的程序这样可以更直观的看到现在温度是多少,不要可以不连接外围电路。追问

你原来的程序可以给我吗?

温馨提示:内容为网友见解,仅供参考
无其他回答

求单片机控制水温的C程序
{ \/\/ str[2]=0x39;\/\/显示C符号 a=tab[temp\/10]; \/\/十位温度 b=tab[temp%10]; \/\/个位温度 if(flag_get==1) \/\/定时读取当前温度 { temp=ReadTemperature()-1; \/\/temp是当前温度 通过这个温度与你设定温度比较 if(temp==你设定的值)key=0; \/\/关掉继电器停止加热 key=1...

编写单片机控制热水器的程序
1、硬件上,小的单片机系统,有显示(看水温和设置参数),有按键(设置参数),有温度传感器(测量水温,建议18B20),有继电器(控制热水器电源),有电磁阀(上水),水位传感器(测量水位),蜂鸣器(报警)。2、软件上,我就不画框图了,行信你看得懂。a、初始化,转b。b、判断水位,缺水转c,...

基于单片机的热水器温度控制系统
因此,智能化温度控制技术正被广泛地应用。本温度设计采用现在流行的AT89C51单片机为控制器,用PID控制方法,再配以其他电路对热水器的水温进行控制。关键词:89C51; PID; 温度控制 I 1\/41页 东华理工大学毕业设计(论文)ABSTRACT Temperature is essential physical in daily life ,and in various fields h...

单片机—JB\/JNB指令练习
深入探索单片机的智能控制,让我们通过几个实际案例来理解 JB\/JNB指令 的巧妙应用。首先,我们来看一个温度监控系统,通过P1.0位来判断水温是否高于80°C:LOOP:清零P2.0输出,当水温超过80°C时(P1.0=1),通过JNB指令判断,如果条件不满足,即P1.0为低电平(0),则执行SETB P2.0,控制水闸...

单片机—JB\/JNB指令练习
单片机的JB\/JNB指令在实际应用中发挥着重要作用。首先,我们通过P1.0位监测水温,一旦达到80°C,P1.0变为1,利用JNB指令判断并控制P2.0输出1,打开水闸以降低水温,实现自动调节。接着,模拟开关灯功能中,P3.0连接开关K1,L1的亮度由P1.0控制。当K1断开(P3.0=1)时,L1熄灭(P1.0=1)...

水温控制电路图求解。
这个电路只是整个加热系统的一部分,加热部分和5V、12V电源等部分这里还真没有画出来,应该是用RL1继电器的另外一个常开触点控制加热器,而且一般用AC220V加热,刚好也就跟这个直流12V系统隔离了,这里U3是数字式温度传感器,可以输出温度值得数字信号直接跟单片机的IO口连接,从图中上看未见水位开关等。原理...

基于51单片机和热敏电阻的温度控制系统
MAIN4: ACALL NTTR ;调查表子程序 AJMP MAIN0;查表求温度值子程序NTTR: MOV R2,#00H ;清计数与温度对照表偏移量寄存器R2 MOV DPTR,NTTAB ;DPTR指向计数与温度对照表首址NTTR1: CLR C ;20H、21H中的内容与NTTRB相减,并将差值存23H、24H MOV R3,#02H MOV R0,#20H MOV R1,#23HNTTR2: MOV A,R2...

如何用单片机快速加热温度
单片机作为一种控制器,能够通过不同的方式控制加热元件,使得温度快速上升。其中,一种常用的方法是使用PWM(脉宽调制)控制。PWM控制通过快速调整加热元件的功率输出,可以实现温度的快速升高。例如,当我们需要快速加热一杯水时,单片机可以通过PWM控制电水壶的加热元件,使其全功率工作,从而加速水的加热。

谁帮我设计一个仪器:能测出水温并且能通过语音报告出来。
采用凌阳单片机或其他单片机设计一个电子温度计,要求能够进行语音播报温度。采用DS18B20或其他方法检测温度。最终完成硬件电路设计,完成程序编写,采用PROTEL设计PCB。以上是该任务的要求,欢迎大家积极参与威客任务-凌阳单片机语音播报温度表,大家还可以对该任务发表评论、评分,祝愿您能在该任务胜利中标!

...我想自己编程控制,可以四根线直接接51单片机的I\/O口吗?另外它的水位...
一个热敏电阻,测量水温;一个可变电阻,电阻值根据水位变化而变化。用万用表打一下就能找出来。至于你要怎么控制,那就把这两个电阻连接到你的电路中去。 后面的就不用我说了吧

相似回答
大家正在搜