温度传感器实训报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
if ((!KeyTF) && (IntNum3 == 0)) KeyTF = 1; //当键盘处于可用时,锁定
}
if (KeySETDown) //在2秒内按下了SET则计中断发生次数用于长按SET时计时用
IntNum = IntNum + 1;
if (IntNum > 55) //中断发生了55次时(大约1.2秒)75为1.5秒左右
2.电路的构成
该电路有电源、按键控制模块、信号处理、驱动模块、显示模块、检测。
3.电路原理图
4.电路仿真图
五、元件清单及功能介绍
名称
规格
编号
主要功能或作用
按钮
6X6X5
AN1、AN2、AN3
调节报警温度的值
电容
30P
C1、C2
单片机时钟振荡
电容
10UF
C3
单片机复位
电容
470UF
C4
电源滤波
电容
104
sbit PowTF = StateREG^3; //电源电源标识
sbit KeyTF = StateREG^4;//键盘是否允许
//sbit KeySETDowning = StateREG^5;//SET是否正在按下
static unsigned char bdata TLV _at_ 0x0029; //温度变量高低位
#define Key_UP P3_0 //上调温度
#define Key_DOWN P3_1 //下调温度
#define Key_SET P1_7 //设定键(温度设定,长按开电源)
#define RelayOutPort P3_5 //继电器输出
#define LEDPort P1 //LED控制口
static signed char TMSetV _at_ 0x0026; //温度设定值
static unsigned char KSDNum; //SET键连按时的采集次数
static unsigned char IntNum,IntNum2,IntNum3; //中断发生次数,IntNum用于SET长按检测,IntNum2用于设定状态时LED闪烁
}
else
SetTF = 1;
if (!KeySETDown) //没有第一次按下SET时,KeySETDown标识置1
KeySETDown = 1;
else
KSDNum = KSDNum + 1; //前一秒内有按过SET则开始计数
}
if (SetTF) //在SET状态下
{
if ((KeyV == 1) && (!KeyTF))
EA = 1;//允许CPU中断
ET0 = 1;//定时器0中断打开
TMOD = 0x1;//设定时器0为模式1,16位模式
TH0=0xB1;
TL0=0xDF;//设定时值为20000us(20ms)
TR0 = 1;//开始定时
while(1);
}
//定时器0中断外理中键扫描和显示
void KeyAndDis_Time0(void) interrupt 1 using 2
#define LEDOneC P3_2 //LED DS1控制(百位)
#define LEDTwoC P3_3 //LED DS2控制(十位)
#define LEDThreeC P3_4 //LED DS3控制(个位)
#define TMPortP3_7//DS1820 DataPort
unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}; //0-9的LED笔划,0xFF为空,0xF7为负号
TMSetV = TMSetV + 1; //上调温度
if ((KeyV == 2) && (!KeyTF))
TMSetV = TMSetV - 1; //下调温度
if (TMSetV <= -55) //限制温度上下限
TMSetV = -55;
if (TMSetV >= 125)
TMSetV = 125;
WriteDS1820();//写温度上限到DS18B20ROM
WriteDS1820();//写温度上限到DS18B20ROM
WriteDS1820();//写温度上限到DS18B20ROM
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
TMREDS1820();//温度上限值COPY回E2PRAM
Delay_4s(); //延时
LEDOneC = 1;
LEDTwoC = 1; //关显示
LEDThreeC = 1;
Delay_4s();
IntNum = 0;
IntNum2 = 0;
IntNum3 = 0;
}
KSDNum = 0;
}
}
KeyV = 0;
TempKeyV = 0; //清空变量准备下次键扫描
{
TH0=0xB1;
TL0=0xDF;//设定时值为20000us(20ms)
LEDPort = 0xFF;
if (!Key_UP)
KeyV = 1;
if (!Key_DOWN)
KeyV = 2;
if (!Key_SET)
KeyV = 3;
//KeySETDowning = 0; //清除
if (KeyV != 0) //有键按下
TMERDS1820(); //E2PRAM中温度上限值调入RAM
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
TMRDS1820();//读出温度指令
ReadDS1820(); //读出温度值和上限值
TMSetV = TMRomV; //拷贝保存在DS18B20ROM里的上限值到TMSetV
static unsigned char bdata THV _at_ 0x0028;
static signed char TMV; //转换后的温度值
static unsigned char KeyV,TempKeyV; //键值
static signed char TMRomV _at_ 0x0027; //高温限制
void ROMDS1820(void);
void TMVDS1820(void);
void TMRDS1820(void);
void TMWDS1820(void);
void TMREDS1820(void);
void TMERDS1820(void);
void ReadDS1820(void);
{
//KeySETDowning = 1; //表明SET正在按下
PowTF = 0; //电源标识开
if (!KeyTF)
if (SetTF)
{
SetTF = 0; //标识位标识退出设定
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
TMWDS1820();//写温度上限指令
{
Delay_10ms(); //延时防抖按下10ms再测
if (!Key_UP)
TempKeyV = 1;
if (!Key_DOWN)
TempKeyV = 2;
if (!Key_SET)
TempKeyV = 3;
if (KeyV == TempKeyV) //两次值相等为确定接下了键
{
if (KeyV == 3) //按下SET键,如在SET状态就退出,否则进入
摄氏温度符号显示
三位共阳数码管
0.56
LED2
温度值显示
发光二极管
3MM
LED3
报警发光指示兼Q1偏置
三极管
8550
Q1、Q2、Q3、Q4
Q1:报警时驱动继电器;Q2Q3Q4:数码管驱动
电阻
10K
R1
单片机复位
电阻
220和470
R7—R13和R14
数码管限流,其中R14=470
电阻
4.7K
R2、R3、R4、R6
if (!PowTF)
{
InitDS1820();//初始化
ROMDS1820();//跳过ROM
TMVDS1820(); //温度转换指令
Delay_510();
Delay_510(); //延时等待转换完成
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
TMRDS1820();//读出温度指令
void WriteDS1820(void);
void Delay_510(void);
void Delay_110(void);
void Delay_10ms(void);
void Delay_4s(void);
void V2ToV(void);
StateREG = 0; //初始化变量
SetTF = 1;
static unsigned char bdata StateREG;//可位寻址的状态寄存器
sbit DS1820ON = StateREG^0;//DS1820是否存在
sbit SetTF = StateREG^1; //是否是在温度设置状态
sbit KeySETDown = StateREG^2; //是否已按过SET键标识
static signed char LED_One,LED_Two,LED_Three; //LED的显示位LED_One为十位,LED_Two为个位
static unsigned char Sign; //负号标识
void main(void)
{
void InitDS1820(void); //定义函数
《温度传感器实训报告》
实
训
报
告
课程:信号检测与技术
专业:应用电子技术
班级:应电1131班
小组成员:欧阳主、王雅志、朱知荣、周玙旋、周合昱
指导老师:宋晓虹老师
2013年4月23日
一、实训目的
了解18b20温度传感器的基本原理与应用
二、实训过程
1、电路实现功能:
由电脑USB接口供电,也可外接6V—16V的直流电源。通过温度传感器18B20作为温度传感器件,测出改实际温度,再由芯片为DIP封装AT89C2051单片机进行数据处理,通过数码管显示温度值。
温度显示(和控制)的范围为:-55ºC到125ºC之间,精度为1ºC,也就是显示整数。如果你设定报警的温度为20ºC,则当环境温度达到21ºC时,报警发光二极管发光,同时继电器动作。如果你不需要对温度控制(报警),可以将报警温度值设置高些。如果控制的是某局部的温度,可将18B20用引线引出,但距离不宜过大,注意其引脚绝缘。
ReadDS1820(); //读出温度值
V2ToV(); //转换显示值
if (TMV > TMSetV) //根据采集到的温度值控制继电器
{
RelayOutPort = 0;
}
else
{
RelayOutPort = 1;
}
if (SetTF) IntNum2 = IntNum2 + 1; //用于闪烁计数
三极管基极和温度传感器偏置
电阻
2K
R5
三极管Q1基极偏置
二极管
1N4148
V1
续流,保护Q1
跳线
X1、X2
用元件引脚连
继电器
5V2A
JDQ
温度达到报警值时触点动作
PCB板
73MMX85MM
USB电源线
连接电脑USB口
6、程序:
/*-------------------------------
温度控制器V1.5
PowTF = 1;//关电源
THV = 0;
TLV = 0;
TMV = 0;
KeyV = 0;
TempKeyV = 0;
KSDNum = 0;
IntNum = 0;
IntNum2 = 0;
IntNum3 = 0;
LED_One = 0;
LED_Two= 0;
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
C5
电源滤波
单片机(20P座)
AT89C2051
IC1
CPU
温度传感器
DS18B20
IC2
温度传感器
稳压块
L7805
IC3
电路工作于+5V
接线座
3P5.0
J1
外电路控制接线座
接线座
2P5.0
J2
外接电源接线
USB电源插座
USB
J3
电脑供电插座
Байду номын сангаас晶体
12M
JZ
单片机时钟振荡
一位共阳数码管
0.56
LED1
显示为三个共阳极LED
温度传感器用单总线DS18B20
CPU为2051,四个按键,分别为UP,DOWN,SET
温度调节上限为125度,下限为-55度
只能用于单只18B20
-------------------------------*/
#include <AT89X051.H>
#include <intrins.h>
{
IntNum = 0;
KeySETDown = 0;
if (KSDNum == 55) //如一直长按了SET1.2秒左右
{
RelayOutPort = 1; //关闭继电器输出
PowTF = 1; //电源标识关
LEDOneC = 0;
LEDTwoC = 0;
LEDThreeC = 0;
LEDPort = 0xBF; //显示"--"
if ((!KeyTF) && (IntNum3 == 0)) KeyTF = 1; //当键盘处于可用时,锁定
}
if (KeySETDown) //在2秒内按下了SET则计中断发生次数用于长按SET时计时用
IntNum = IntNum + 1;
if (IntNum > 55) //中断发生了55次时(大约1.2秒)75为1.5秒左右
2.电路的构成
该电路有电源、按键控制模块、信号处理、驱动模块、显示模块、检测。
3.电路原理图
4.电路仿真图
五、元件清单及功能介绍
名称
规格
编号
主要功能或作用
按钮
6X6X5
AN1、AN2、AN3
调节报警温度的值
电容
30P
C1、C2
单片机时钟振荡
电容
10UF
C3
单片机复位
电容
470UF
C4
电源滤波
电容
104
sbit PowTF = StateREG^3; //电源电源标识
sbit KeyTF = StateREG^4;//键盘是否允许
//sbit KeySETDowning = StateREG^5;//SET是否正在按下
static unsigned char bdata TLV _at_ 0x0029; //温度变量高低位
#define Key_UP P3_0 //上调温度
#define Key_DOWN P3_1 //下调温度
#define Key_SET P1_7 //设定键(温度设定,长按开电源)
#define RelayOutPort P3_5 //继电器输出
#define LEDPort P1 //LED控制口
static signed char TMSetV _at_ 0x0026; //温度设定值
static unsigned char KSDNum; //SET键连按时的采集次数
static unsigned char IntNum,IntNum2,IntNum3; //中断发生次数,IntNum用于SET长按检测,IntNum2用于设定状态时LED闪烁
}
else
SetTF = 1;
if (!KeySETDown) //没有第一次按下SET时,KeySETDown标识置1
KeySETDown = 1;
else
KSDNum = KSDNum + 1; //前一秒内有按过SET则开始计数
}
if (SetTF) //在SET状态下
{
if ((KeyV == 1) && (!KeyTF))
EA = 1;//允许CPU中断
ET0 = 1;//定时器0中断打开
TMOD = 0x1;//设定时器0为模式1,16位模式
TH0=0xB1;
TL0=0xDF;//设定时值为20000us(20ms)
TR0 = 1;//开始定时
while(1);
}
//定时器0中断外理中键扫描和显示
void KeyAndDis_Time0(void) interrupt 1 using 2
#define LEDOneC P3_2 //LED DS1控制(百位)
#define LEDTwoC P3_3 //LED DS2控制(十位)
#define LEDThreeC P3_4 //LED DS3控制(个位)
#define TMPortP3_7//DS1820 DataPort
unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}; //0-9的LED笔划,0xFF为空,0xF7为负号
TMSetV = TMSetV + 1; //上调温度
if ((KeyV == 2) && (!KeyTF))
TMSetV = TMSetV - 1; //下调温度
if (TMSetV <= -55) //限制温度上下限
TMSetV = -55;
if (TMSetV >= 125)
TMSetV = 125;
WriteDS1820();//写温度上限到DS18B20ROM
WriteDS1820();//写温度上限到DS18B20ROM
WriteDS1820();//写温度上限到DS18B20ROM
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
TMREDS1820();//温度上限值COPY回E2PRAM
Delay_4s(); //延时
LEDOneC = 1;
LEDTwoC = 1; //关显示
LEDThreeC = 1;
Delay_4s();
IntNum = 0;
IntNum2 = 0;
IntNum3 = 0;
}
KSDNum = 0;
}
}
KeyV = 0;
TempKeyV = 0; //清空变量准备下次键扫描
{
TH0=0xB1;
TL0=0xDF;//设定时值为20000us(20ms)
LEDPort = 0xFF;
if (!Key_UP)
KeyV = 1;
if (!Key_DOWN)
KeyV = 2;
if (!Key_SET)
KeyV = 3;
//KeySETDowning = 0; //清除
if (KeyV != 0) //有键按下
TMERDS1820(); //E2PRAM中温度上限值调入RAM
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
TMRDS1820();//读出温度指令
ReadDS1820(); //读出温度值和上限值
TMSetV = TMRomV; //拷贝保存在DS18B20ROM里的上限值到TMSetV
static unsigned char bdata THV _at_ 0x0028;
static signed char TMV; //转换后的温度值
static unsigned char KeyV,TempKeyV; //键值
static signed char TMRomV _at_ 0x0027; //高温限制
void ROMDS1820(void);
void TMVDS1820(void);
void TMRDS1820(void);
void TMWDS1820(void);
void TMREDS1820(void);
void TMERDS1820(void);
void ReadDS1820(void);
{
//KeySETDowning = 1; //表明SET正在按下
PowTF = 0; //电源标识开
if (!KeyTF)
if (SetTF)
{
SetTF = 0; //标识位标识退出设定
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
TMWDS1820();//写温度上限指令
{
Delay_10ms(); //延时防抖按下10ms再测
if (!Key_UP)
TempKeyV = 1;
if (!Key_DOWN)
TempKeyV = 2;
if (!Key_SET)
TempKeyV = 3;
if (KeyV == TempKeyV) //两次值相等为确定接下了键
{
if (KeyV == 3) //按下SET键,如在SET状态就退出,否则进入
摄氏温度符号显示
三位共阳数码管
0.56
LED2
温度值显示
发光二极管
3MM
LED3
报警发光指示兼Q1偏置
三极管
8550
Q1、Q2、Q3、Q4
Q1:报警时驱动继电器;Q2Q3Q4:数码管驱动
电阻
10K
R1
单片机复位
电阻
220和470
R7—R13和R14
数码管限流,其中R14=470
电阻
4.7K
R2、R3、R4、R6
if (!PowTF)
{
InitDS1820();//初始化
ROMDS1820();//跳过ROM
TMVDS1820(); //温度转换指令
Delay_510();
Delay_510(); //延时等待转换完成
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
TMRDS1820();//读出温度指令
void WriteDS1820(void);
void Delay_510(void);
void Delay_110(void);
void Delay_10ms(void);
void Delay_4s(void);
void V2ToV(void);
StateREG = 0; //初始化变量
SetTF = 1;
static unsigned char bdata StateREG;//可位寻址的状态寄存器
sbit DS1820ON = StateREG^0;//DS1820是否存在
sbit SetTF = StateREG^1; //是否是在温度设置状态
sbit KeySETDown = StateREG^2; //是否已按过SET键标识
static signed char LED_One,LED_Two,LED_Three; //LED的显示位LED_One为十位,LED_Two为个位
static unsigned char Sign; //负号标识
void main(void)
{
void InitDS1820(void); //定义函数
《温度传感器实训报告》
实
训
报
告
课程:信号检测与技术
专业:应用电子技术
班级:应电1131班
小组成员:欧阳主、王雅志、朱知荣、周玙旋、周合昱
指导老师:宋晓虹老师
2013年4月23日
一、实训目的
了解18b20温度传感器的基本原理与应用
二、实训过程
1、电路实现功能:
由电脑USB接口供电,也可外接6V—16V的直流电源。通过温度传感器18B20作为温度传感器件,测出改实际温度,再由芯片为DIP封装AT89C2051单片机进行数据处理,通过数码管显示温度值。
温度显示(和控制)的范围为:-55ºC到125ºC之间,精度为1ºC,也就是显示整数。如果你设定报警的温度为20ºC,则当环境温度达到21ºC时,报警发光二极管发光,同时继电器动作。如果你不需要对温度控制(报警),可以将报警温度值设置高些。如果控制的是某局部的温度,可将18B20用引线引出,但距离不宜过大,注意其引脚绝缘。
ReadDS1820(); //读出温度值
V2ToV(); //转换显示值
if (TMV > TMSetV) //根据采集到的温度值控制继电器
{
RelayOutPort = 0;
}
else
{
RelayOutPort = 1;
}
if (SetTF) IntNum2 = IntNum2 + 1; //用于闪烁计数
三极管基极和温度传感器偏置
电阻
2K
R5
三极管Q1基极偏置
二极管
1N4148
V1
续流,保护Q1
跳线
X1、X2
用元件引脚连
继电器
5V2A
JDQ
温度达到报警值时触点动作
PCB板
73MMX85MM
USB电源线
连接电脑USB口
6、程序:
/*-------------------------------
温度控制器V1.5
PowTF = 1;//关电源
THV = 0;
TLV = 0;
TMV = 0;
KeyV = 0;
TempKeyV = 0;
KSDNum = 0;
IntNum = 0;
IntNum2 = 0;
IntNum3 = 0;
LED_One = 0;
LED_Two= 0;
InitDS1820(); //初始化
ROMDS1820();//跳过ROM
C5
电源滤波
单片机(20P座)
AT89C2051
IC1
CPU
温度传感器
DS18B20
IC2
温度传感器
稳压块
L7805
IC3
电路工作于+5V
接线座
3P5.0
J1
外电路控制接线座
接线座
2P5.0
J2
外接电源接线
USB电源插座
USB
J3
电脑供电插座
Байду номын сангаас晶体
12M
JZ
单片机时钟振荡
一位共阳数码管
0.56
LED1
显示为三个共阳极LED
温度传感器用单总线DS18B20
CPU为2051,四个按键,分别为UP,DOWN,SET
温度调节上限为125度,下限为-55度
只能用于单只18B20
-------------------------------*/
#include <AT89X051.H>
#include <intrins.h>
{
IntNum = 0;
KeySETDown = 0;
if (KSDNum == 55) //如一直长按了SET1.2秒左右
{
RelayOutPort = 1; //关闭继电器输出
PowTF = 1; //电源标识关
LEDOneC = 0;
LEDTwoC = 0;
LEDThreeC = 0;
LEDPort = 0xBF; //显示"--"