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

上传人:b****4 文档编号:26748292 上传时间:2023-06-22 格式:DOCX 页数:28 大小:577.40KB
下载 相关 举报
用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

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

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

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

 

单片机课程设计说明书

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

 

目录

1.概述1

1.1课题研究背景和意义1

1.2课题设计内容1

2.课程方案设计2

2.1系统总体设计要求2

2.2系统模块结构论证2

2.2.1方案一2

2.2.2方案二2

3.系统硬件设计5

3.1总体设计5

3.2单片机最小运行系统5

3.3温度传感器(DS18B20)电路6

3.3.1DS18B20基本介绍6

3.3.2DS18B20控制方法7

3.3.3DS18B20供电方式7

3.4七段数码管显示电路7

3.5驱动电路8

4.系统软件设计9

4.1程序结构分析9

4.2系统程序流图9

5.软硬件联调13

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

5.2实物图13

5.3调试结果13

结束语14

参考文献15

附录16

附录1:

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

附录2:

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

附录3:

proteus仿真图19

附录4:

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

附录5:

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

1.概述

1.1课题研究背景和意义

温度控制是工业自动控制的重要组成部分,在工业、电子、化工精度实验等诸多领域都有重要的应用,而温度测量又是温度控制当中重要的一环。

将现场温度控制在一定范围内,是在各种实际应用的重要保证和前提。

因此温度控制系统在工业控制领域中十分重要。

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

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

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

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

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

本课题的研究意义如下:

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

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

它的最主要的优点是把温度转换、A/D转换和数据的串行通讯集成为一体,而且它的体积很小,非常便于构成多点测温系统。

 

1.2课题设计内容

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

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

灵活方便,用途广泛。

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

2.课程方案设计

2.1系统总体设计要求

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

2.2系统模块结构论证

2.2.1方案一

用铂电阻测温的非线性校正方法,采用桥式电路将热敏电阻的感温效应,在将随被测温度变化的电压或电流采集过来,再加上放大器将信号放大,并经A\D转换器,在通过显示电路,就可以将被测温度显示出来。

 

图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可以非常方便的被用于远距离多点温度检测系统。

图2-4温度芯片DS18B20

3.系统硬件设计

3.1总体设计

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

3.2单片机最小运行系统

a)晶振

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

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

图3-1晶振电路

b)复位电路

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

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

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

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

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

 

图3-2复位电路

 

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

3.3温度传感器(DS18B20)电路

3.3.1DS18B20基本介绍

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

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

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

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

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

如图3-2,P3.6引脚接继电器电路的4.7K的限流电阻上。

3.3.2DS18B20控制方法

DS18B20有六条控制命令:

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

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

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

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

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

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

3.3.3DS18B20供电方式

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

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

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

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

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

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

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

●初始化。

●ROM操作指令。

●存储器操作指令。

 

3.4七段数码管显示电路

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

图3-4数码管引脚图

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

3.5驱动电路

一般也可以用三极管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.系统软件设计

4.1程序结构分析

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

温度信号处理程序:

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

数码管显示程序:

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

4.2系统程序流图

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

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

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

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

图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.软硬件联调

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

问题1:

温度传感器1、3引脚接线错误,导致数码管无显示

解决措施:

将温度传感器1脚接地,3脚接Vcc。

问题2:

数码管显示乱码,甚至无显示

解决措施:

检验出数码管为共阴极数码管,上网查找共阴极数码管的引脚图,认真连线,将位选和段选连接正确。

问题3:

程序、引脚间的连接都没问题,数码管还没有显示

解决措施:

用万用表检查各个引脚之间是否导通,是否出现空焊现象。

5.2实物图

5.3调试结果

结束语

课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。

因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

通过这次单片机课程设计,第一,我加深了对单片机理论的理解,将理论很好地应用到实际当中去,我花了近三天的时间做实物,焊板子是一项很考验技术的活,我们组焊好后有人成功有人失败。

接下来我们面对的是查错,先看看是不是电路原理图接错了,然后再看是不是虚焊,我拿着万用表一个一个焊点检查,着实不易。

最苦恼的是发现不存在虚焊、短路时,可能是有元器件烧掉了,我们又去网上买。

在做实物的过程中,提高了分析和解决实际问题的综合能力。

另外,也培养了自己严肃认真的科学态度和严谨求实的作风。

在此期间,张兰红老师对我的设计进行了耐心的修改和指导,我十分感激。

参考文献

1曹巧媛主编.单片机原理及应用(第二版).北京:

电子工业出版社,2002

2全国大学生电子设计竞赛组委会编.第五届全国大学生电子设计竞赛获奖作品选编(2001),北京:

北京理工大学出版社,2003

3何力民编.单片机高级教程.北京:

北京航空大学出版社,2000

4金发庆等编.传感器技术与应用.北京机械工业出版社,2002

5刘坤、宋戈、赵洪波、张宪栋编.51单片机C语言应用开发技术大全,北京:

人民邮电出版社,2008

6谭浩强著.C程序设计.北京:

清华大学出版社,2007;

7王忠飞,胥芳.MCS-51单片机原理及嵌入式系统应用[M].西安:

西安电子科技大学出版社,2007.P268-273

8PeterVanDerLinden著,徐波译.C专家编程,人民邮电出版社,2003

附录

附录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)

11.0592MHz晶振

1个

(7)

发光二极管

8个

(8)

七段共阴极数码管

8个

(9)

10uf电容

1个

(10)

排阻

1个

(11)

DS18B20温度传感器

1个

(12)

74LS245

1个

(13)

复位按钮

1个

(14)

4.7kΩ电阻

1个

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

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1