IO接口温度控制器报告Word格式文档下载.docx

上传人:b****1 文档编号:233159 上传时间:2023-04-28 格式:DOCX 页数:30 大小:674.33KB
下载 相关 举报
IO接口温度控制器报告Word格式文档下载.docx_第1页
第1页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第2页
第2页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第3页
第3页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第4页
第4页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第5页
第5页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第6页
第6页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第7页
第7页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第8页
第8页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第9页
第9页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第10页
第10页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第11页
第11页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第12页
第12页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第13页
第13页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第14页
第14页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第15页
第15页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第16页
第16页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第17页
第17页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第18页
第18页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第19页
第19页 / 共30页
IO接口温度控制器报告Word格式文档下载.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

IO接口温度控制器报告Word格式文档下载.docx

《IO接口温度控制器报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《IO接口温度控制器报告Word格式文档下载.docx(30页珍藏版)》请在冰点文库上搜索。

IO接口温度控制器报告Word格式文档下载.docx

温度探测器

DS18B20

锁存器

74LS373

数码显示器

7SEG-MPX8-CC-BLUE

4*4键盘

KEYPAD-SMALLCALC

1、单片机

  单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

作为嵌入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。

51系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51系列单片机的发展又进入了一个新的阶段。

在今后很长一段时间内51系列单片机仍将占据嵌入式系统产品的中低端市场。

2、显示屏

五、总体方案的确定

在温度采集方面,在设计开始时就准备了两种方案:

一种是采用热敏电阻式传感器和ADC0809转换器进行数据采集。

具体方案如下:

温度传感器的模拟信号转换为数字信号后由P0口输入。

ADC0809由P3.0启动转换,由P3.1控制输出。

信号传输采用无条件输入方式,启动A/D转换后延时100微妙从P0口采集数据。

时间延迟由T0实现。

另一种是采用单线数字温度传感器DS18B20进行数据采集。

DSB18B20S数字温度计提供9到12位温度读数,指示器件的温度信息经过单线接口送入DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线和地,读写和完成温度变换所需的电源可以由数据线本身提供,甚至不需要外部电源。

而总体方案和系统电路图方面基本上和热敏式传感器相同,只在数据采集方面有所差别。

根据选择传感器的原则,考虑到模拟量输出传感器会带来许多不便,具体体现在接线多、信号处理复杂等,在硬件实现方面比较困难。

而且热敏电阻式温度传感器互换性差,非线性严重。

而数字温度传感器DS18B20接线简单,数字输出量能直接作为单片机的输入数据,同时考虑到只是在普通环境下测量,无论在灵敏度、线性范围、稳定性,还是在精度方面,DS18B20的强大功能已足够满足设计需要。

在本次设计中,温度数据采集用到的传感器是DS18B20。

具体电路图如图1所示。

图1数字传感器式温度控制器

六、系统电路总体设计

1、系统工作原理

该温度控制系统用到89C51单片机作为系统的CPU进行控制控制,由数字传感器DS18B20进行数据采集,89C51对采集到的数据进行处理,得到各种信号。

而这些信号将作为LED数码管显示的信号输入,同时将利用单片机的其它使能端口实现键盘的控制作用。

2、硬件系统设计

系统的硬件部分主要可分为温度采集电路,信号处理与控制控制,温度显示电路,键盘控制电路四大部分。

(1)温度采集电路

本系统中采集温度使用的是DS18B20数字温度传感器。

DS18B20是Dallas半导体公司生产的世界上第一片支持“一线总线”接口的温度传感器。

与之前的传感器相比,DS18B20体积更小、适用电压更宽、更经济。

一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。

DS18B20“一线总线”数字化温度传感器支持“一线总线”接口,测量温度范围为-55℃到+125℃,在-10到+85℃范围内,精度为±

0.5℃。

现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。

适合于恶劣环境的现场温度测量,如:

环境控制、设备或过程控制、测温类消费电子产品等。

与前一代产品不同,新的产品支持3V到5.5V的电压范围,使系统设计更灵活、方便。

而且新一代产品更便宜,体积更小。

DS18B20可以程序设定9到12位的分辨率,精度为±

当分辨率为12位时,转换时间为750ms。

使得用户可选择更小的封装方式,更宽的电压适用范围和分辨率设定,同时用户设定的报警温度存储在EEPROM中,掉电后依然保存。

DS18B20一般为三极管型封装,包括温度传感器、64位激光ROM单线单口、存放中间数据的高速暂存器、用于存储用户设定的温度上下限值、触发器存储与控制逻辑、8位循环冗余校验码发生器等。

其引脚图如图2所示。

这三个引脚分别为:

GND——电源地;

QD——数字信号输入/输出端;

VDD——外接供电电源(可选5V)。

图2DS18B20引脚图

在单片机89C51中,输入/输出端口分别P0、P1、P2、P3。

其中P3是一个带内部上拉电阻的8位双向I/O端口。

P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。

对端口写1时,通过内部的上拉电阻吧端口拉到高电位,这时可用作输入口。

P3作输入口使用时,因为有内部的上拉电阻,那些被电阻拉低的引脚会输出一个电流。

在该系统中,DS18B20的数字信号输入/输出端连接到89C51的P3.7中,作为89C51的数据输入。

(2)信号处理与控制电路

信号处理与控制采用51单片机基本电路。

此电路以51单片机为核心,51的具体引脚图如图3。

在该系统中,要使单片机实现信号处理与控制,则要使单片机的18、19脚(XTAL2、XTAL1)接12MHz的晶振和两个电容,组成片内振荡电路,为单片机提供时钟脉冲。

9脚(RST)接按键复位电路,提供复位信号给单片机。

图389C51引脚图

89C51芯片内部有一个高增益反相放大器,用于构成振荡器。

反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。

两个电容通常取30pF左右,稳定频率并对震荡频率有微调作用。

如图4所示。

图4晶振电路

手动复位是通过接通一按钮开关,使单片机进入复位状态。

系统上电运行后,若需要复位,则通过手动复位来实现的。

如图5所示。

图5手动复位电路

(3)温度显示电路

本系统中,温度显示硬件由74HC373和八位LED数码管构成。

1.八位LED数码管

八位数码管引脚图如图6所示。

它的1、2、3、4、5、6、7、8脚为位选脚,分别对应从左到右八个数码管,输入低电平选通。

剩下的其他引脚为数据输入脚,此电路中数码管的8个数据引脚(a、b、c、d、e、f、g、dp)。

图6LED数码管引脚图

2、74HC373

373为三态输出的八口透明锁存器,共有74HC373和74LS373两种线路结构形式。

在本系统中,采用74HC373,因为在PROTUES仿真里,用74LS373会被报错。

74HC373的D0-D7脚分别与单片机的P0.0-P0.7脚相连。

74HC373引脚图如图7所示:

图774HC373引脚图

(4)键盘控制电路

键盘控制电路的作用是通过按键回放温度和记录时间参数。

当所设置的功能键或数字键按下时,单片机系统应该完成该按键所设定的功能,因此,键的输入信息是与软件结构密切相关的。

在本系统中采用4*4的键盘,键盘的列线与P1口的低4位相连,行线与P1口的高4位相连。

键盘控制电路如图8所示:

图8键盘控制电路

3、系统程序设计

(1)主程序模块(如图9所示)。

图9主程序流程图

(2)DS18B20的工作流程如图10所示。

图11DS18B20的工作流程

(3)温度显示流程图如图11所示。

图11温度显示流程图

(4)键盘控制电路流程图如图12所示

图12键盘控制电路流程图

完整的程序请详见附录。

七、系统的调试

1、程序调试过程中遇到的问题和解决办法

1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器

采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。

2)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要

等待DS1820的返回信号,一旦DS1820连线未接好,当程序读该DS1820时,将没有返回信号,程序进入死循环。

这一点在进行DS1820软件设计时也要给予一定的重视。

3)编程时要注意,在程序开始时,要写入各定时器中断的入口地址。

4)编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,

不便于查找或更改。

5)程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加

清晰化。

6)编程前要加流程图,这样会使思路清晰。

2、调试结果

(1)温度显示结果

DS1820采集温度数据并转换成BCD码在8位LED上显示,结果如图13所示:

图13温度显示结果

(2)键盘控制显示结果

通过键盘回放温度和记录时间参数,结果如图13所示:

图13键盘控制显示结果

八、实验总结

这次的课程设计,我觉得我学到了很多的东西,受益匪浅。

首先我了解了proteus软件的基本使用方法,以及利用这个软件用来仿真,对于电路的设计有了一定的理解,懂得了如何利用C语言联系实际来进行编程,同时在编程的过程中,了解一些管脚的使用方法,以及在C语言中使用的代码和一些器件的初始化方法,同时也让我明白了自己的一些不足,认识到仅仅把书本上的知识学好是远远不够的,需要拓宽自己的知识面,来应付未来的挑战。

当然在本次课程设计中,我遇到了很多没有遇到过的困难,于是图书馆和INTERNET成了我们很好的助手。

在查阅资料的过程中,我们要判断优劣、取舍相关知识,不知不觉中我们查阅资料的能力也得到了很好的锻炼。

我们学习的知识是有限的,在以后的工作中我们肯定会遇到许多未知的领域,这方面的能力便会使我们受益非浅。

而且在设计过程中,总是遇到这样或那样的问题。

有时发现一个问题的时候,需要做大量的工作来进行调试,然后才能解决。

自然而然,我分析问题解决问题的能力得到了增强。

为以后的工作积累了经验,增强了信心。

通过这次的软件设计,我熟悉了单片机开发的每个步骤,它不但检查了我的整个知识面的掌握程度,知道了自己的不足,让我更加牢固的掌握了单片机方面的相关知识!

这次的软件设计也让我学会了在遇到问题时,如何冷静的思考问题以及解决问题!

更让我懂得了学习贵在坚持。

我学到了更多以前没有学到过的知识。

在这里,我很感谢指导老师和同学给我的帮助,使我能顺利完成我的软件设计。

总之通过本次设计,让我很好的锻炼了理论联系实际,如何把理论应用于实际,又如何实践中遇到的问题怎样用理论去解决。

感谢学校给我们大家这样一次课程设计的机会,为我们以后的工作打下了坚实的基础。

附录参考文献

雷晓平,李晓东,罗海天.2006.单片机原理及应用.机械工业出版社

于珍珠,赵娜,赵刚等.2007.基于51单片机的温度测量系统.单片机开发与应用.23(1-2):

146-148

齐建家,胡天明.2008.基于DS18B20的数字温度设计及其应用.黑龙江工程学院学报.22

(2):

59-62

罗平,陶冶.袁永超.2007.基于DS18B20的温度测量系统.农机化研究.(10):

161-164

曹柏荣.2003.单片机原理及其应用技术.上海:

原子能出版社

曹海平.2008.基于单片机和DS18B20的分布式多点温度检测系统的设计.自动化技术与应用.27(11):

90-93

魏英智.2005.DS18B20在温度控制中的应用.煤矿机械.(3):

92-93

魏泽鼎.2005.单片机应用技术与实例.北京:

电子工业出版社

附录程序清单

#include<

AT89X51.H>

ABSACC.H>

STDIO.H>

MATH.H>

FLOAT.H>

typedefunsignedcharuchar;

typedefunsignedintuint;

typedefsignedcharschar;

typedefsignedintsint;

#defineDQP3_7//温度检测P3.7

#defineKEY_SET14//on/c

#defineKEY_COMFIRM15//=

externvoidDelayXms(uintxms);

externucharKeyScan();

ucharcodedis_code[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

//0-9、负号,共阴极数码管

uinttimecnt=0,step=1,stepcnt=0;

uchartemptable[11],position=0;

schartemp=0;

//延时函数

voidDelayXus(uinti)

{

while(i--);

}

//初始化函数

voidInitialDS18B20()

ucharx=0;

DQ=1;

//DQ复位

DelayXus(8);

//稍做延时

DQ=0;

//单片机将DQ拉低

DelayXus(80);

//精确延时大于480us

//拉高总线

DelayXus(14);

x=DQ;

//稍做延时后如果x=0则初始化成功x=1则初始化失败

DelayXus(20);

//读一个字节

ucharReadByte()

uchari=0,dat=0;

for(i=8;

i>

0;

i--)

{

DQ=0;

//给脉冲信号

dat>

>

=1;

DQ=1;

if(DQ)

dat|=0x80;

DelayXus(4);

}

returndat;

//写一个字节

voidWriteByte(uchardat)

uchari=0;

i>

i--)

DQ=dat&

0x01;

DelayXus(5);

//DelayXus(4);

//读取温度

uintReadTemperature()

uchara=0;

ucharb=0;

uintt=0;

floattt=0;

InitialDS18B20();

WriteByte(0xCC);

//跳过读序号列号的操作

WriteByte(0x44);

//启动温度转换

//跳过读序号列号的操作

WriteByte(0xBE);

//读取温度寄存器等(共可读9个寄存器)前两个就是温度

a=ReadByte();

b=ReadByte();

t=b;

t<

<

=8;

t=t|a;

tt=t*0.0625;

//5/8;

//t=tt*10+0.5;

//放大10倍输出并四舍五入---此行没用

returnt;

/*******************************************

*ledplay数码管显示,chan0-8,num数值0-9、负号

*/

voidledplay(ucharchan,ucharnum)

if(chan<

8&

&

num<

=10)

P2=0xff;

P2=(~(0x01<

chan));

//选取第N位

P0=dis_code[num];

//显示

DelayXms(100);

//delay();

voidInitTimer1(void)

TMOD=0x10;

TH1=0xFC;

TL1=0x18;

EA=1;

ET1=1;

TR1=1;

*tempdisplay温度显示函数

voidtempdisplay(schartem)

{schartempbit1=0;

schartempbit2=0;

//if((tem<

=-40)||(tem>

=125))return;

if(tem<

0)

{

ledplay(5,10);

tem=256-tem;

}

if(tem>

99)

ledplay(5,1);

tem=tem-100;

tempbit1=tem%10;

//个位HexToBcd

tempbit2=tem/10;

//十位

ledplay(6,tempbit2);

ledplay(7,tempbit1);

*Timer1Interrupt定时器1000us*1000=1s

voidTimer1Interrupt(void)interrupt3

timecnt++;

if(timecnt>

=1000)//1s-------------温度值存放

timecnt=0;

stepcnt++;

if(stepcnt>

=step)

stepcnt=0;

if(position<

10)temptable[position++]=temp;

else{temptable[position]=temp;

position=0;

}

uintsetStep()

ucharkey,i=0;

uintstep=0;

//清屏

for(;

;

key=KeyScan();

if(key==KEY_COMFIRM)returnstep;

if(key<

10)

step=key;

for(;

key=KeyScan();

ledplay(7,step);

if(key==KEY_COMFIRM)returnstep;

if(key<

{step=step*10+key;

for(;

{

key=KeyScan();

if(key==KEY_COMFIRM)returnstep;

ledplay(6,step/10);

ledplay(7,step%10);

if(key<

step=step*10+key;

for(;

{

key=KeyScan();

if(key==KEY_COMFIRM)returnstep;

ledplay(5,step/100);

ledplay(6,(step%100)/10);

ledplay(7,step%10);

if(key<

{step=step*10+key;

for(;

{

key=KeyScan();

if(key==KEY_COMFIRM)returnstep;

ledplay(4,step/1000);

ledplay(5,(step%1000)/100);

ledplay(6,(step%100)/10);

ledplay(7,step%10);

}

}

}

}

}

}

voidmain()

uinti=0,j;

InitTimer1();

ucharkey=0xff,dis;

i=ReadTemperature();

//读温度

if(i!

=0xffff)temp=i>

4;

tempdisplay(temp);

//主循环显示温度

//检查按键

ledplay(0,key);

if(key==KEY_SET)//进入设置状态

if(0!

=(j=setStep()))

step=j;

if(key<

10)//如果有0-9按键按下,

if(key==0)key=10;

//按下0,显示10秒前

dis=((position>

=key)?

(position-key):

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2