收藏 分享(赏)

温度传感器实训报告.doc

上传人:精品资料 文档编号:8064252 上传时间:2019-06-07 格式:DOC 页数:18 大小:120.50KB
下载 相关 举报
温度传感器实训报告.doc_第1页
第1页 / 共18页
温度传感器实训报告.doc_第2页
第2页 / 共18页
温度传感器实训报告.doc_第3页
第3页 / 共18页
温度传感器实训报告.doc_第4页
第4页 / 共18页
温度传感器实训报告.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、温度传感器实训报告实训报告课 程:信号检测与技术专 业:应用电子技术班 级:应电 1131 班小组成员:欧阳主、王雅志、朱知荣、周玙旋、周合昱指导老师:宋晓虹老师2013 年 4 月 23 日一、实训目的了解 18b20 温度传感器的基本原理与应用2、实训过程1、电路实现功能:由电脑 USB 接口供电,也可外接 6V16V 的直流电源。通过温度传感器18B20 作为温度传感器件,测出改实际温度,再由芯片为封装AT89C2051 单片机进行数据处理,通过数码管显示温度值。温度显示(和控制)的范围为:-55C 到 125C 之间,精度为 1C,也就是显示整数。如果你设定报警的温度为 20C,则当环

2、境温度达到 21C 时,报警发光二极管发光,同时继电器动作。如果你不需要对温度控制(报警) ,可以将报警温度值设置高些。如果控制的是某局部的温度,可将 18B20 用引线引出,但距离不宜过大,注意其引脚绝缘。.电路的构成该电路有电源、按键控制模块、信号处理、驱动模块、显示模块、检测。.电路原理图RST1 P3.0(RXD)2P3.1(TXD)3 XTAL24XTAL15 P3.2(INT0)6P3.3(INT1)7 P3.4(T0)8P3.5(T1)9 GND10 P3.7 11P1.0 12P1.113P1.2 14P1.3 15P1.416P1.5 17P1.6 18P1.719VCC 2

3、0IC1AT89C2051C230PC130P JZ12M R110K +C310UFVCCAN3AN2AN1R34.7KR44.7KR24.7KP1P2P3P1P2P3Q18550VCCJDQLED3 R52KV11N4148R64.7KVCCP3.7P3.7Q28550Q38550Q485501234J3USB+C4470UFC5104vccA1B2C3D4E5F6G7DP8P19P210P3118.8.8.LED2LED-3R7R13R8R9R11R10R12220*7D1D2D3D4D5D6D7D1 D2 D3 D4 D5 D6 D7123J1IN 1GND2OUT 3IC3L7805

4、12J2c 3d 4e 5f 6g7com9a 1b 10 LED1R14470VCC3I/O2GND1IC2DS18B20.电路仿真图五、元件清单及功能介绍名称 规格 编号 主要功能或作用按钮 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 外接电

5、源接线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 R7R13 和 R14 数码管限流,其中 R14=470电阻 4.7K R2、R3、R4、R6 三极管基极和温度传感器偏置电阻 2K R5 三极管 Q1 基极偏置二极管 1N4148 V1 续流,保护 Q1跳线 X1

6、、X2 用元件引脚连继电器 5V2A JDQ 温度达到报警值时触点动作PCB 板 73MMX85MMUSB 电源线 连接电脑 USB 口6、程序:/*-温度控制器 V1.5显示为三个共阳极 LED温度传感器用单总线 DS18B20CPU 为 2051,四个按键,分别为 UP,DOWN ,SET温度调节上限为 125 度,下限为-55 度只能用于单只 18B20-*/#include #include #define Key_UP P3_0 /上调温度#define Key_DOWN P3_1 /下调温度#define Key_SET P1_7 /设定键(温度设定,长按开电源)#define R

7、elayOutPort P3_5 /继电器输出#define LEDPort P1 /LED 控制口#define LEDOneC P3_2 /LED DS1 控制(百位)#define LEDTwoC P3_3 /LED DS2 控制(十位)#define LEDThreeC P3_4 /LED DS3 控制(个位)#define TMPort P3_7 /DS1820 DataPortunsigned char code LEDDis=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF; /0-9 的 LED笔划,0xFF

8、 为空,0xF7 为负号static unsigned char bdata StateREG; /可位寻址的状态寄存器sbit DS1820ON = StateREG0; /DS1820 是否存在sbit SetTF = StateREG1; /是否是在温度设置状态sbit KeySETDown = StateREG2; /是否已按过 SET 键标识sbit PowTF = StateREG3; /电源电源标识sbit KeyTF = StateREG4; /键盘是否允许/sbit KeySETDowning = StateREG5; /SET 是否正在按下static unsigned c

9、har 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 cha

10、r 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 TMW

11、DS1820(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

12、 = 0;IntNum = 0;IntNum2 = 0;IntNum3 = 0;LED_One = 0;LED_Two = 0;InitDS1820(); /初始化ROMDS1820(); /跳过 ROMTMERDS1820(); /E2PRAM 中温度上限值调入 RAMInitDS1820(); /初始化ROMDS1820(); /跳过 ROMTMRDS1820(); /读出温度指令ReadDS1820(); /读出温度值和上限值TMSetV = TMRomV; /拷贝保存在 DS18B20ROM 里的上限值到 TMSetVEA = 1; /允许 CPU 中断ET0 = 1; /定时器 0

13、中断打开TMOD = 0x1; /设定时器 0 为模式 1,16 位模式TH0=0xB1;TL0=0xDF; /设定时值为 20000us(20ms)TR0 = 1; /开始定时while(1);/定时器 0 中断外理中键扫描和显示void KeyAndDis_Time0(void) interrupt 1 using 2TH0=0xB1;TL0=0xDF; /设定时值为 20000us(20ms)LEDPort = 0xFF;if (!Key_UP)KeyV = 1;if (!Key_DOWN)KeyV = 2;if (!Key_SET)KeyV = 3;/KeySETDowning = 0

14、; /清除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; /标识位标识退出设定I

15、nitDS1820(); /初始化ROMDS1820(); /跳过 ROMTMWDS1820(); /写温度上限指令WriteDS1820(); /写温度上限到 DS18B20ROMWriteDS1820(); /写温度上限到 DS18B20ROMWriteDS1820(); /写温度上限到 DS18B20ROMInitDS1820(); /初始化ROMDS1820(); /跳过 ROMTMREDS1820(); /温度上限值 COPY 回 E2PRAMelseSetTF = 1;if (!KeySETDown) /没有第一次按下 SET 时,KeySETDown 标识置 1KeySETDow

16、n = 1;elseKSDNum = KSDNum + 1; /前一秒内有按过 SET 则开始计数if (SetTF) /在 SET 状态下if (KeyV = 1) /上调温度if (KeyV = 2) /下调温度if (TMSetV = 125)TMSetV = 125;if (!KeyTF) /当键盘处于可用时,锁定if (KeySETDown) /在 2 秒内按下了 SET 则计中断发生次数用于长按 SET 时计时用IntNum = IntNum + 1; if (IntNum 55) /中断发生了 55 次时(大约 1.2 秒)75 为 1.5 秒左右IntNum = 0;KeySE

17、TDown = 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

18、 (!PowTF)InitDS1820(); /初始化ROMDS1820(); /跳过 ROMTMVDS1820(); /温度转换指令Delay_510();Delay_510(); /延时等待转换完成InitDS1820(); /初始化ROMDS1820(); /跳过 ROMTMRDS1820(); /读出温度指令ReadDS1820(); /读出温度值V2ToV(); /转换显示值if (TMV TMSetV) /根据采集到的温度值控制继电器RelayOutPort = 0;elseRelayOutPort = 1;if (SetTF) IntNum2 = IntNum2 + 1; /用于

19、闪烁计数if (IntNum2 50 ) IntNum2 = 0;if (KeyTF) IntNum3 = IntNum3 + 1; /用于防止按键连按if (IntNum3 25) IntNum3 = 0;KeyTF = 0;if (SetTF) THV = THV 7; /取符号elseSign = 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_

20、One * 100 - LED_Two * 10;elseLED_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

21、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 = LEDDisLED_Two;elseif (LED_Two = 0)LED_Two = LEDDis10;elseLED_Two = LEDDisLED_Two;if (Sign)LED_One = LEDDis11;elseif (LED_One = 0)LED_One = LEDDis10

22、;elseLED_One = LEDDisLED_One;LED_Three = LEDDisLED_Three;void InitDS1820(void) /初始化 DS1820TMPort = 1; /拉高 TMPort_nop_(); /保持一个周期TMPort = 0; /拉低 TMPortDelay_510(); /延时 DS1820 复位时间要 500us 的低电平TMPort = 1; /拉高 TMPort_nop_(); /保持 _nop_();_nop_();Delay_110(); /延时 110us 等待 DS1820 回应if (!TMPort) /回应信号为低电平DS

23、1820ON = 1;elseDS1820ON = 0;Delay_110(); /延时Delay_110();TMPort = 1; /拉高 TMPortvoid ROMDS1820(void) /跳过 ROM 匹配#pragma asmMOV A,#0CCHMOV R2,#8CLR CWR1:CLR P3_7MOV R3,#6DJNZ R3,$RRC AMOV P3_7,CMOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR1SETB P3_7#pragma endasmvoid TMVDS1820(void) /温度转换指令#pragma asmMOV A,

24、#44HMOV R2,#8CLR CWR2:CLR P3_7MOV R3,#6DJNZ R3,$RRC AMOV P3_7,CMOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR2SETB P3_7#pragma endasmvoid TMRDS1820(void) /读出温度指令#pragma asmMOV A,#0BEHMOV R2,#8CLR CWR3:CLR P3_7MOV R3,#6DJNZ R3,$RRC AMOV P3_7,CMOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR3SETB P3_7#pragma enda

25、smvoid TMWDS1820(void) /写入温度限制指令#pragma asmMOV A,#04EHMOV R2,#8CLR CWR13:CLR P3_7MOV R3,#6DJNZ R3,$RRC AMOV P3_7,CMOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR13SETB P3_7#pragma endasmvoid TMREDS1820(void) /COPY RAM to E2PRAM#pragma asmMOV A,#48HMOV R2,#8CLR CWR33:CLR P3_7MOV R3,#6DJNZ R3,$RRC AMOV P3_7

26、,CMOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR33SETB P3_7#pragma endasmvoid TMERDS1820(void) /COPY E2PRAM to RAM#pragma asmMOV A,#0B8HMOV R2,#8CLR CWR43:CLR P3_7MOV R3,#6DJNZ R3,$RRC AMOV P3_7,CMOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR43SETB P3_7#pragma endasmvoid WriteDS1820(void) /写入温度限制值#pragma asmM

27、OV A,26H /发出 4EH 写 ROM 指令后连发两个字节分别为上下限MOV R2,#8CLR CWR23:CLR P3_7MOV R3,#6DJNZ R3,$RRC AMOV P3_7,CMOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR23SETB P3_7 #pragma endasmvoid ReadDS1820(void) /读出温度值#pragma asmMOV R4,#3 ; 将温度高位和低位,高温限制位从 DS18B20 中读出MOV R1,#29H ; 低位存入 29H(TEMPER_L),高位存入 28H(TEMPER_H),高温限制位

28、存入27H(TMRomV)RE00:MOV R2,#8RE01:CLR CSETB P3_7NOPNOPCLR P3_7NOPNOPNOPSETB P3_7MOV R3,#09RE10: DJNZ R3,RE10MOV C,P3_7MOV R3,#23RE20: DJNZ R3,RE20RRC ADJNZ R2,RE01MOV R1,ADEC R1DJNZ R4,RE00#pragma endasmvoid Delay_510(void) /延时 510 微秒#pragma asmMOV R0,#7DHMOV R1,#02HTSR1:DJNZ R0,TSR1MOV R0,#7DHDJNZ R1

29、,TSR1#pragma endasmvoid Delay_110(void) /延时 110 微秒#pragma asmMOV R0,#19HMOV R1,#02HTSR2:DJNZ R0,TSR2MOV R0,#19HDJNZ R1,TSR2#pragma endasmvoid Delay_10ms(void) /延时 10ms#pragma asmMOV R0,#19HMOV R1,#0C8HTSR3:DJNZ R0,TSR3MOV R0,#19HDJNZ R1,TSR3#pragma endasmvoid Delay_4s(void) /延时 4s#pragma asmMOV R2,#28HTSR5:MOV R0,#0FAHMOV R1,#0C8HTSR4:DJNZ R0,TSR4MOV R0,#0FAHDJNZ R1,TSR4DJNZ R2,TSR5#pragma endasm7、心得体会通过在这次的温度传感器的实训。我们小组的在这三周时间里,养成了良好的合作氛围,知道了温度传感器的原理跟基本构造,也感受到了团队合作的重要性。特别是我们组长,起到了良好的带头作用。在制作过程中出现了很多的问题,包括温度传感器无效果,数码管无反应。但通过我们及时讨论,老师的帮助,最后还是成功了。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报