智能电子产品设计与制作3.温度控制系统设计报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9 RST
29 30 31
PSEN
ALE EA
1 2 3 4
5 6
7 8
P1.0 P1.1
P1.2 P1.3 P1.4
P1.5 P1.6
P1.7
AT89C 51
D1
LED-RED
R20
1k
P0.0/AD0
P0.1/AD1 P0.2/AD2
P0.3/AD3 P0.4/AD4 P0.5/AD5
P0.6/AD6 P0.7/AD7
(1)独特的单线接口,仅需要一个端口引脚进行通信。 (2)多个 DS18B20 可以并联在唯一的三线上,实现多点组网功能。 (3)不需要外部器件。 (4)可通过数据线供电,电压范围为 3.0~5.5V。 (5)零待机功耗。 (6)温度以 9~12 位数字量读出。 (7)用户可定义的非易失性温度报警设置。 (8)报警搜索命令识别并标志超过程序设定温度(温度报警条件)的器件。
//共阳 0~5
0x92,0x82,0xF8,0x80,0x90};
//
6~9
int n,m;
******************************************************/
void dis_dn_up(int up_dn)
{
DUAN = 0xff;
WEI = 0x08;
DS18B20 原理图中的斜率累加器用于补偿和修正测温过程中的非线形性,其 输出用于修正减法计数器的预置值,只要计数门未关闭就重复上述过程,直到 温度寄存器值达到被测温度值。
另外,由于 DS18B20 单线通信功能是分时完成的,它有严格的时序概念, 因此读/写时序很重要。系统对 DS18B20 的 各种操作必须按协议进行。
减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计 数器 1 的预置值减到 0 时,温度寄存器的值将加 1,减法计数器 1 的预置值将重 新被装入,减法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数, 如此循环直到减法计数器 2 计数到 0 时,停止温度寄存器的累加,此时温度寄 存器中的数值就是所测温度值。
项目三:基于 DS18B20 测温系统的设计
(一) 设计要求
(1) 通过 AT89C51 设计数字测温系统,测温元件采用 DS18B20 数字温度传感 器。
(2) 测温范围为-55~+125℃. (3) 误差在±0.5℃以内。 (4) 采用四位共阳 LED 数码显示温度。 (5) 可通过按键设置温度上限值和下限值,若环境温度超过此范围,系统自
(六)实验总结
//个位
虽然最后用这个项目不用做实物图,但是整个过程是比较麻烦的,
因为程序的设计对于我来说,是非常的的难题,但这个项目有是我负
责程序。虽然我感到很困难,但是我还是不会放弃,经过找在程序方
面学得很好的同学的帮助指导下,我完成了这个程序。当我很高兴的
将程序导进仿真电路的时候,却没为工作,有点小失望;我又慢慢检
39 38 37
36 35
34 33 32
P2.0/A8 P2.1/A9
P2.2/A10 P2.3/A11
P2.4/A12 P2.5/A13 P2.6/A14
P2.7/A15
21 22 23 24 25 26 27 28
P3.0/RXD P3.1/TXD
P3.2/INT0 P3.3/INT1
P3.4/T0
} /***************************************************** void UP(void) {
if(KEY3==0) { Delayms(20000); if(KEY3==0) { n++; if(n>=127) n=100; } } if(KEY4==0) {
if(KEY4==0) {
m++; if(m>=55)
m=55; } } if(KEY3==0) { Delayms(20000); if(KEY3==0) {
m‐‐; if(m<=0)
m=0; } }
dis_dn_up(m);
DUAN = 0xff;
WEI = 0x01;
DUAN = 0xbf;
P3.5/T1 P3.6/WR
P3.7/RD
10 11
12 13 14 15
16 17
R19
300
R21
4. 7k
Q1 PNP BUZ1
BUZZER
U4
2 3 4
5 6
7 8 9
A0
A1 A2
A3 A4 A5
A6 A7
B0
B1 B2
B3 B4 B5
B6 B7
18 17 16
15 14
13 12 11
操作协议为初始化 DS18B20(发复位脉冲)→发 ROM 功能命令→发存储器操 作命令→处理数据。
(四)测温仿真图
C1
30nF
C2
30nF
R13
200
R14
1k
X1
CRYSTAL
C3
22uF
10k 10k 10k 10k 10k
RP1
RESPACK-8
1 2 3 4 5 6 7 8 9
U1
19 XTAL1 18 XTAL2
DUAN = tab[0];
Delayms(150);
WEI = 0X00; DUAN = 0xff; WEI = 0x02; DUAN = tab[up_dn%100/10]; Delayms(150);
WEI = 0X00; DUAN = 0xff; WEI = 0x04; DUAN = tab[up_dn%10]+0x80; Delayms(150);
动发出声光报警。
(二) DS18B20 介绍
1、DS18B20 简介 DS18B20 是美国 DALLAS 半导体公司推出的一种智能型温度传感器。与传统
的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通 过简单的编程实现 9~12 位的数字值读书方式。 2、DS18B20 性能特点
void Display(UNIT8 temp_0,UNIT8 temp_1)
{
UNIT8 t,i_shi_f;
UNIT16 i; if ((temp_1&0xF8)==0xF8)
//当前 5 位数据为 1 时
{
temp_1 = ~temp_1; 反
//高 8 位取
temp_0 = ~temp_0+1;
WEI = 0X08; DUAN = tab[i_shi_f]; Delayms(150);
//小数部分
DUAN = 0xFF; WEI = 0x01; DUAN = 0xbf;
Delayms(150);
//负号
DUAN = 0xFF; WEI = 0x02; DUAN = tab[i/10]; Delayms(150);
DUAN = 0xFF; WEI = 0x02; DUAN = tab[i%100/10]; Delayms(150);
//小数部分 //百位
//十位
DUAN = 0xFF; WEI = 0x04; DUAN = tab[i%10]+0x80; Delayms(50); if(i>=n) {
LED=0; SPK=0; } else if(i<n) { LED=1; SPK=1; } } } else { DUAN=0XC0; WEI=0X0F; } }
{
i=(((temp_0&0xf0)>>4)+((temp_1&0x07)<<4))*0.0625*16;
i_shi_f=(temp_0&0x0f)*0.625; DUAN = 0xFF;
WEI = 0X08; DUAN = tab[i_shi_f]; Delayms(150);
DUAN = 0xFF; WEI = 0x01; DUAN = tab[i/100]; Delayms(150);
//低 8 位取反加
1 if(temp_0 == 0x00)
//当低 8 位进 1 时
{
temp_1++; //高 8 位加 1
}
for(t=0;t<50;t++)
{
i=(((temp_0&0xf0)>>4)+((temp_1&0x07)<<4))*0.0625*16;
i_shi_f=(temp_0&0x0f)*0.625; DUAN = 0xFF;
(9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,只是不能 正常工作。 3、DS18B20 测温原理
DS18B20 采用单总线工作方式,由于所有信号(控制和数据)都通过单总线 传输,因此总线的时序逻辑必须非常严格。
在 DS18B20 原理图中海含着计数门,当计数门打开时,DS18B20 就对低温度 系数振荡器产生的时钟脉冲进行计数,进Hale Waihona Puke Baidu完成温度测量。计数门的开启时间 由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别 置入减法计数器 1、温度寄存器中,减法计数器 1 和温度寄存器被预置在-55℃ 所对应的一个基数值中。
Delayms(50);
}
/******************************************************** *函数名: Display *描述 : 显示温度值 *输入 : UNIT8 temp_0,UNIT8 temp_1 *输出 : 无
*********************************************************/
操作协议为初始化 DS18B20(发复位脉冲)→阀 ROM 功能命令→发存储器操 作命令→处理数据。
(三)、DS18B20 原理图
预置
斜率累加器
低温度系数振荡
减法计数器 1
减到 0
计数比较器 预置
温度寄存器
高温度系数振
减法计数器 2
减到 0
DS18B20 原理图的斜率累加器用于补偿和修正测温过程中的非线形性,其输 出用于修正减法计数器的预置值,只要计数门未关闭就重复上述过程,直到温 度寄存器值达到被测温度值。
Delayms(20000); if(KEY4==0) { n‐‐; if(n<=0) n=0; }
}
dis_dn_up(n);
DUAN = 0xff; WEI = 0x01; DUAN = tab[n/100]; Delayms(50); } /***************************************************** *函数名: DN *描述 : 下限值设置 *输入 : 无 *输出 : 无 ******************************************************/ void DN(void) { if(KEY4==0) { Delayms(20000);
//十位
DUAN = 0xFF;
//个位
WEI = 0x04;
DUAN = tab[i%10]+0x80;
Delayms(50);
if(i>=m)
{
LED=0;
SPK=0;
}
else if(i<m)
{
LED=1;
SPK=1;
}
}
}
else if((temp_1|0x07)==0x07)
{
for(t=0;t<50;t++)
查仿真电路,在我一遍一遍检查下,终于找出了问题,由于小小一条
导线没联通,电路不能工作,修改之后,电路终于正常工作了,感到
非常高兴从整个过程中,让我知道了同学的帮助,耐心的操作,仔细
的检查对整个项目是非常重要的。
19 1
CE AB /BA
74LS245
U2
3 2 1
VCC DQ
GND
26.0
DS18B20
(五)测温系统设计程序
#include "reg52.h"
#include "display.h"
#include "ds18b20.h" UNIT8 code tab[10] = {0xC0,0xF9,0xA4,0xB0,0x99,
29 30 31
PSEN
ALE EA
1 2 3 4
5 6
7 8
P1.0 P1.1
P1.2 P1.3 P1.4
P1.5 P1.6
P1.7
AT89C 51
D1
LED-RED
R20
1k
P0.0/AD0
P0.1/AD1 P0.2/AD2
P0.3/AD3 P0.4/AD4 P0.5/AD5
P0.6/AD6 P0.7/AD7
(1)独特的单线接口,仅需要一个端口引脚进行通信。 (2)多个 DS18B20 可以并联在唯一的三线上,实现多点组网功能。 (3)不需要外部器件。 (4)可通过数据线供电,电压范围为 3.0~5.5V。 (5)零待机功耗。 (6)温度以 9~12 位数字量读出。 (7)用户可定义的非易失性温度报警设置。 (8)报警搜索命令识别并标志超过程序设定温度(温度报警条件)的器件。
//共阳 0~5
0x92,0x82,0xF8,0x80,0x90};
//
6~9
int n,m;
******************************************************/
void dis_dn_up(int up_dn)
{
DUAN = 0xff;
WEI = 0x08;
DS18B20 原理图中的斜率累加器用于补偿和修正测温过程中的非线形性,其 输出用于修正减法计数器的预置值,只要计数门未关闭就重复上述过程,直到 温度寄存器值达到被测温度值。
另外,由于 DS18B20 单线通信功能是分时完成的,它有严格的时序概念, 因此读/写时序很重要。系统对 DS18B20 的 各种操作必须按协议进行。
减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计 数器 1 的预置值减到 0 时,温度寄存器的值将加 1,减法计数器 1 的预置值将重 新被装入,减法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数, 如此循环直到减法计数器 2 计数到 0 时,停止温度寄存器的累加,此时温度寄 存器中的数值就是所测温度值。
项目三:基于 DS18B20 测温系统的设计
(一) 设计要求
(1) 通过 AT89C51 设计数字测温系统,测温元件采用 DS18B20 数字温度传感 器。
(2) 测温范围为-55~+125℃. (3) 误差在±0.5℃以内。 (4) 采用四位共阳 LED 数码显示温度。 (5) 可通过按键设置温度上限值和下限值,若环境温度超过此范围,系统自
(六)实验总结
//个位
虽然最后用这个项目不用做实物图,但是整个过程是比较麻烦的,
因为程序的设计对于我来说,是非常的的难题,但这个项目有是我负
责程序。虽然我感到很困难,但是我还是不会放弃,经过找在程序方
面学得很好的同学的帮助指导下,我完成了这个程序。当我很高兴的
将程序导进仿真电路的时候,却没为工作,有点小失望;我又慢慢检
39 38 37
36 35
34 33 32
P2.0/A8 P2.1/A9
P2.2/A10 P2.3/A11
P2.4/A12 P2.5/A13 P2.6/A14
P2.7/A15
21 22 23 24 25 26 27 28
P3.0/RXD P3.1/TXD
P3.2/INT0 P3.3/INT1
P3.4/T0
} /***************************************************** void UP(void) {
if(KEY3==0) { Delayms(20000); if(KEY3==0) { n++; if(n>=127) n=100; } } if(KEY4==0) {
if(KEY4==0) {
m++; if(m>=55)
m=55; } } if(KEY3==0) { Delayms(20000); if(KEY3==0) {
m‐‐; if(m<=0)
m=0; } }
dis_dn_up(m);
DUAN = 0xff;
WEI = 0x01;
DUAN = 0xbf;
P3.5/T1 P3.6/WR
P3.7/RD
10 11
12 13 14 15
16 17
R19
300
R21
4. 7k
Q1 PNP BUZ1
BUZZER
U4
2 3 4
5 6
7 8 9
A0
A1 A2
A3 A4 A5
A6 A7
B0
B1 B2
B3 B4 B5
B6 B7
18 17 16
15 14
13 12 11
操作协议为初始化 DS18B20(发复位脉冲)→发 ROM 功能命令→发存储器操 作命令→处理数据。
(四)测温仿真图
C1
30nF
C2
30nF
R13
200
R14
1k
X1
CRYSTAL
C3
22uF
10k 10k 10k 10k 10k
RP1
RESPACK-8
1 2 3 4 5 6 7 8 9
U1
19 XTAL1 18 XTAL2
DUAN = tab[0];
Delayms(150);
WEI = 0X00; DUAN = 0xff; WEI = 0x02; DUAN = tab[up_dn%100/10]; Delayms(150);
WEI = 0X00; DUAN = 0xff; WEI = 0x04; DUAN = tab[up_dn%10]+0x80; Delayms(150);
动发出声光报警。
(二) DS18B20 介绍
1、DS18B20 简介 DS18B20 是美国 DALLAS 半导体公司推出的一种智能型温度传感器。与传统
的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通 过简单的编程实现 9~12 位的数字值读书方式。 2、DS18B20 性能特点
void Display(UNIT8 temp_0,UNIT8 temp_1)
{
UNIT8 t,i_shi_f;
UNIT16 i; if ((temp_1&0xF8)==0xF8)
//当前 5 位数据为 1 时
{
temp_1 = ~temp_1; 反
//高 8 位取
temp_0 = ~temp_0+1;
WEI = 0X08; DUAN = tab[i_shi_f]; Delayms(150);
//小数部分
DUAN = 0xFF; WEI = 0x01; DUAN = 0xbf;
Delayms(150);
//负号
DUAN = 0xFF; WEI = 0x02; DUAN = tab[i/10]; Delayms(150);
DUAN = 0xFF; WEI = 0x02; DUAN = tab[i%100/10]; Delayms(150);
//小数部分 //百位
//十位
DUAN = 0xFF; WEI = 0x04; DUAN = tab[i%10]+0x80; Delayms(50); if(i>=n) {
LED=0; SPK=0; } else if(i<n) { LED=1; SPK=1; } } } else { DUAN=0XC0; WEI=0X0F; } }
{
i=(((temp_0&0xf0)>>4)+((temp_1&0x07)<<4))*0.0625*16;
i_shi_f=(temp_0&0x0f)*0.625; DUAN = 0xFF;
WEI = 0X08; DUAN = tab[i_shi_f]; Delayms(150);
DUAN = 0xFF; WEI = 0x01; DUAN = tab[i/100]; Delayms(150);
//低 8 位取反加
1 if(temp_0 == 0x00)
//当低 8 位进 1 时
{
temp_1++; //高 8 位加 1
}
for(t=0;t<50;t++)
{
i=(((temp_0&0xf0)>>4)+((temp_1&0x07)<<4))*0.0625*16;
i_shi_f=(temp_0&0x0f)*0.625; DUAN = 0xFF;
(9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,只是不能 正常工作。 3、DS18B20 测温原理
DS18B20 采用单总线工作方式,由于所有信号(控制和数据)都通过单总线 传输,因此总线的时序逻辑必须非常严格。
在 DS18B20 原理图中海含着计数门,当计数门打开时,DS18B20 就对低温度 系数振荡器产生的时钟脉冲进行计数,进Hale Waihona Puke Baidu完成温度测量。计数门的开启时间 由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别 置入减法计数器 1、温度寄存器中,减法计数器 1 和温度寄存器被预置在-55℃ 所对应的一个基数值中。
Delayms(50);
}
/******************************************************** *函数名: Display *描述 : 显示温度值 *输入 : UNIT8 temp_0,UNIT8 temp_1 *输出 : 无
*********************************************************/
操作协议为初始化 DS18B20(发复位脉冲)→阀 ROM 功能命令→发存储器操 作命令→处理数据。
(三)、DS18B20 原理图
预置
斜率累加器
低温度系数振荡
减法计数器 1
减到 0
计数比较器 预置
温度寄存器
高温度系数振
减法计数器 2
减到 0
DS18B20 原理图的斜率累加器用于补偿和修正测温过程中的非线形性,其输 出用于修正减法计数器的预置值,只要计数门未关闭就重复上述过程,直到温 度寄存器值达到被测温度值。
Delayms(20000); if(KEY4==0) { n‐‐; if(n<=0) n=0; }
}
dis_dn_up(n);
DUAN = 0xff; WEI = 0x01; DUAN = tab[n/100]; Delayms(50); } /***************************************************** *函数名: DN *描述 : 下限值设置 *输入 : 无 *输出 : 无 ******************************************************/ void DN(void) { if(KEY4==0) { Delayms(20000);
//十位
DUAN = 0xFF;
//个位
WEI = 0x04;
DUAN = tab[i%10]+0x80;
Delayms(50);
if(i>=m)
{
LED=0;
SPK=0;
}
else if(i<m)
{
LED=1;
SPK=1;
}
}
}
else if((temp_1|0x07)==0x07)
{
for(t=0;t<50;t++)
查仿真电路,在我一遍一遍检查下,终于找出了问题,由于小小一条
导线没联通,电路不能工作,修改之后,电路终于正常工作了,感到
非常高兴从整个过程中,让我知道了同学的帮助,耐心的操作,仔细
的检查对整个项目是非常重要的。
19 1
CE AB /BA
74LS245
U2
3 2 1
VCC DQ
GND
26.0
DS18B20
(五)测温系统设计程序
#include "reg52.h"
#include "display.h"
#include "ds18b20.h" UNIT8 code tab[10] = {0xC0,0xF9,0xA4,0xB0,0x99,