用LED数码管和DS18B20设计的温度显示器.docx

上传人:b****0 文档编号:17719108 上传时间:2023-08-03 格式:DOCX 页数:28 大小:1.64MB
下载 相关 举报
用LED数码管和DS18B20设计的温度显示器.docx_第1页
第1页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第2页
第2页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第3页
第3页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第4页
第4页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第5页
第5页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第6页
第6页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第7页
第7页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第8页
第8页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第9页
第9页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第10页
第10页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第11页
第11页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第12页
第12页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第13页
第13页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第14页
第14页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第15页
第15页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第16页
第16页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第17页
第17页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第18页
第18页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第19页
第19页 / 共28页
用LED数码管和DS18B20设计的温度显示器.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

用LED数码管和DS18B20设计的温度显示器.docx

《用LED数码管和DS18B20设计的温度显示器.docx》由会员分享,可在线阅读,更多相关《用LED数码管和DS18B20设计的温度显示器.docx(28页珍藏版)》请在冰点文库上搜索。

用LED数码管和DS18B20设计的温度显示器.docx

用LED数码管和DS18B20设计的温度显示器

%

单片机课程设计说明书

用LED数码管和DS18B20设计的温度显示器

专业

电气工程及其自动化

学生姓名

管通

班级

B电气081

学号

02

指导教师

张兰红

完成日期

\

2011年6月23日

*

1.概述1

课题设计背景和意义1

课题设计内容1

2.课程方案设计2

系统总体设计要求2

系统模块结构论证2

方案一2

方案二2

3.系统硬件设计5

总体设计5

单片机最小运行系统5

温度传感器(DS18B20)电路6

七段数码管显示电路7

驱动电路8

4.系统软件设计8

程序结构分析8

系统程序流图9

5.软硬件联调12

软硬件调试中出现的问题及解决措施12

实物图13

调试结果14

结束语15

参考文献16

附录17

附录1:

基于单片机的温度显示系统设计原理图18

附录2:

基于单片机的温度显示系统设计PCB图19

附录3:

proteus仿真图20

附录4:

基于单片机的温度显示系统设计C语言程序清单21

附录5:

基于单片机的温度显示系统设计元器件目录表25

1.概述

课题设计背景和意义

由于现代工艺越来越多的需要对实时温度进行监测和控制,而且需要的精度越来越高。

所以温度控制系统国内外许多有关人员的重视,得到了十分广泛的应用。

温度控制系统发展迅速,而且成果显著。

由于单片微处理器的性能日益提高、价格又不断降低,使其性能价格比的优势非常明显。

“用LED数码管和DS18B20设计的温度显示器”课程设计,主要设计以一个单片机为控制核心的温度自动测量系统,

一方面,本次设计是一个单片机系统,对它的设计和制作可以灵活运用在单片机课程中所学的知识,并使之得到巩固和提高。

另一方面,它的测温部分采用了美国Dallas半导体公司的DS18B20一线式数字式温度传感器,DS18B20是最新一代的测温器件,具有许多优点,它正在逐步取代传统的测温元件——热敏电阻和热电偶。

 

课题设计内容

本课题的主要任务是设计并制作用LED数码管和DS18B20设计的温度显示器,即根据温度传感器感受室温,通过数码管显示出来。

它能感受微小的温度误差,灵敏度为0.1摄氏度。

灵活方便,用途广泛。

设计温度显示器的硬件电路与软件控制程序,对硬件电路与软件程序分别进行调试,并进行软硬件联调,要求获得调试成功的实物。

2.课程方案设计

系统总体设计要求

该系统组要有STC89C51为核心的主控电路测温电路(DS18B20)、LED显示电路。

系统模块结构论证

2.2.1方案一

针对铂热电阻传感器测量温度,采用普通稳压源桥式电路而产生非线性误差的问题,运用集成运算放大器工作在线性区域的特性,将恒流源原理应用到测温桥式电路中,并采用集成A/D转换技术的单片机Mega16,通过运算消除了非线性误差,实现了对温度的精确测量。

试验结果表明,应用此种测温电路,缩短了单片机计算时间,一定程度上缓解了变送滞后对测量精度的影响,同时降低了误差。

图2-1铂电阻桥式测温电路

2.2.2方案二

考虑使用数字温度传感器,结合单片机电路设计,采用一只DS18B20温度传感器,直接读取被测温度值,之后进行转换,依次完成设计要求。

图2-2DS18B20测温系统框图

2.2.3方案比较

方案一采用模拟温度传感器,数据处理麻烦,且容易产生信号失真.DS18B20可以直接温度转换为串行数字信号,供单片机进行处理,具有低功耗、高性能、抗干扰能力强等优点。

比较以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计容易实现,故实际设计中拟采用方案二。

在本系统的电路设计方框图如图2-3所示。

图2-3温度计电路总体设计方案

DS18B20是Dallas公司生产的一线式数字温度传感器,它具有微型化、低功耗、高性能抗干扰能力、强易配处理器等优点,特别适合用于构成多点温度测控系统,可直接将温度转化成串行数字信号(按9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片,它具有三引脚TO-92小体积封装形式,温度测量范围-55~+125℃,可编程为9~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,业可采用寄生电源方式产生,多个DS18B20可以并联到三根或者两根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

从而可以看出DS18B20可以非常方便的被用于远距离多点温度检测系统。

3.系统硬件设计

总体设计

根据第2节设计方案,设计的系统总体电路如附录1所示,下面具体介绍每一部分的设计。

单片机最小运行系统

a)晶振

晶振为单片机提供时钟信号。

单片机XIAL1和XIAL2分别接30PF的电容,中间再并个12MHZ的晶振,形成单片机的晶振电路。

图3-1晶振电路

b)复位电路

单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。

89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。

当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。

单片机系统的复位方式有:

手动按钮复位和上电复位。

 

图3-2复位电路

 

ALE引脚悬空,复位引脚接到复位电路、VCC接电源、VSS接地、EA接电源

温度传感器(DS18B20)电路

DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号处理器处理。

DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。

因此,下图电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。

并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。

图3-3温度传感器电路引脚图

如图3-2,引脚接继电器电路的的限流电阻上。

DS18B20有六条控制命令:

温度转换44H启动DS18B20进行温度转换

读暂存器BEH读暂存器9个字节内容

写暂存器4EH将数据写入暂存器的TH、TL字节

复制暂存器48H把暂存器的TH、TL字节写到E2RAM中

重新调E2RAMB8H把E2RAM中的TH、TL字节写到暂存器TH、TL字节

读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPU

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源供电方式,如图所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个三极管来完成对总线的上拉。

本设计采用电源供电方式,口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个上拉电阻和STC89C52的来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10μs。

采用寄生电源供电方式是VDD和GND端均接地。

由于单线制只有一根线,因此发送接收口必须是三状态的。

主机控制DS18B20完成温度转换必须经过3个步骤:

初始化。

ROM操作指令。

存储器操作指令。

 

七段数码管显示电路

当位选打开时,送入相应的段码,则相应的数码管打开,关掉位选,打开另一个位选,送入相应的段码,则数码管打开,而每次打开关掉相应的位选时,时间间隔低于20ms,从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样。

图3-4数码管引脚图

考虑到实际室温的温度范围,显示需用五位,硬件中用了2个四位数码管,共8个位选,接到P2口。

驱动电路

一般也可以用三极管9012来驱动4位数码管,不仅增加了成本也增加了布线难度,功耗大。

这里用锁存器74LS245来驱动数码管显示。

图3-5 74LS245引脚图

74LS245是常用的芯片,用来驱动LED或者其他的设备,它是8路双向总线收发器,可双向传输数据。

74LS245还具有双向三态功能,既可以输出,也可以输入数据。

当AT89C51单片机的P0口总线负载达到或超过P0口最大负载能力时,必须接入74LS245等总线驱动器。

DIR为方向控制端。

端为低电平时,DIR=“0”,信号由B向A传输(接收);当DIR=“1”时,信号由A向B传输(发送);当

为高电平时,A、B均为高组态。

A总线端接8位P0口,B总线端接数码管的a、b、c、d、e、f、g、dp引脚。

4.系统软件设计

程序结构分析

  主程序调用了2个子程序,分别是数码管显示程序、温度信号处理程序。

温度信号处理程序:

对温度芯片送过来的数据进行处理,进行判断和显示。

数码管显示程序:

向数码的显示送数,控制系统的显示部分。

系统程序流图

系统程序主要包括主程序,读出温度子程序,写入子程序等,按键子程序,串口通信程序,显示子程序。

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。

这样可以在一秒之内测量一次被测温度,其程序流程见图所示。

通过调用读温度子程序把存入内存储中的整数部分与小数部分开分存放在不的的两个单元中,然后通过调用显示子程序显示出来。

图4-1DS18B20温度流程图

ucharInit_DS18B20()

{

ucharstatus;

DQ=1;Delay(8);

DQ=0;Delay(90);

DQ=1;Delay(8);

status=DQ;

Delay(100);

DQ=1;

returnstatus;

}

ucharReadOneByte()

{

uchari,dat=0;

DQ=1;_nop_();

for(i=0;i<8;i++)

{

DQ=0;dat>>=1;DQ=1;_nop_();_nop_();

if(DQ)dat|=0x80;Delay(30);DQ=1;

}

returndat;

}

voidWriteOneByte(uchardat)

{

uchari;

for(i=0;i<8;i++)

{

DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;

}

}

voidRead_Temperature()

{

if(Init_DS18B20()==1)

DS18B20_IS_OK=0;

else

{

WriteOneByte(0xCC);

WriteOneByte(0x44);

Init_DS18B20();

WriteOneByte(0xCC);

WriteOneByte(0xBE);

Temp_Value[0]=ReadOneByte();

Temp_Value[1]=ReadOneByte();

DS18B20_IS_OK=1;

}

}

 

5.软硬件联调

软硬件调试中出现的问题及解决措施

第一次上电调试,设置温度上限为35摄氏度,温度下限为28摄氏度。

但温度却不显示出来,后经检查发现原来是DS18B20初始化时间设置不对,导致没法读到DS18B20的温度值,延时时间重设后才显示出温度值来。

再经实际接电调试,一切运行正常。

按键调试时,刚开始由于没有设置按键松手检测程序,按键一直失灵,后将按键松手检测程序(while(P2==0Xxx))后,按键运转正常。

串口调试时,刚开始是发送一个数据便显示一个数据便打开一次中断,这样导致数据更换太慢,没法同时显示几个数据,后将所有要显示的数据一个一个储存起来后再打开中断,一起送出去,这样问题解决了,发送和接收都没有错误了。

实物图

调试结果

结束语

本次课程设计,回顾起此次单片机课程设计,我仍感慨颇多,的确,从理论到实践,在接近三个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,以及焊电路板时出现的各种错误,怎样万用表检查电路,用对单片机C语言掌握得不好,怎样修改程序……通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在张兰红老师的辛勤指导下,终于迎逆而解。

同时,在张兰红老师那里我学得到很多实用的知识以及她的认真严谨的科学态度,让我终生受益!

同时,对给过我帮助的同学再次表示忠心的感谢!

参考文献

[1]张毅刚.单片机原理及应用[M].北京:

高等教育出版社,2008

[2]郭天祥新概念51单片机C语言教程—入门、提高、开发拓展全攻略[M]北京:

电子工业出版社2010

[3]彭伟单片机C语言程序设计实训100例—基于8051+Proteus仿真[M]北京:

电子工业出版社

[4]张大明.单片机控制实训指导及综合应用实例[M].北京:

清华大学出版社,2004

[5]张齐,朱宁西.单片机应用系统设计技术—基于C51的Proteus仿真[M].北京:

化学工业出版社,2004.

[6]沈光斌,刘冬,姚志成.单片机系统实用抗干扰设计.[M].北京:

人民邮电出版社,2004

[7]冯育长.单片机系统设计与实例分析.[M].西安:

西安电子科技大学出版社,2007

[8]晁阳.单片机MCS-51原理及应用开发教程[M].北京:

清华大学出版社,2009.

[9]黄惟公,邓成中,王燕.单片机原理与应用技术[M].西安:

西安电子科技大学出版社,2009

附录

附录1:

基于单片机的温度显示系统设计原理图

附录2:

基于单片机的温度显示系统设计PCB图

附录3:

proteus仿真图

附录4:

基于单片机的温度显示系统设计C语言程序清单

附录5:

基于单片机的温度显示系统设计元器件目录表

附录1:

基于单片机的温度显示系统设计原理图

 

附录2:

基于单片机的温度显示系统设计PCB图

附录3:

proteus仿真图

附录4:

基于单片机的温度显示系统设计C语言程序清单

#include<>

#include<>

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P3^6;

ucharcodeDSY_CODE[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};

ucharcodedf_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};

ucharCurrentT=0;

ucharTemp_Value[]={0x00,0x00};

ucharDisplay_Digit[]={0,0,0,0};

bitDS18B20_IS_OK=1;

voidDelay(uintx)

{

while(--x);

}

ucharInit_DS18B20()

{

ucharstatus;

DQ=1;Delay(8);

DQ=0;Delay(90);

DQ=1;Delay(8);

status=DQ;

Delay(100);

DQ=1;

returnstatus;

}

ucharReadOneByte()

{

uchari,dat=0;

DQ=1;_nop_();

for(i=0;i<8;i++)

{

DQ=0;dat>>=1;DQ=1;_nop_();_nop_();

if(DQ)dat|=0x80;Delay(30);DQ=1;

}

returndat;

}

voidWriteOneByte(uchardat)

{

uchari;

for(i=0;i<8;i++)

{

DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;

}

}

voidRead_Temperature()

{

if(Init_DS18B20()==1)

DS18B20_IS_OK=0;

else

{

WriteOneByte(0xCC);

WriteOneByte(0x44);

Init_DS18B20();

WriteOneByte(0xCC);

WriteOneByte(0xBE);

Temp_Value[0]=ReadOneByte();

Temp_Value[1]=ReadOneByte();

DS18B20_IS_OK=1;

}

}

voidDisplay_Temperature()

{

uchari;

uchart=150;

ucharng=0,np=0;

charSigned_Current_Temp;

if((Temp_Value[1]&0xF8)==0xF8)

{

Temp_Value[1]=~Temp_Value[1];

Temp_Value[0]=~Temp_Value[0]+1;

if(Temp_Value[0]==0x01)Temp_Value[1]++;

ng=1;np=0xFD;

}

Display_Digit[0]=df_Table[Temp_Value[0]&0x0F];

CurrentT=((Temp_Value[0]&0xF0)>>4)|((Temp_Value[1]&0x07)<<4);

Display_Digit[3]=CurrentT/100;

Display_Digit[2]=CurrentT%100/10;

Display_Digit[1]=CurrentT%10;

if(Display_Digit[3]==0)

{

Display_Digit[3]=10;

np=0xFB;

if(Display_Digit[2]==0)

{

Display_Digit[2]=10;

np=0xF7;

}

}

for(i=0;i<30;i++)

{

P0=0x39;P2=0x7F;Delay(t);P2=0xFF;

P0=0x63;P2=0xBF;Delay(t);P2=0xFF;

P0=DSY_CODE[Display_Digit[0]];

P2=0xDF;Delay(t);P2=0xFF;

P0=(DSY_CODE[Display_Digit[1]])|0x80;

P2=0xEF;Delay(t);P2=0xFF;

P0=DSY_CODE[Display_Digit[2]];

P2=0xF7;Delay(t);P2=0xFF;

P0=DSY_CODE[Display_Digit[3]];

P2=0xFB;Delay(t);P2=0xFF;

if(ng)

{

P0=0x40;P2=np;Delay(t);P2=0xFF;

}

}

}

voidmain(void)

{

Read_Temperature();

Delay(50000);

Delay(50000);

while

(1)

{

Read_Temperature();

if(DS18B20_IS_OK)

{

Display_Temperature();

}

else

{

P0=P2=0x00;

}

}

}

附录5:

基于单片机的温度显示系统设计元器件目录表

编号

元件名称

元件数量

(1)

STC89C52单片机

1个

(2)

1kΩ电阻

1个

(3)

10KΩ电阻

1个

(4)

330Ω电阻

8个

(5)

30uF电容

2个

(6)

晶振

1个

(7)

发光二极管

8个

(8)

七段共阴极数码管

8个

(9)

10uf电容

1个

(10)

排阻

1个

(11)

DS18B20温度传感器

1个

(12)

74LS245

1个

(13)

复位按钮

1个

(14)

Ω电阻

1个

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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