水温检测
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
delay1(4);//延时一段时间
}
return (temp);//程序结束后,将暂存变量返回调用程序
}
/************************************************
按键设置上线温度和下限温度值函数
*************************************************/
write_com(0x0f);//设置为显示开,开光标,闪烁
}
if(num==2)//如果按下选择键的次数为2
{
write_com(0x80+0x00+13);//光标移到第一行第十五个位置
}
if(num==3)//如果按下选择键的次数为3
{
num=0;//次数清零
write_com(0x0c);//设置为显示开,关光标,不闪烁
温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字
应用包括温度控制、工业系统、消费品、温度计和任何热感测系统
负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作
2)
GND:地
DQ:单线运用的数据输入/输出引脚
VD:可选的电源引脚
3)
3.
采用LCD液晶显示屏显示测得的温度值,其电路原理图如下
DQ=1;//使总线为高电平
delay1(14);//延时,等待DS18B20回应低电平
x=DQ;//将DS18B20的回应读到变量x,用于判断复位是否成功
delay1(20);//延时一段时间结束
}
void writecmd(ucharcmd)//DS18B20的写字节函数
{
uchar i=0;//定义位循环变量
{
uchar i=0;//定义位循环变量
uchar temp=0;//定义暂存变量
for(i=8;i>0;i--)//循环8次
{
DQ=0;//总线为低电平
temp>>=1;//暂存变量右移
DQ=1;//总线拉高,执行如下的读操作
if(DQ)//如果DS18B20输出高电平
temp|=0x80;//将暂存变量的最高位置1
sbit up=P3^4;//位定义极限加
sbit down=P3^5;//位定义极限减
intth=30,tl=2,thh=0,tll=0;//初始上限值和下限值
uchari,num = 0;//定义变量
/************************************************
}
//以下是温度的上限和下限初始化显示
write_com(0x80+0x00+4); //从LCD第一行第五个位置起显示
write_data('+');
write_data(th/10+0x30);//0x30表示0,显示上限十位
write_data(th%10+0x30);//显示上限个位
write_com(0x80+0x00+12);//从LCD第一行第十三个位置起显示
3.
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如上图
4.
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图
七、
八、
九、
#include<reg52.h>
}
if(th<0)
{
thh--;
write_com(0x80+0x00+4);
write_data('-');//显示负号
write_com(0x80+0x00+5);
write_data(thh/10+0x30);//显示上限温度值的十位
write_data(thh%10+0x30);//显示上限温度值的个位
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
五、
1.
1)
2)
2.
1)
独特的单线接口仅需一个端口引脚进行通信
简单的多点分布应用
无需外部器件
可通过数据线供电
零待机功耗
测温范围-55~+125℃,以0.5℃递增
可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃
uchar code tab2[]="TL:";
void write_com(uchar com) //LCD写地址函数
{
rs=0;
rw=0;
E=1;
LCD=com;
delay(5);
E=0;
}
void write_data(uchardat)//LCD写数据函数
{
rs=1;
rw=0;
E=1;
LCD=dat;
中原工学院机电学院
水温检测系统的设计
( 2015 - 2016 学年第 二 学期)
专 业:机械电子工程
题 目:水温检测系统的设计
姓 名:吕志伟
班 级:机电132班
学 号:201300384206
指导教师:崔陆军
完成日期:2016年5月20日
机械电子工程教研室
一、
水温检测系统的设计
二、
温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要意义。在单片机的应用中,一个很重要的应用就是对温度进行检测。测量温度的关键是温度传感器,采用智能温度传感器以实现温度数字化,既能以数字形式直接输出被测温度值,具有测量误差小,分辨力高,抗干扰能力强,能够远程传输数据,带串行总线接口等优点。温度的数字输出显示LCD液晶显示器上。单片机、温度传感器DS18B20与LCD液晶显示器等电子元器件的互联,可以研制和开发出具有高性价比的新一代测温系统——基于单片机STC89C52RC的数字温度计。 基于单片机的数字温度计设计,即对温度进行实时测量,使用单线数字温度传感器DS18B20把温度信号直接转换成数字信号输入单片机。经单片机处理后,将实时温度显示LCD液晶显示器上。
LCD设置定义
**************************************wenku.baidu.com**********/
sbitrs=P3^0;
sbitrw=P3^1;
sbit E=P3^2;
uchar tmp5[]="temp:";
uchar tmp6[]="^C";
uchar code tab1[]="TH:";
for(i=8;i>0;i--)//循环8次
{
DQ=0;//总线拉低
DQ=cmd&0x01;//将发送字节的最低位送到总线
delay1(5);//延时(30us),等待DS18B20取走总线数据
DQ=1;//总线拉高
cmd>>=1;//将待发送的字节右移后,继续发送
}
}
ucharreaddat()//DS18B20的读字节函数
void key()
{
if(xuanze==0)//如果选择键按下
{delay(10);//延时消抖
if(xuanze==0)//如果按键还处于按下状态
{
num++;//次数加1
while(!xuanze);//等待按键抬起
if(num==1)//如果按下选择键的次数为1
{
TR0=0;//关闭中断
write_com(0x80+0x00+5);//光标移到第一行第七个位置
4.
温度在设定范围内时,绿色发光二极管常亮,但当温度超过设定温度值时,绿色发光二极管熄灭,红色发光二极管闪烁,实现报警功能。它由单片机P2^0口控制红灯,P2^1口控制绿灯。其原理图如下:
5.
三个键分别连接单片机P3^3、P3^4、P3^5构成独立式键盘,分别实现上下限温度设定功能键、加键、减键。
6.
延时函数
*************************************************/
void delay(uint z)
{
uintx,y;
for (x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************************************************
}
write_com(0x80+0x40+0x00);//LCD第二行开始显示“Temp:"
for(i=0;i<5;i++)
{
write_data(tmp5[i]);
}
write_com(0x80+0x40+10);//显示温度的单位
for(i=0;i<2;i++)
{
write_data(tmp6[i]);
delay(5);
E=0;
}
void init_lcd()//LCD初始化函数
{
write_com(0x38);//16*2显示,5*7点阵,8位数据
write_com(0x0c); //设置为显示开,不闪烁
write_com(0x06); //写操作后,AC自动加1
write_com(0x01);//LCD清屏
if(th>=0)//如果上限值为正
{
thh=0; //计数清零
write_com(0x80+0x00+4);
write_data('+');//显示正号
write_com(0x80+0x00+5);
write_data(th/10+0x30);//显示上限温度值的十位
write_data(th%10+0x30);//显示上限温度值的个位
write_data('+');
write_data(tl/10+0x30);
write_data(tl%10+0x30);
}
/************************************************
DS18B20设置
*************************************************/
}
}
if(num==2)//如果选择键按了两次
#include<intrins.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define LCD P1
sbit LED1=P2^0; //位定义报警显示
sbit LED2=P2^1;
sbitxuanze=P3^3;//位定义选择按键
采用按键复位的方式实现,其原理图如下:
一、
二、
三、
四、
五、
一、
二、
三、
四、
五、
六、
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,温度上下限按键设置子程序,超限报警子程序等。
1.
2.
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如下
bit sflag;//定义温度的正负标志位
void delay1(uint i)//短延时函数
{while(i--);}
void reset()//DS18B20的复位函数
{
uchar x=0;
DQ=1;//使总线为高电平
delay1(8);//延时
DQ=0;//使总线为低电平
delay1(80);//延时,大于480us
uchartimecount; //定义中断次数
uchar test0,test1,test;//温度值变量
uchar a1,a2,a3;//温度整数部分的十位,个位和小数部分的十分位
ucharreaddate[2];//定义数组,用来暂存读取的温度值
sbit DQ=P3^7;//DS18B20数据口
write_com(0x80+0x01);//LCD第一行第二个位置起显示“TH:”
for(i=0;i<3;i++)
{
write_data(tab1[i]);
}
write_com(0x80+9);//LCD第一行第十个位置起显示"TL:"
for(i=0;i<3;i++)
{
write_data(tab2[i]);
三、
1.
2.
3.
4.
四、
1.
由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的电压或电流采样,进行A/D转换后就可以用单片机进行数据处理,实现温度显示。这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比较困难。
2.
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
TR0=1;//开中断
}
}
}
if(num!=0)//在选择键按下时
{
if(up==0)//如果极限加按键按下
{
delay(10);//延时消抖
if(up==0)//如果极限加按键仍处于按下状态
{
while(!up);//等待按键抬起
if(num==1)//如果选择键按了一次
{
th++;//上线值加1
}
return (temp);//程序结束后,将暂存变量返回调用程序
}
/************************************************
按键设置上线温度和下限温度值函数
*************************************************/
write_com(0x0f);//设置为显示开,开光标,闪烁
}
if(num==2)//如果按下选择键的次数为2
{
write_com(0x80+0x00+13);//光标移到第一行第十五个位置
}
if(num==3)//如果按下选择键的次数为3
{
num=0;//次数清零
write_com(0x0c);//设置为显示开,关光标,不闪烁
温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字
应用包括温度控制、工业系统、消费品、温度计和任何热感测系统
负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作
2)
GND:地
DQ:单线运用的数据输入/输出引脚
VD:可选的电源引脚
3)
3.
采用LCD液晶显示屏显示测得的温度值,其电路原理图如下
DQ=1;//使总线为高电平
delay1(14);//延时,等待DS18B20回应低电平
x=DQ;//将DS18B20的回应读到变量x,用于判断复位是否成功
delay1(20);//延时一段时间结束
}
void writecmd(ucharcmd)//DS18B20的写字节函数
{
uchar i=0;//定义位循环变量
{
uchar i=0;//定义位循环变量
uchar temp=0;//定义暂存变量
for(i=8;i>0;i--)//循环8次
{
DQ=0;//总线为低电平
temp>>=1;//暂存变量右移
DQ=1;//总线拉高,执行如下的读操作
if(DQ)//如果DS18B20输出高电平
temp|=0x80;//将暂存变量的最高位置1
sbit up=P3^4;//位定义极限加
sbit down=P3^5;//位定义极限减
intth=30,tl=2,thh=0,tll=0;//初始上限值和下限值
uchari,num = 0;//定义变量
/************************************************
}
//以下是温度的上限和下限初始化显示
write_com(0x80+0x00+4); //从LCD第一行第五个位置起显示
write_data('+');
write_data(th/10+0x30);//0x30表示0,显示上限十位
write_data(th%10+0x30);//显示上限个位
write_com(0x80+0x00+12);//从LCD第一行第十三个位置起显示
3.
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如上图
4.
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图
七、
八、
九、
#include<reg52.h>
}
if(th<0)
{
thh--;
write_com(0x80+0x00+4);
write_data('-');//显示负号
write_com(0x80+0x00+5);
write_data(thh/10+0x30);//显示上限温度值的十位
write_data(thh%10+0x30);//显示上限温度值的个位
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
五、
1.
1)
2)
2.
1)
独特的单线接口仅需一个端口引脚进行通信
简单的多点分布应用
无需外部器件
可通过数据线供电
零待机功耗
测温范围-55~+125℃,以0.5℃递增
可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃
uchar code tab2[]="TL:";
void write_com(uchar com) //LCD写地址函数
{
rs=0;
rw=0;
E=1;
LCD=com;
delay(5);
E=0;
}
void write_data(uchardat)//LCD写数据函数
{
rs=1;
rw=0;
E=1;
LCD=dat;
中原工学院机电学院
水温检测系统的设计
( 2015 - 2016 学年第 二 学期)
专 业:机械电子工程
题 目:水温检测系统的设计
姓 名:吕志伟
班 级:机电132班
学 号:201300384206
指导教师:崔陆军
完成日期:2016年5月20日
机械电子工程教研室
一、
水温检测系统的设计
二、
温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要意义。在单片机的应用中,一个很重要的应用就是对温度进行检测。测量温度的关键是温度传感器,采用智能温度传感器以实现温度数字化,既能以数字形式直接输出被测温度值,具有测量误差小,分辨力高,抗干扰能力强,能够远程传输数据,带串行总线接口等优点。温度的数字输出显示LCD液晶显示器上。单片机、温度传感器DS18B20与LCD液晶显示器等电子元器件的互联,可以研制和开发出具有高性价比的新一代测温系统——基于单片机STC89C52RC的数字温度计。 基于单片机的数字温度计设计,即对温度进行实时测量,使用单线数字温度传感器DS18B20把温度信号直接转换成数字信号输入单片机。经单片机处理后,将实时温度显示LCD液晶显示器上。
LCD设置定义
**************************************wenku.baidu.com**********/
sbitrs=P3^0;
sbitrw=P3^1;
sbit E=P3^2;
uchar tmp5[]="temp:";
uchar tmp6[]="^C";
uchar code tab1[]="TH:";
for(i=8;i>0;i--)//循环8次
{
DQ=0;//总线拉低
DQ=cmd&0x01;//将发送字节的最低位送到总线
delay1(5);//延时(30us),等待DS18B20取走总线数据
DQ=1;//总线拉高
cmd>>=1;//将待发送的字节右移后,继续发送
}
}
ucharreaddat()//DS18B20的读字节函数
void key()
{
if(xuanze==0)//如果选择键按下
{delay(10);//延时消抖
if(xuanze==0)//如果按键还处于按下状态
{
num++;//次数加1
while(!xuanze);//等待按键抬起
if(num==1)//如果按下选择键的次数为1
{
TR0=0;//关闭中断
write_com(0x80+0x00+5);//光标移到第一行第七个位置
4.
温度在设定范围内时,绿色发光二极管常亮,但当温度超过设定温度值时,绿色发光二极管熄灭,红色发光二极管闪烁,实现报警功能。它由单片机P2^0口控制红灯,P2^1口控制绿灯。其原理图如下:
5.
三个键分别连接单片机P3^3、P3^4、P3^5构成独立式键盘,分别实现上下限温度设定功能键、加键、减键。
6.
延时函数
*************************************************/
void delay(uint z)
{
uintx,y;
for (x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************************************************
}
write_com(0x80+0x40+0x00);//LCD第二行开始显示“Temp:"
for(i=0;i<5;i++)
{
write_data(tmp5[i]);
}
write_com(0x80+0x40+10);//显示温度的单位
for(i=0;i<2;i++)
{
write_data(tmp6[i]);
delay(5);
E=0;
}
void init_lcd()//LCD初始化函数
{
write_com(0x38);//16*2显示,5*7点阵,8位数据
write_com(0x0c); //设置为显示开,不闪烁
write_com(0x06); //写操作后,AC自动加1
write_com(0x01);//LCD清屏
if(th>=0)//如果上限值为正
{
thh=0; //计数清零
write_com(0x80+0x00+4);
write_data('+');//显示正号
write_com(0x80+0x00+5);
write_data(th/10+0x30);//显示上限温度值的十位
write_data(th%10+0x30);//显示上限温度值的个位
write_data('+');
write_data(tl/10+0x30);
write_data(tl%10+0x30);
}
/************************************************
DS18B20设置
*************************************************/
}
}
if(num==2)//如果选择键按了两次
#include<intrins.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define LCD P1
sbit LED1=P2^0; //位定义报警显示
sbit LED2=P2^1;
sbitxuanze=P3^3;//位定义选择按键
采用按键复位的方式实现,其原理图如下:
一、
二、
三、
四、
五、
一、
二、
三、
四、
五、
六、
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,温度上下限按键设置子程序,超限报警子程序等。
1.
2.
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如下
bit sflag;//定义温度的正负标志位
void delay1(uint i)//短延时函数
{while(i--);}
void reset()//DS18B20的复位函数
{
uchar x=0;
DQ=1;//使总线为高电平
delay1(8);//延时
DQ=0;//使总线为低电平
delay1(80);//延时,大于480us
uchartimecount; //定义中断次数
uchar test0,test1,test;//温度值变量
uchar a1,a2,a3;//温度整数部分的十位,个位和小数部分的十分位
ucharreaddate[2];//定义数组,用来暂存读取的温度值
sbit DQ=P3^7;//DS18B20数据口
write_com(0x80+0x01);//LCD第一行第二个位置起显示“TH:”
for(i=0;i<3;i++)
{
write_data(tab1[i]);
}
write_com(0x80+9);//LCD第一行第十个位置起显示"TL:"
for(i=0;i<3;i++)
{
write_data(tab2[i]);
三、
1.
2.
3.
4.
四、
1.
由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的电压或电流采样,进行A/D转换后就可以用单片机进行数据处理,实现温度显示。这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比较困难。
2.
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
TR0=1;//开中断
}
}
}
if(num!=0)//在选择键按下时
{
if(up==0)//如果极限加按键按下
{
delay(10);//延时消抖
if(up==0)//如果极限加按键仍处于按下状态
{
while(!up);//等待按键抬起
if(num==1)//如果选择键按了一次
{
th++;//上线值加1