温度传感器实训报告Word格式.docx
《温度传感器实训报告Word格式.docx》由会员分享,可在线阅读,更多相关《温度传感器实训报告Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
C,也就是显示整数。
如果你设定报警的温度为20º
C,则当环境温度达到21º
C时,报警发光二极管发光,同时继电器动作。
如果你不需要对温度控制(报警),可以将报警温度值设置高些。
如果控制的是某局部的温度,可将18B20用引线引出,但距离不宜过大,注意其引脚绝缘。
2.电路的构成
该电路有电源、按键控制模块、信号处理、驱动模块、显示模块、检测。
3.电路原理图
4.电路仿真图
五、元件清单及功能介绍
名称
规格
编号
主要功能或作用
按钮
6X6X5
AN1、AN2、AN3
调节报警温度的值
电容
30P
C1、C2
单片机时钟振荡
10UF
C3
单片机复位
470UF
C4
电源滤波
104
C5
单片机(20P座)
AT89C2051
IC1
CPU
温度传感器
DS18B20
IC2
稳压块
L7805
IC3
电路工作于+5V
接线座
3P5.0
J1
外电路控制接线座
2P5.0
J2
外接电源接线
USB电源插座
USB
J3
电脑供电插座
晶体
12M
JZ
一位共阳数码管
0.56
LED1
摄氏温度符号显示
三位共阳数码管
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
三极管基极和温度传感器偏置
2K
R5
三极管Q1基极偏置
二极管
1N4148
V1
续流,保护Q1
跳线
X1、X2
用元件引脚连
继电器
5V2A
JDQ
温度达到报警值时触点动作
PCB板
73MMX85MM
USB电源线
连接电脑USB口
6、程序:
/*-------------------------------
温度控制器V1.5
显示为三个共阳极LED
温度传感器用单总线DS18B20
CPU为2051,四个按键,分别为UP,DOWN,SET
温度调节上限为125度,下限为-55度
只能用于单只18B20
-------------------------------*/
#include<
AT89X051.H>
intrins.h>
#defineKey_UPP3_0//上调温度
#defineKey_DOWNP3_1//下调温度
#defineKey_SETP1_7//设定键(温度设定,长按开电源)
#defineRelayOutPortP3_5//继电器输出
#defineLEDPortP1//LED控制口
#defineLEDOneCP3_2//LEDDS1控制(百位)
#defineLEDTwoCP3_3//LEDDS2控制(十位)
#defineLEDThreeCP3_4//LEDDS3控制(个位)
#defineTMPortP3_7//DS1820DataPort
unsignedcharcodeLEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};
//0-9的LED笔划,0xFF为空,0xF7为负号
staticunsignedcharbdataStateREG;
//可位寻址的状态寄存器
sbitDS1820ON=StateREG^0;
//DS1820是否存在
sbitSetTF=StateREG^1;
//是否是在温度设置状态
sbitKeySETDown=StateREG^2;
//是否已按过SET键标识
sbitPowTF=StateREG^3;
//电源电源标识
sbitKeyTF=StateREG^4;
//键盘是否允许
//sbitKeySETDowning=StateREG^5;
//SET是否正在按下
staticunsignedcharbdataTLV_at_0x0029;
//温度变量高低位
staticunsignedcharbdataTHV_at_0x0028;
staticsignedcharTMV;
//转换后的温度值
staticunsignedcharKeyV,TempKeyV;
//键值
staticsignedcharTMRomV_at_0x0027;
//高温限制
staticsignedcharTMSetV_at_0x0026;
//温度设定值
staticunsignedcharKSDNum;
//SET键连按时的采集次数
staticunsignedcharIntNum,IntNum2,IntNum3;
//中断发生次数,IntNum用于SET长按检测,IntNum2用于设定状态时LED闪烁
staticsignedcharLED_One,LED_Two,LED_Three;
//LED的显示位LED_One为十位,LED_Two为个位
staticunsignedcharSign;
//负号标识
voidmain(void)
{
voidInitDS1820(void);
//定义函数
voidROMDS1820(void);
voidTMVDS1820(void);
voidTMRDS1820(void);
voidTMWDS1820(void);
voidTMREDS1820(void);
voidTMERDS1820(void);
voidReadDS1820(void);
voidWriteDS1820(void);
voidDelay_510(void);
voidDelay_110(void);
voidDelay_10ms(void);
voidDelay_4s(void);
voidV2ToV(void);
StateREG=0;
//初始化变量
SetTF=1;
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
TMERDS1820();
//E2PRAM中温度上限值调入RAM
TMRDS1820();
//读出温度指令
ReadDS1820();
//读出温度值和上限值
TMSetV=TMRomV;
//拷贝保存在DS18B20ROM里的上限值到TMSetV
EA=1;
//允许CPU中断
ET0=1;
//定时器0中断打开
TMOD=0x1;
//设定时器0为模式1,16位模式
TH0=0xB1;
TL0=0xDF;
//设定时值为20000us(20ms)
TR0=1;
//开始定时
while
(1);
}
//定时器0中断外理中键扫描和显示
voidKeyAndDis_Time0(void)interrupt1using2
LEDPort=0xFF;
if(!
Key_UP)
KeyV=1;
Key_DOWN)
KeyV=2;
Key_SET)
KeyV=3;
//KeySETDowning=0;
//清除
if(KeyV!
=0)//有键按下
{
Delay_10ms();
//延时防抖按下10ms再测
TempKeyV=1;
TempKeyV=2;
TempKeyV=3;
if(KeyV==TempKeyV)//两次值相等为确定接下了键
if(KeyV==3)//按下SET键,如在SET状态就退出,否则进入
//KeySETDowning=1;
//表明SET正在按下
PowTF=0;
//电源标识开
if(!
KeyTF)
if(SetTF)
{
SetTF=0;
//标识位标识退出设定
InitDS1820();
ROMDS1820();
TMWDS1820();
//写温度上限指令
WriteDS1820();
//写温度上限到DS18B20ROM
TMREDS1820();
//温度上限值COPY回E2PRAM
}
else
SetTF=1;
KeySETDown)//没有第一次按下SET时,KeySETDown标识置1
KeySETDown=1;
else
KSDNum=KSDNum+1;
//前一秒内有按过SET则开始计数
}
if(SetTF)//在SET状态下
if((KeyV==1)&
&
(!
KeyTF))
TMSetV=TMSetV+1;
//上调温度
if((KeyV==2)&
TMSetV=TMSetV-