8路温度巡检系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图7温度检测模块电路图
三、仿真结果
本系统程序包括主程序、时钟复位子程序、数码管显示子程序、温度检测子程序等。主程序用于系统初始化,子程序调度等。复位子程序用来使计数恢复初始状态,数码管显示子程序用来显示温度和温度点,温度检测子程序用来检测对哪一点的温度值。
在温度点1的软件仿真图
在温度点2的软件仿真图
case 3:P20=1;P21=1;P22=1;P23=0;
if(Nflag==1)P0=disp[10];else P0=0x00;break;
default:break;
}
P1=disp[num+1];
delay(20);
if(++i>3)i=0;
}
void main()
{
IE=0x8b;
TMOD=0x11;
return sflag;
}
#include "main.h"
#include "ds18b20.h"
bit timeflag=0;
uint8 timecount=0,cyclecount=0;
uint8 code disp[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40};
电路设计过程及参数确定比较烦琐,我在算时会遇到很多问题,有时实在算不出来了就想放弃,但很快自己会意识到那是一种错误的想法,所以自己会给自己鼓劲继续往下进行,当算到最后时便会有很大的成就感,这强烈的激起了我学习的兴趣,我想这次课程设计对我以后的专业课程学习将有很大帮助。
这里,我首先要感谢我的指导老师,他细心地帮我解决了一系列问题,帮助我成功地完成了这次实验设计。其次,我还要感谢我的同学们,帮助我更好地完成设计了此次课程设计。
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
TH1=(65536-8000)/256;
TL1=(65536-8000)%256;
TR1=1;
IT0=1;
while(1)
{
if(timeflag)
{
timeflag=0;
Nflag=read_temperature(temp,rom[num]);
num++;
if(num>7)
图5温度显示电路图
图6温度点显示电路图
(4)温度检测模块
本系统采用的是单片机基于数字温度传感器DS18B20的系统。,对于温度信号的采集具有大范围、高精度的特点。DS18B20利用单总线的特点可以方便的实现多点温度的测量,轻松的组建传感器网络,系统的抗干扰性好、设计灵活、方便,而且适合于在恶劣的环境下进行现场温度测量。采用数字温度芯片DS18B20测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。DS18B20的最大特点之一采用了单总线的数据传输,节约了单片机有限的I/O资源,由数字温度计DS1820和微控制器AT89C51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。通过数码管能够实时显示8路温度,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
(2)时钟复位模块
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,52芯片便循环复位。复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的000H处开始运行程序。复位是外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。当时钟频率选用12MHz时,C1,C2取22pF,R1为10kΩ,C3为10uf。复位操作不会对内部RAM有所影响。
{
uint8 temp;
uint16 temp1;
uint8 i=8;
bit sflag=0;//负数标志位
reset_ds18b20();
wr_byte_ds18b20(0x55)0(*rom++);
}
wr_byte_ds18b20(0xbe);
uint8 temp[3];
uint8 num=0;
uint8 rom[][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e}, //8个ds18b20的rom
{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},
{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},
{0x28,0x37,0xc5,0xb8,0x00,0x00,0x00,0x0b}};
bit Nflag;
void delay(uint16del)
{
while(del--);
}
void display(uint8 *temp)
{
uint8 i;
P20=1;P21=1;P22=1;P23=1;
switch(i)
赣南师院
物理与电子信息学院
专业技能测试设计报告书
姓名:赖新
班级:电子信息工程09级
学号:090802016
指导老师:刘小燕
时间:2011年12月21日
论文题目
8路温度巡检系统
课程论文
要求
1、设某粮库有8个粮仓,粮仓的温度变化范围为-30℃~+50℃。
2、设计一个系统对这8个粮仓的温度进行巡回检测并显示,每路显示2
秒。
3、要求温度的检测精度为±0.1℃。用Proteus仿真。不用做出实物。
设计过程
(包括:设计方案、电路分析、仿真结果、设计收获和体会、元件清单)
一、设计方案
本方案以ATC89C52单片机系统为核心,对多点的温度进行实时控制巡检。各检测单元(从机)能独立完成各自功能,根据主控机的指令对温度进行实时或定时采集,测量结果不仅能在本地储存、显示,而且可以利用单片机串行口,通过总线及通信协议将将采集的数据传送到主控机,进行进一步的分析、存档、处理。主控机负责控制指令发送,控制各个从机进行温度采集,收集测量数据,并对测量结果(包括历史数据)进行整理、显示和打印。主控机与各从机之间能够相互联系、相互协调,从而达到了系统整体统一和谐的控制效果。
uint8 rd_byte_ds18b20()
{
uint8 i=8,temp=0;
while(i--)
{
DQ=1;
DQ=0;
temp>>=1;
DQ=1;
if(DQ) temp|=0x80;
delay(6);
}
DQ=1;
return temp;
}
bit read_temperature(uint8 *p,uint8 *rom)
{
tempH++;
}
}
temp=(tempL>>4)|(tempH<<4);
*p++=temp/10;
*p++=(temp%10);
temp=tempL&0x0f;
*p=temp*5/8;
reset_ds18b20();
wr_byte_ds18b20(0xcc);
wr_byte_ds18b20(0x44);
二、电路分析
系统电路如下:
(1)控制器模块
本系统控制器芯片采用AT89S52单片机,其管脚图如图所示。
图3 AT89S52管脚图
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。AT89S52的主要特性是:与MCS-51单片机产品兼容;8K字节在系统可编程Flash存储器;1000次擦写周期;三级加密程序存储器;32个可编程I/O口线;三个16位定时器/计数器;8个中断源;全双工UAR串行通道;低功耗空闲和掉电模式;掉电后中断可唤醒;有看门狗定时器;双数据指针。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7},
{0x28,0x34,0xc5,0xb8,0x00,0x00,0x00,0x52},
{0x28,0x35,0xc5,0xb8,0x00,0x00,0x00,0x65},
{0x28,0x36,0xc5,0xb8,0x00,0x00,0x00,0x3c},
四、元器件清单
表1系统元器件清单
器件
数量
器件
数量
AT89S52
1
电阻(10k)
9
4段数码管
1
按键开关
1
1段数码管
1
电容(22pf)
2
排阻(1k)
1
电容(10uf)
1
DS18B20
8
晶振(12M)
1
五、设计收获和体会
通过此次专业技能测试设计,加强了我对专业知识的理解,对其应用有了一定的认识,提高了我们综合运用知识的能以及分析问题、解决问题的能力。此次数专业技能测试设计,让我懂得了实践的重要性。即使课本知识掌握的很好,如果不会综合运用,也是一些支离破碎的无用的知识,而如果能够运用而实际动手能力很差,理论与实践结合不起来,学得再好也没用。这次课程设计恰好是将课本知识与的巩固与综合运用结合来,再加上实际动手能力的培养三者结合起来的。一方面,它加深与巩固了所学的各章节的理论,并将其综合运用,提高了我们综合运用知识的能力;另一方面,培养了我们对专业知识学习的趣。
flag = DQ;
}
delay(40);
DQ=1;
}
void wr_byte_ds18b20(uint8 dat)
{
uint8 i=8;
while(i--)
{
DQ=1;
DQ=0;
if(dat&0x01)DQ=1;
else DQ=0;
delay(6);
dat>>=1;
}
DQ=1;
delay(1);
}
附录:程序清单
#include "ds18b20.h"
uint8 tempH,tempL;
void reset_ds18b20() //复位函数
{
bit flag=1;
while (flag)
{
DQ = 1;
DQ = 0;
delay(50); // 550us
DQ = 1;
delay(6); // 66us
}
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++timecount==20)
{
timecount=0;
timeflag=1;
}
if(++cyclecount==40)
{
cyclecount=0;
tempL=rd_byte_ds18b20();
tempH=rd_byte_ds18b20();
if((tempH&0xf8)!=0)//温度为负的处理
{
sflag=1;
tempL=~tempL;
tempH=~tempH;
temp1=tempL+1;
tempL=temp1;
if(temp1>255)
常用的复位电路如下图所示:
图4时钟复位显示电路图
(3)数码管显示模块
数码显示模块电路如图所示。温度显示部分使用的是4片7段数码管。单片机的P1.0~P1.7分别接数码管的A~G口,P2.0、P2.1 P2.2分别接数码管1、2、3、4接口,分别控制第一第二第三和第四片的暗亮。温度点显示部分用的是1片7段数码管,接单片机的P0口,再外加上拉电阻加强驱动能力,使数码管更亮。
{
case 0:P20=0;P21=1;P22=1;P23=1;P0=disp[temp[0]]; break;
case 1:P20=1;P21=0;P22=1;P23=1;P0=disp[temp[1]]|0x80;break;
case 2:P20=1;P21=1;P22=0;P23=1;P0=disp[temp[2]]; break;
三、仿真结果
本系统程序包括主程序、时钟复位子程序、数码管显示子程序、温度检测子程序等。主程序用于系统初始化,子程序调度等。复位子程序用来使计数恢复初始状态,数码管显示子程序用来显示温度和温度点,温度检测子程序用来检测对哪一点的温度值。
在温度点1的软件仿真图
在温度点2的软件仿真图
case 3:P20=1;P21=1;P22=1;P23=0;
if(Nflag==1)P0=disp[10];else P0=0x00;break;
default:break;
}
P1=disp[num+1];
delay(20);
if(++i>3)i=0;
}
void main()
{
IE=0x8b;
TMOD=0x11;
return sflag;
}
#include "main.h"
#include "ds18b20.h"
bit timeflag=0;
uint8 timecount=0,cyclecount=0;
uint8 code disp[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40};
电路设计过程及参数确定比较烦琐,我在算时会遇到很多问题,有时实在算不出来了就想放弃,但很快自己会意识到那是一种错误的想法,所以自己会给自己鼓劲继续往下进行,当算到最后时便会有很大的成就感,这强烈的激起了我学习的兴趣,我想这次课程设计对我以后的专业课程学习将有很大帮助。
这里,我首先要感谢我的指导老师,他细心地帮我解决了一系列问题,帮助我成功地完成了这次实验设计。其次,我还要感谢我的同学们,帮助我更好地完成设计了此次课程设计。
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
TH1=(65536-8000)/256;
TL1=(65536-8000)%256;
TR1=1;
IT0=1;
while(1)
{
if(timeflag)
{
timeflag=0;
Nflag=read_temperature(temp,rom[num]);
num++;
if(num>7)
图5温度显示电路图
图6温度点显示电路图
(4)温度检测模块
本系统采用的是单片机基于数字温度传感器DS18B20的系统。,对于温度信号的采集具有大范围、高精度的特点。DS18B20利用单总线的特点可以方便的实现多点温度的测量,轻松的组建传感器网络,系统的抗干扰性好、设计灵活、方便,而且适合于在恶劣的环境下进行现场温度测量。采用数字温度芯片DS18B20测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。DS18B20的最大特点之一采用了单总线的数据传输,节约了单片机有限的I/O资源,由数字温度计DS1820和微控制器AT89C51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。通过数码管能够实时显示8路温度,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
(2)时钟复位模块
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,52芯片便循环复位。复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的000H处开始运行程序。复位是外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。当时钟频率选用12MHz时,C1,C2取22pF,R1为10kΩ,C3为10uf。复位操作不会对内部RAM有所影响。
{
uint8 temp;
uint16 temp1;
uint8 i=8;
bit sflag=0;//负数标志位
reset_ds18b20();
wr_byte_ds18b20(0x55)0(*rom++);
}
wr_byte_ds18b20(0xbe);
uint8 temp[3];
uint8 num=0;
uint8 rom[][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e}, //8个ds18b20的rom
{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},
{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},
{0x28,0x37,0xc5,0xb8,0x00,0x00,0x00,0x0b}};
bit Nflag;
void delay(uint16del)
{
while(del--);
}
void display(uint8 *temp)
{
uint8 i;
P20=1;P21=1;P22=1;P23=1;
switch(i)
赣南师院
物理与电子信息学院
专业技能测试设计报告书
姓名:赖新
班级:电子信息工程09级
学号:090802016
指导老师:刘小燕
时间:2011年12月21日
论文题目
8路温度巡检系统
课程论文
要求
1、设某粮库有8个粮仓,粮仓的温度变化范围为-30℃~+50℃。
2、设计一个系统对这8个粮仓的温度进行巡回检测并显示,每路显示2
秒。
3、要求温度的检测精度为±0.1℃。用Proteus仿真。不用做出实物。
设计过程
(包括:设计方案、电路分析、仿真结果、设计收获和体会、元件清单)
一、设计方案
本方案以ATC89C52单片机系统为核心,对多点的温度进行实时控制巡检。各检测单元(从机)能独立完成各自功能,根据主控机的指令对温度进行实时或定时采集,测量结果不仅能在本地储存、显示,而且可以利用单片机串行口,通过总线及通信协议将将采集的数据传送到主控机,进行进一步的分析、存档、处理。主控机负责控制指令发送,控制各个从机进行温度采集,收集测量数据,并对测量结果(包括历史数据)进行整理、显示和打印。主控机与各从机之间能够相互联系、相互协调,从而达到了系统整体统一和谐的控制效果。
uint8 rd_byte_ds18b20()
{
uint8 i=8,temp=0;
while(i--)
{
DQ=1;
DQ=0;
temp>>=1;
DQ=1;
if(DQ) temp|=0x80;
delay(6);
}
DQ=1;
return temp;
}
bit read_temperature(uint8 *p,uint8 *rom)
{
tempH++;
}
}
temp=(tempL>>4)|(tempH<<4);
*p++=temp/10;
*p++=(temp%10);
temp=tempL&0x0f;
*p=temp*5/8;
reset_ds18b20();
wr_byte_ds18b20(0xcc);
wr_byte_ds18b20(0x44);
二、电路分析
系统电路如下:
(1)控制器模块
本系统控制器芯片采用AT89S52单片机,其管脚图如图所示。
图3 AT89S52管脚图
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。AT89S52的主要特性是:与MCS-51单片机产品兼容;8K字节在系统可编程Flash存储器;1000次擦写周期;三级加密程序存储器;32个可编程I/O口线;三个16位定时器/计数器;8个中断源;全双工UAR串行通道;低功耗空闲和掉电模式;掉电后中断可唤醒;有看门狗定时器;双数据指针。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7},
{0x28,0x34,0xc5,0xb8,0x00,0x00,0x00,0x52},
{0x28,0x35,0xc5,0xb8,0x00,0x00,0x00,0x65},
{0x28,0x36,0xc5,0xb8,0x00,0x00,0x00,0x3c},
四、元器件清单
表1系统元器件清单
器件
数量
器件
数量
AT89S52
1
电阻(10k)
9
4段数码管
1
按键开关
1
1段数码管
1
电容(22pf)
2
排阻(1k)
1
电容(10uf)
1
DS18B20
8
晶振(12M)
1
五、设计收获和体会
通过此次专业技能测试设计,加强了我对专业知识的理解,对其应用有了一定的认识,提高了我们综合运用知识的能以及分析问题、解决问题的能力。此次数专业技能测试设计,让我懂得了实践的重要性。即使课本知识掌握的很好,如果不会综合运用,也是一些支离破碎的无用的知识,而如果能够运用而实际动手能力很差,理论与实践结合不起来,学得再好也没用。这次课程设计恰好是将课本知识与的巩固与综合运用结合来,再加上实际动手能力的培养三者结合起来的。一方面,它加深与巩固了所学的各章节的理论,并将其综合运用,提高了我们综合运用知识的能力;另一方面,培养了我们对专业知识学习的趣。
flag = DQ;
}
delay(40);
DQ=1;
}
void wr_byte_ds18b20(uint8 dat)
{
uint8 i=8;
while(i--)
{
DQ=1;
DQ=0;
if(dat&0x01)DQ=1;
else DQ=0;
delay(6);
dat>>=1;
}
DQ=1;
delay(1);
}
附录:程序清单
#include "ds18b20.h"
uint8 tempH,tempL;
void reset_ds18b20() //复位函数
{
bit flag=1;
while (flag)
{
DQ = 1;
DQ = 0;
delay(50); // 550us
DQ = 1;
delay(6); // 66us
}
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++timecount==20)
{
timecount=0;
timeflag=1;
}
if(++cyclecount==40)
{
cyclecount=0;
tempL=rd_byte_ds18b20();
tempH=rd_byte_ds18b20();
if((tempH&0xf8)!=0)//温度为负的处理
{
sflag=1;
tempL=~tempL;
tempH=~tempH;
temp1=tempL+1;
tempL=temp1;
if(temp1>255)
常用的复位电路如下图所示:
图4时钟复位显示电路图
(3)数码管显示模块
数码显示模块电路如图所示。温度显示部分使用的是4片7段数码管。单片机的P1.0~P1.7分别接数码管的A~G口,P2.0、P2.1 P2.2分别接数码管1、2、3、4接口,分别控制第一第二第三和第四片的暗亮。温度点显示部分用的是1片7段数码管,接单片机的P0口,再外加上拉电阻加强驱动能力,使数码管更亮。
{
case 0:P20=0;P21=1;P22=1;P23=1;P0=disp[temp[0]]; break;
case 1:P20=1;P21=0;P22=1;P23=1;P0=disp[temp[1]]|0x80;break;
case 2:P20=1;P21=1;P22=0;P23=1;P0=disp[temp[2]]; break;