温度采集显示系统课程设计.docx
《温度采集显示系统课程设计.docx》由会员分享,可在线阅读,更多相关《温度采集显示系统课程设计.docx(15页珍藏版)》请在冰点文库上搜索。
![温度采集显示系统课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-7/3/200853a6-c172-4957-96cd-504e09bed4c7/200853a6-c172-4957-96cd-504e09bed4c71.gif)
温度采集显示系统课程设计
1引言
在实际生产、生活等各个领域中,温度是环境因素的不可或缺的一部分,对温度进行及时精确的控制和检测显得尤为重要。
比如消防电气的非破坏性温度检测,电力、电讯设备的过热故障预知检测,空调系统的温度检测,在医院的监护中也用到温度的测量,化工、机械等设备温度过热检测,土壤各个层面上的温度将会影响植物的生长,以及热处理中工件各个部位的温度对工件形成后的性能至关重要等等。
总之,现代电子工业的飞速发展对温度检测的智能化精确度要求越来越高。
目前,国内外温度控制系统及仪表正朝着高精度、智能化、小型化等方面快速发展。
本课题设计的系统符合当代科学发展的趋势,能够满足现代生产生活的需要,其测温效率高,具有较强的稳定性和灵活性。
方便快捷的实现了多路温度采集并显示,该系统用液晶显示器节省了空间且显示效果好,报警电路同时包含了蜂鸣器和提示灯,能更好的引起操作者的警觉,在实际生产中能够降低由于温度超过额定范围引发的事故,有良好的实用性,在国内外都具备良好的应用前景。
2温度采集显示系统总体方案设计
2.1确定设计过程
在熟悉课题,明确任务的基础上,查阅相关资料,理清设计思路,综合考虑总的设计时间和各部分设计所需时间,最终决定将本次设计分五大步进行。
1.熟悉课题,明确任务,查阅相关资料,确定总体设计方案;
2.根据各部分的功能划分功能模块,确定每一模块的硬件组成,合理选取具有相应功能的器件;
3.进行硬件设计,把各器件组成相应功能的模块,并把各功能模块进行电气连接,形成总的功能系统;
4.进行软件设计,编写程序,实现各模块功能,使整个系统能够良好的运行;
5.进行仿真调试,检查各模块功能能否完全实现,综合考虑系统的灵活性、稳定性、误差大小及测温效率调整各器件的各项参数。
使系统的处在最佳性能状态。
2.2温度采集显示系统方案论证
2.2.1单片机的选取
在温度采集和控制过程中,单片机是该系统的核心部件。
它一方面要接收来自温度传感器的模拟信号,一方面要对这个信号进行处理、标度变换和显示,另一方面要响应串行通信中的呼叫请求。
在单片机所实现的这些功能中,特别是数据采样和保持部分,需要单片机有比较快的运算速度,同时考虑选择机型的低价实用性和低功耗、低电压等性能,本设计采用Atmel公司的AT89C51芯片。
2.2.2温度传感器的选取
温度传感器是测控系统前向通道的关键部件,它也称换能器和变换器,一般是指非电物理量与电量的转换,即传感器是将被测的非电量(如压力、温度等)转换成与之对应的电量或电参量(如电流、电压、电阻等)输出的一种装置。
社会的发展使人们对传感器的要求也越来越高,现在的温度传感器正在基于单片机的基础上从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展,并朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。
如果测量目的是定性分析的,选用重复精度高的传感器即可,不宜选用绝对量值精度高的;如果是为了定量分析,必须获得精确的测量值,就需选用精度等级能满足要求的传感器。
对某些特殊使用场合,无法选到合适的传感器,则需自行设计制造传感器。
自制传感器的性能应满足使用要求。
显而易见,数字式温度传感器在本设计中的应用优点突出,综合考虑以上选取注意事项,本设计采用DS18B20单总线数字式温度传感器对温度信号进行采集。
2.2.3显示器的选取
显示系统是单片机控制系统的重要组成部分,主要用于显示各种参数的值,以便使现场工作人员能够及时掌握生产过程。
工业控制系统中常用的显示器件有CRT、LED、LCD等,CRT不仅可以进行字符显示,而且可以进行画面显示,和计算机配合使用,可十分方便地实现生产过程的管理和监视,但由于CRT体积大,价格昂贵,所以只适用于大型微机控制系统。
在中小型的控制过程中,为了使工作人员能够在现场直接看到生产情况和报警信号,经常选用LED和LCD作为显示器件。
LED和LCD都具有体积小,功耗低,响应速度快,易于匹配,可靠性高和寿命高等优点。
LCD是一种功耗极低的显示元件,在仪表和低功耗应用系统中的使用较多,而LED成本低廉,也用于单片机控制系统中。
设计要求巡回采集温度,所以采用LED作为显示系统。
从曲线中还可以看出,电池充满后,镍镉电池的电压下降幅度要比镍氢电池的大很多,镍氢电池的电压下降(负压)不是很明显。
3硬件电路设计
3.1电路总体框架
本设计的电路主要分为采集电路、单片机、显示电路。
其主要组成部分如下图所示。
图3.1硬件电路框图
3.2控制芯片AT89C2051简介
AT89C51是美国ATMEL公司生产的低电压、高性能CMOS8位单片,内含4Kbytes的可反复擦写的只读程序存储器(EPROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域,该芯片外形结构及引脚如图3.1所示。
AT89C51单片机主要性能参数为:
与MCS-51产品指令系统完全兼容;4K字节可重擦写Flash闪速存储器;1000次擦写周期;全静态操作:
0Hz—24Hz;三级加密程序存储器;128×8字节内部RAM;32个可编程I/O口线;2个16位定时/计数器;6个中断源;可编程串行UART通道;低功耗空闲和掉电模式[8]。
AT89C51提供4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。
图3.2AT89C51引脚图
3.3主程序流程图
图3.3主程序流程图
3.3.1主程序代码设计
#include//包含头文件,头文件包含特殊功能寄存器的定义
#include
#include
#defineucharunsignedchar
#defineuintunsignedint;
/******************************************************************/
/*定义端口*/
/******************************************************************/
sbitDQ0=P2^0;//ds18b20端口1
sbitDQ1=P2^1;//ds18b20端口2
sbitDQ2=P2^2;//ds18b20端口3
sbitDQ3=P2^3;//ds18b20端口4
sbitDQ4=P2^4;//ds18b20端口5
sbitDQ5=P2^5;//ds18b20端口6
sbitDQ6=P2^6;//ds18b20端口7
sbitDQ7=P2^7;//ds18b20端口8
/******************************************************************/
/*全局变量*/
/******************************************************************/
Uintch=0,ms=0;
uinttemp;
ucharflag_get,count,num,minute,second;
ucharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
uchardu[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
ucharmenu=0;
//ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//7段数码管段码表共阳
ucharstr[8];
/******************************************************************/
/*主函数*/
/******************************************************************/
main()
{
intij;
unsignedcharTempH,TempL;
P0=0xff;
while
(1)
{
P1=0xff;
switch(ch)
case0:
temp=ReadTemperature0();break;
case1:
temp=ReadTemperature1();break;
case2:
temp=ReadTemperature2();break;
case3:
temp=ReadTemperature3();break;
case4:
temp=ReadTemperature4();break;
case5:
temp=ReadTemperature5();break;
case6:
temp=ReadTemperature6();break;
case7:
temp=ReadTemperature7();break;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理
str[0]=0xc6;//显示C符号
str[7]=0xc6;//显示C
str[6]=0x85;//显示H
str[5]=tab[ch];//显示通道
str[4]=bf;//显示-
str[3]=tab[(TempH%100)/10];//十位温度
str[2]=tab[(TempH%100)%10]&0x7f;//个位温度,带小数点
str[1]=tab[TempL];//显示格式CHx-XX.XC
for(i=0;i<8;i++)
{
P1=0xff;
P0=str[i];
P1=du[i];
delay(50);
}
}
}
voiditc_timer()interrupt1//控制定时时间为1s
{
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
ms++;
if(ms==5)
{
ch++;
ms=0;
if(ch==8)ch=0;
}//5S换通道
}
总结
通过此次课程设计,我学到了很多很多新的知识,同时,也加深了对旧知识的了解和认知。
不管是从动手能力还是理论学习上讲,这次课程设计都让我有了一定的提高。
首先是对单片机芯片AT89S52的学习,之前我们学的89C51系列的,前者对于后者来讲,比较先进和高级,而且更加贴近于我们的生活。
鉴于自己对AT89S52的一点认识也没有,所以一切只能从头开始学起,从到图书馆找资料到网上查找,从一个人奋战到找同学帮助,一点一滴地,从无到有,在不断的努力之下,我终于也了解到一点点AT89S52单片机芯片的工作原理和功能了
接着便是DS18B20温度传感器的学习,AT89S52单片机芯片还可以从89C53系列找相似之处,但DS18B20就完全没有了,不过,还好,现代DS18B20的应用技术也比较普遍和熟练,所以能找得到比较多的资料区了解和学习。
一门比较成熟的技术要掌握起来是比较容易的,只要你有耐心和恒心去学习。
最困难的还不是制作感光板,而是程序的编写。
本来在上一学年中,自己对汇编就学得不怎样好的了,现在到了真真正正地使用到它的时候,就更加感觉到力不从心了,不过,办法总是比困难多的。
虽然使用汇编语言对于我来讲是困难了点,但是我可以选择用C语言来编写程序。
终于,在自己的坚持不懈之下,一段段程序终于从我手中完成了,更让我觉得高兴的是,在调试的过程中,虽然也有很多问题,但是都能比较顺利地解决了。
最后,是此次课程设计的不足之处。
最最明显的就是没有仿真数据,对于课程设计来讲,没有仿真数据的前提下制作实物其实是一个挺冒险的行为。
其次,便是此次课程设计的功能较单一,而且是用单片机芯片做的,没能做到创新。
希望自己在以后的学习中,要注意培养自己创新这一方面的能力。
参考文献
[1]单片微型计算机与接口技术,李群芳、黄建编著,电子工业出版社;
[2]单片机原理及应用,张毅刚编著,高等教育出版社;
[3]51系列单片机及C51程序设计,王建校,杨建国等编著,科学出版社;
[4]单片机原理及接口技术,李朝青编著,北京航空航天大学出版社;
[5]基于AT89C2051单片机的智能充电器设计,刘美俊,电子质量;
[6]单片机微型计算机及其应用,孙育才,东南大学出版社,;
[7]单片机接口电路与应用称序实例,沈德金,北京航天航空大学出版社;
[8]单片机基础,李广弟,北京航空航天大学出版杜;
附录1系统电路图
显示系统电路图
采集系统和单片机
附录2主要源代码
voiddelay(ucharz)
{
ucharx,y;
for(x=10;x>0;x--)
for(y=z;y>0;y--);
}
voidinit_timer()
{
TMOD=0x01;
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ0=1;//DQ0复位
delay(8);//稍做延时
DQ0=0;//单片机将DQ0拉低
DQ0=1;//拉高总线
delay(10);
x=DQ0;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(5);
}
/******************************************************************/
/*读一个字节*/
/******************************************************************/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ0=0;//给脉冲信号
dat>>=1;
DQ0=1;//给脉冲信号
if(DQ0)
dat|=0x80;
delay(5);
}
return(dat);
}
/******************************************************************/
/*写一个字节*/
/******************************************************************/
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ0=0;
DQ0=dat&0x01;
delay(5);
DQ0=1;
dat>>=1;
}
delay(5);
}
/******************************************************************/
/*读取温度*/
/******************************************************************/
unsignedintReadTemperature0(void)
{
unsignedchara=0;
unsignedintb=0;
unsignedintt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
delay(200);
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();//低位
b=ReadOneChar();//高位
b<<=8;
t=a+b;
return(t);
}