温度传感器实训报告.docx

上传人:b****3 文档编号:24810139 上传时间:2023-06-01 格式:DOCX 页数:45 大小:525.54KB
下载 相关 举报
温度传感器实训报告.docx_第1页
第1页 / 共45页
温度传感器实训报告.docx_第2页
第2页 / 共45页
温度传感器实训报告.docx_第3页
第3页 / 共45页
温度传感器实训报告.docx_第4页
第4页 / 共45页
温度传感器实训报告.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

温度传感器实训报告.docx

《温度传感器实训报告.docx》由会员分享,可在线阅读,更多相关《温度传感器实训报告.docx(45页珍藏版)》请在冰豆网上搜索。

温度传感器实训报告.docx

温度传感器实训报告

 

《温度传感器实训报告》

 

课程:

信号检测与技术

专业:

应用电子技术

班级:

应电 1131 班

小组成员:

欧阳主、王雅志、朱知荣、周玙旋、周合昱

指导老师:

宋晓虹老师

 

2013 年4月23日

 

一、实训目的

了解 18b20 温度传感器的基本原理与应用

2、实训过程

1、电路实现功能:

由电脑 USB 接口供电,也可外接 6V—16V 的直流电源。

通过温度传感器

18B20 作为温度传感器件,测出改实际温度,再由芯片为DIP封装

AT89C2051 单片机进行数据处理,通过数码管显示温度值。

温度显示(和控制)的范围为:

-55ºC 到 125ºC 之间,精度为 1ºC,也就是

显示整数。

如果你设定报警的温度为 20ºC,则当环境温度达到 21ºC 时,报警

发光二极管发光,同时继电器动作。

如果你不需要对温度控制(报警),可以

将报警温度值设置高些。

如果控制的是某局部的温度,可将 18B20 用引线引出,

但距离不宜过大,注意其引脚绝缘。

2.电路的构成

  该电路有电源、按键控制模块、信号处理、驱动模块、显示模块、检测。

3.电路原理图

AN1

vcc

J3

 

C1

AN2

AN3

C5

104

+ C4

470UF

1

2

3

4

USB

 

J1

30P    JZ

C2

30P

 

JDQ V1

 

1N4148

 

P1

P2

P3

10K

 

1

2

3

4

5

6

7

8

9

10

C3

10UF

IC1

RST

P3.0(RXD)

P3.1(TXD)

XTAL2

XTAL1

P3.2(INT0)

P3.3(INT1)

P3.4(T0)

P3.5(T1)

GND

AT89C2051

 

VCC 20

P1.7 19

P1.6 18

P1.5 17

P1.4 16

P1.3 15

P1.2 14

P1.1 13

P1.0 12

P3.7 11

VCC

 

R7

R8

R9

R10

R11

R12

R13

220*7

P3.7

 

D7

D6

D5

D4

D3

D2

D1

 

LED2

LED-3

8.8.8.

IC3

 

L7805

OUT 3

IN

 

8.

 

LED1

a 1

c

f

J2

2

1

Q1

8550

LED3    R5

2K

IC2

DS18B20

R14

470

Q2

Q3

Q4

VCC

R6

4.7K

P1

P2

R2

4.7K

R3

8550

8550

8550

P3

4.7K

R4

4.7K

VCC

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

摄氏温度符号显示

三位共阳数码管

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

三极管基极和温度传感器偏置

电阻

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 

#include 

#define Key_UPP3_0//上调温度

#define Key_DOWNP3_1//下调温度

#define Key_SETP1_7//设定键(温度设定,长按开电源)

#define RelayOutPortP3_5//继电器输出

#define LEDPortP1//LED 控制口

#define LEDOneCP3_2//LED DS1 控制(百位)

#define LEDTwoCP3_3//LED DS2 控制(十位)

#define LEDThreeCP3_4//LED DS3 控制(个位)

#define TMPortP3_7//DS1820 DataPort

unsignedcharcode

LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};//0-9 的 LED

笔划,0xFF 为空,0xF7 为负号

static unsigned char bdata StateREG; //可位寻址的状态寄存器

sbit DS1820ON = StateREG^0;//DS1820 是否存在

sbit SetTF = StateREG^1;//是否是在温度设置状态

sbit KeySETDown = StateREG^2;//是否已按过 SET 键标识

sbit PowTF = StateREG^3;//电源电源标识

sbit KeyTF = StateREG^4;//键盘是否允许

//sbit KeySETDowning = StateREG^5;//SET 是否正在按下

static unsigned char bdata TLV _at_ 0x0029;//温度变量高低位

static unsigned char bdata THV _at_ 0x0028;

static signed char TMV;//转换后的温度值

static unsigned char KeyV,TempKeyV;//键值

static signed char TMRomV _at_ 0x0027;//高温限制

static signed char TMSetV _at_ 0x0026;//温度设定值

static unsigned char KSDNum;//SET 键连按时的采集次数

static unsigned char IntNum,IntNum2,IntNum3;//中断发生次数,IntNum 用于 SET 长按检

测,IntNum2 用于设定状态时 LED 闪烁

static signed char LED_One,LED_Two,LED_Three;//LED 的显示位 LED_One 为十位,

LED_Two 为个位

static unsigned char Sign; //负号标识

void main(void)

{

void InitDS1820(void);//定义函数

void ROMDS1820(void);

void TMVDS1820(void);

void TMRDS1820(void);

void TMWDS1820(void);

void TMREDS1820(void);

void TMERDS1820(void);

void ReadDS1820(void);

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;

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

InitDS1820(); //初始化

ROMDS1820(); //跳过 ROM

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 中断外理中键扫描和显示

void KeyAndDis_Time0(void) interrupt 1 using 2

{

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)//有键按下

{

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 状态就退出,否则进入

{

//KeySETDowning = 1; //表明 SET 正在按下

PowTF = 0;//电源标识开

if (!

KeyTF)

if (SetTF)

{

SetTF = 0;//标识位标识退出设定

InitDS1820(); //初始化

ROMDS1820(); //跳过 ROM

TMWDS1820(); //写温度上限指令

WriteDS1820(); //写温度上限到 DS18B20ROM

WriteDS1820(); //写温度上限到 DS18B20ROM

WriteDS1820(); //写温度上限到 DS18B20ROM

InitDS1820(); //初始化

ROMDS1820(); //跳过 ROM

TMREDS1820();//温度上限值 COPY 回 E2PRAM

}

else

SetTF = 1;

if (!

KeySETDown) //没有第一次按下 SET 时,KeySETDown 标识置 1

KeySETDown = 1;

else

KSDNum = KSDNum + 1;//前一秒内有按过 SET 则开始计数

}

if (SetTF)//在 SET 状态下

{

if ((KeyV == 1) && (!

KeyTF))

TMSetV = TMSetV + 1;//上调温度

if ((KeyV == 2) && (!

KeyTF))

TMSetV = TMSetV - 1;//下调温度

if (TMSetV <= -55)//限制温度上下限

TMSetV = -55;

if (TMSetV >= 125)

TMSetV = 125;

}

if ((!

KeyTF) && (IntNum3 == 0)) KeyTF = 1; //当键盘处于可用时,锁定

}

if (KeySETDown)//在 2 秒内按下了 SET 则计中断发生次数用于长按 SET 时

计时用

IntNum = IntNum + 1;

if (IntNum > 55)//中断发生了 55 次时(大约 1.2 秒)75 为 1.5 秒左右

{

IntNum = 0;

KeySETDown = 0;

if (KSDNum == 55)//如一直长按了 SET1.2 秒左右

{

RelayOutPort = 1;//关闭继电器输出

PowTF = 1;//电源标识关

LEDOneC = 0;

LEDTwoC = 0;

LEDThreeC = 0;

LEDPort = 0xBF;//显示"--"

Delay_4s();//延时

LEDOneC = 1;

LEDTwoC = 1;//关显示

LEDThreeC = 1;

Delay_4s();

IntNum = 0;

IntNum2 = 0;

IntNum3 = 0;

}

KSDNum = 0;

}

}

KeyV = 0;

TempKeyV = 0;//清空变量准备下次键扫描

if (!

PowTF)

{

InitDS1820(); //初始化

ROMDS1820();//跳过 ROM

TMVDS1820();//温度转换指令

Delay_510();

Delay_510();//延时等待转换完成

InitDS1820(); //初始化

ROMDS1820();//跳过 ROM

TMRDS1820();//读出温度指令

ReadDS1820(); //读出温度值

V2ToV();//转换显示值

if (TMV > TMSetV)//根据采集到的温度值控制继电器

{

RelayOutPort = 0;

}

else

{

RelayOutPort = 1;

}

if (SetTF) IntNum2 = IntNum2 + 1; //用于闪烁计数

if (IntNum2 > 50 ) IntNum2 = 0;

if (KeyTF) IntNum3 = IntNum3 + 1; //用于防止按键连按

if (IntNum3 > 25)

{

IntNum3 = 0;

KeyTF = 0;

}

if ((SetTF) && (IntNum2 < 25)) goto InitEnd;//计数在后半段时显示

LEDPort = LED_One;

LEDOneC = 0;

Delay_510();

LEDOneC = 1;//显示百位数

LEDPort = LED_Two;

LEDTwoC = 0;

Delay_510();

LEDTwoC = 1;//显示十位数

LEDPort = LED_Three;

LEDThreeC = 0;

Delay_510();

LEDThreeC = 1;//显示个位数

}

InitEnd:

;

}

void V2ToV(void)//数值转换

{

TLV = TLV >> 4;

THV = THV << 4;//读出的高低位数值移位

TMV = TLV | THV;//合并高低位放入 TM 为实际温度值

Sign = 0;

if (SetTF || !

Key_SET)

Sign = TMSetV >> 7;//取符号

else

Sign = TMV >> 7;

if (Sign)

{

if (SetTF || !

Key_SET)

{

LED_One = (~(TMSetV-1)) / 100;//SET 状态下显示设定值

LED_Two = ((~(TMSetV-1)) - LED_One * 100)/10;

LED_Three = (~(TMSetV-1)) - LED_One * 100 - LED_Two * 10;

}

else

{

LED_One = (~TMV) / 100;//转换百位值

LED_Two = ((~TMV) - LED_One * 100)/10;

LED_Three = (~TMV) - LED_One * 100 - LED_Two * 10;

}

}

else

{

if (SetTF || !

Key_SET)

{

LED_One = (TMSetV) / 100;//SET 状态下显示设定值

LED_Two = (TMSetV - LED_One * 100)/10;

LED_Three = TMSetV - LED_One * 100 - LED_Two * 10;

}

else

{

LED_One = (TMV) / 100;//转换百位值

LED_Two = (TMV - LED_One * 100)/10;

LED_Three = TMV - LED_One * 100 - LED_Two * 10;

}

}

//转 LED 字段

if (LED_One) //超过百时十位的处理

LED_Two = LEDDis[LED_Two];

else

{

if (LED_Two == 0)

LED_Two = LEDDis[10];

else

LED_Two = LEDDis[LED_Two];

}

if (Sign)

LED_One = LEDDis[11];

else

{

if (LED_One == 0)

LED_One = LEDDis[10];

else

LED_One = LEDDis[LED_One];

}

LED_Three = LEDDis[LED_Three];

}

void InitDS1820(void)//初始化 DS1820

{

TMPort = 1;//拉高 TMPort

_nop_();//保持一个周期

TMPort = 0;//拉低 TMPort

Delay_510();//延时DS1820 复位时间要 500us 的低电平

TMPort = 1;//拉高 TMPort

_nop_();//保持

_nop_();

_nop_();

Delay_110();//延时 110us 等待 DS1820 回应

if (!

TMPort)//回应信号为低电平

DS1820ON = 1;

else

DS1820ON = 0;

Delay_110();//延时

Delay_110();

TMPort = 1;//拉高 TMPort

}

void ROMDS1820(void)//跳过 ROM 匹配

{

#pragma asm

MOV A,#0CCH

MOV R2,#8

CLR C

WR1:

CLR P3_7

MOV R3,#6

DJNZ R3,$

RRC A

MOV P3_7,C

MOV R3,#23

DJNZ R3,$

SETB P3_7

NOP

DJNZ R2,WR1

SETB P3_7

#pragma endasm

}

void TMVDS1820(void)//温度转换指令

{

#pragma asm

MOV A,#44H

MOV R2,#8

CLR C

WR2:

CLR P3_7

MOV R3,#6

DJNZ R3,$

RRC A

MOV P3_7,C

MOV R3,#23

DJNZ R3,$

SETB P3_7

NOP

DJNZ R2,WR2

SETB P3_7

#pragma endasm

}

void TMRDS1820(void)//读出温度指令

{

#pragma asm

MOV A,#0BEH

MOV R2,#8

CLR C

WR3:

CLR P3_7

MOV R3,#6

DJNZ R3,$

RRC A

MOV P3_7,C

MOV R3,#23

DJNZ R3,$

SETB P3_7

NOP

DJNZ R2,WR3

SETB P3_7

#pragma endasm

}

void TMWDS1820(void)//写入温度限制指令

{

#pragma asm

MOV A,#04EH

MOV R2,#8

CLR C

WR13:

CLR P3_7

MOV R3,#6

DJNZ R3,$

RRC A

MOV P3_7,C

MOV R3,#23

DJNZ R3,$

SETB P3_7

NOP

DJNZ R2,WR13

SETB P3_7

#pragma endasm

}

void TMREDS1820(void)//COPY RAM to E2PRAM

{

#pragma asm

MOV A,#48H

MOV R2,#8

CLR C

WR33:

CLR P3_7

MOV R3,#6

DJNZ R3,$

RRC A

MOV P3_7,C

MOV R3,#23

DJNZ R3,$

SETB P3_7

NOP

DJNZ R2,WR33

SETB P3_7

#pragma endasm

}

void TMERDS1820(void)//COPY E2PRAM to RAM

{

#pragma asm

MOV A,#0B8H

MOV R2,#8

CLR C

WR43:

CLR P3_7

MOV R3,#6

DJNZ R3,$

RRC A

MOV P3_7,C

MOV R3,#23

DJNZ R3,$

SETB P3_7

NOP

DJNZ R2,WR43

SETB P3_7

#pragma endasm

}

void WriteDS1820(void) //写入温度限制值

{

#pragma asm

MOV A,26H//发出 4EH 写 ROM 指令后连发两个字节分别为上下限

MOV

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1