温度检测系统设计报告(DOC)

温度检测系统设计报告(DOC)
温度检测系统设计报告(DOC)

计算机硬件(嵌入式)综合实践

设计报告

温度检测系统设计与制作

一.系统概述

1. 设计内容

本设计主要从硬件和软件部分介绍了单片机温度控制系统的设计思路,简单说明如何实现对温度的控制,并对硬件原理图和程序框图作了简洁的描述。还介绍了在单片机控制系统的软硬件设计中的一些主要技术关键环节,该系统主要以AT89S52单片机为核心, 同时利用DS18B20温度传感器采集温度,采用4位LED 显示管实施信息显示。

AT89S52单片机设计的温度检测电路是本次设计的主要内容,是整个单片机温度控制系统设计中不可缺少的一部分,该系统对温度进行实时采集与检测。本设计介绍的单片机自动控制系统的主要内容包括:系统概述、元器件选择、系统理论分析、硬件设计、部分软件设计及主要技术性能参数。

2. 元器件选择

单片机AT89S52:1个

22uF电容:2个

4.7K电阻:1个

万能板:1个

杜邦线:若干

单排排针:若干

DS18B20温度传感器:2个

4位LED 显示管:1个

二. 软件功能设计及程序代码

1.总体系统设计思想框图如下:

单片机应用

软件调试软件编程系统测试和调试系统集成

硬件调试

选择单片机芯片

定义系统性能指标

硬件设计

2.主程序流程图

3.DS18B20数据采集流程图

4.程序代码

①、温度记录仪

#include

#include

#include

#include

#include<18B20.h>

#include

bit rec_flag=0;//记录温度标志

uchar autobac_tim=0;//自动跳转延时

uchar code logos[]="****NT MUSIC****"; uchar incmin=0;//计分钟数

bit overflag=0;//数据溢出标志位

uchar mode=1;//系统运行模式

uchar tempmode;//模式缓存

void init()

{

lcd_init();

eeprom_init();

/***********开机效果****************/ display(l1," Starting NT",1);

longdelay(10);

display(l2," Ver 3.0.1",1);

longdelay(20);

write_cmd(0x01);//清屏

/*************************************/ sys_init();

}

void comms() //模式公共进程

{

time2times(); //时间格式转换

avtemp=gettemp();//获取温度

avtemp2avtemps();//温度格式转换

date_counter();//获取当前日期

date2dates();//日期格式转换

display(l2+1,times,0);

display(l2+11,avtemps,0);

}

void progs(uint i,uint k)//进度条

{

uint j;

write_cmd(0xc0);

for(j=0;j<(i*16/k);j++)

{

write_lcddata(0xff);

}

}

void normal_run() //无记录运行模式

{

comms();

if(time[2]%10<5)

{

display(l1,logos,1);

}

else

{display(l1,"***",0);display(l1+13,"***",0);display(l1+3,dates,0);}

incmin=0;

}

void recding_run() //记录模式运行模式

{

uint WDTPT;//临时写地址指针变量存放

comms();

recfrq2recfrqs();

if(time[2]%10<5)

{

if(mss>50) display(l1," ",0);

else

display(l1,"R",0);

display(l1+1,"-NUM",0);

display(l1+5,datcounts,0);display(l1+9,"**EV",0);display(l1+13,recfrqs,0);

}

else

{display(l1,"***",0);display(l1+13,"***",0);display(l1+3,dates,0);} /***********定时记录*************/

if(incmin>=recfrq)//触发记录功能

{

incmin=0;//1清除进入记录标志

if(WDTP>10240) //20个扇区

overflag=1;

if(overflag==0)//如果数据尚未溢出

{

if(date_recf==1)

//记录年-月-日(格式:'z'+年+月+日)为十制数值

{

date_recf=0;//清除记录日期标志

write_isp(WDTP,'z');//日期起始标志

write_isp(WDTP,date[0]);

write_isp(WDTP,date[1]);

write_isp(WDTP,date[2]);//记录年、月、日

}

/***********记录时间************/

write_isp(WDTP,time[0]);

write_isp(WDTP,time[1]);//记录时分

/***********记录温度************/

write_isp(WDTP,avtemp/100);

write_isp(WDTP,avtemp%100);

/**********记录加一*********/

datcount++;

/**********写回数据指针****************/

WDTPT=WDTP;

if(FDTP==512)

{

del_isp(0);//清空记录表

FDTP=0;

}

write_isp(FDTP,WDTPT/256);

write_isp(WDTP,WDTPT%256);

write_isp(WDTP,datcount/256);

write_isp(WDTP,datcount%256);

FDTP=WDTP;

WDTP=WDTPT;

//交互完成

}

if(overflag==1)//如果数据溢出

{

display(l1,"Error!",1);

display(l2,"Data Overflow!",1);

autobac_tim=0;

while(autobac_tim!=3);

display(l2," ",1);

}

}

}

void data_run() //查看记录模式

{

uchar i=0;

bit bacf=0;

uint cou_t=0;//计数缓存变量

uchar temp=0;//临时数据缓存

uint cd=0;//进度条统计数据

autobac_tim=0;

while(bacf==0)

{

if(autobac_tim>10)

bacf=1;

display(l1,"Ready for Export",1);

display(l2,"D-Date T-Temp L!",1);

if(RI==1)

{

autobac_tim=0;

RI=0;

ser_rec=SBUF;

switch(ser_rec)

{

case 'L': //格式化

display(l1,"Format?",1);

display(l2," Y-Yes N-No",1);

while(1)

{

if(RI==1) {RI=0;ser_rec=SBUF;autobac_tim=0;}

if(ser_rec=='Y')//确定格式化

{

display(l1,"Formatting...",1);

display(l2," ",1);

eeprom_format();

display(l1,"Format Successed",1);

longdelay(3);

break;

}

if(ser_rec=='N') break;

if(autobac_tim>10)

break;

}

autobac_tim=0;

break;

case 'D'://输出日期时间

display(l1,"Exporting Date..",1);

display(l2," ",1);

RDTP=512;//将读指针放到首位

cou_t=datcount;

cd=0;

while(cou_t!=0)

{

if(RI==1) RI=0;

if(SBUF=='B')

{

display(l1,"Export stopped",1);

cd=0;

longdelay(3);

break;

}

temp=read_isp(RDTP);// 预读判断

RDTP--;

if(temp=='z')

{

RDTP++;

prf_date();//输出年月日

}

prf_time(); //输出时间

RDTP=RDTP+2;

cou_t--;

cd++;

progs(cd,datcount);

}

if(datcount==0)

{display(l1,"No Data!",1);

longdelay(3);}

autobac_tim=0;

break;

case 'T'://温度输出

display(l1,"Exporting Temp..",1);

相关主题
相关文档
最新文档