基于STC89C52单片机的LED温度计设计说明.docx

上传人:b****5 文档编号:4478793 上传时间:2022-12-01 格式:DOCX 页数:12 大小:297.21KB
下载 相关 举报
基于STC89C52单片机的LED温度计设计说明.docx_第1页
第1页 / 共12页
基于STC89C52单片机的LED温度计设计说明.docx_第2页
第2页 / 共12页
基于STC89C52单片机的LED温度计设计说明.docx_第3页
第3页 / 共12页
基于STC89C52单片机的LED温度计设计说明.docx_第4页
第4页 / 共12页
基于STC89C52单片机的LED温度计设计说明.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于STC89C52单片机的LED温度计设计说明.docx

《基于STC89C52单片机的LED温度计设计说明.docx》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的LED温度计设计说明.docx(12页珍藏版)》请在冰豆网上搜索。

基于STC89C52单片机的LED温度计设计说明.docx

基于STC89C52单片机的LED温度计设计说明

 

摘要

 

设计中采用51系列单片机和DS18B20温度传感器,实现数字温度测量,用数码管把温度实时显示出来,温度以两位整数位和一位小数位的形式显示。

本系统主要包括供电模块、单片机最小系统模块、DS18B20温度采集模块和LED数码管显示模块。

 

关键词:

51单片机DS18B20LED

 

1.、设计的任务与要求

1.1系统设计背景

温度测量是从金属(物质)的热胀冷缩开始,常用的检测方法有电阻式、热电偶式、PN结型、辐射型、光纤式及石英谐振型等。

这些检测方法都是基于温度变化引起其物理参数(如电阻值,热电势等)变化的原理。

随着大规模集成电路工艺的提高,出现了多种集成的数字化温度传感器。

传统的水银温度计和热电偶等,存在测量不方便、精度低、采集和传输较复杂等缺点,用LED数码管实时显示温度,具有更高的智能性和直观性。

1.2理论基础

设计出符合要求的温度计,首先需要了解DS18B20温度传感器的构造、接线、信息沟通,要较好的掌握51系列单片机的使用以及硬件搭建,LED数码管的显示原理以及与单片机的连接。

2、总体设计和系统框图

包括方案比较、方案论证、方案选择(以方框图的形式给出各方案,并简要说明)

为了以数字的形式来显示采集的温度我们需要以一个单片机来处理数据,由于对单片机的性能要求不是很高,我们采用51系列单片机来处理数据,系统总体方框图如图1。

图1

2.1温度采集模块

采用DS18B20温度传感器,DS18B20输出的量为数字量,只要按特定的时序读出数值就可获得温度数据,电路较为简单且成本较低,DS18B20如图3所示,所以选择方案二。

图3DS18B20

2.2温度显示模块

采用LED数码管显示,虽然占用了单片机较多的时间,但数码管显示的较清晰,且价格较便宜连接电路简单。

 

3、设计方案

3.1硬件设计

51系列单片机性能稳定价格便宜功耗低,使用于在较低应用下的智能系统的设计。

3.1.1供电电路设计

该单片机的正常工作电压为+5V,可以由外界直接输入+5V电压,此单片机采用USB供电。

图4供电电路

3.1.4温度采集模块设计

本系统采用DS18B20作为温度采集芯片,DS18B20通过一个单线接口发送或接收信息,因此在中央微处理器和DS18B20之间仅需一条连接线,每只DS18B20都有一个独特的片序列号,所以多只DS18B20可以同时连在一根单线总线上。

DS1820依靠一个单线端口通讯。

在单线端口条件下,必须先建立ROM操作协议,才能进行存储器和控制操作。

因此,控制器必须首先提供下面5个ROM操作命令之一:

1)读ROM,2)匹配ROM,3)搜索ROM,4)跳过ROM,5)报警搜索。

这些命令对每个器件的激光ROM部分

进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时可以向总线控制器指明有多少器件或是什么型号的器件。

成功执行完一条ROM操作序列后,即可进行存储器和控制操作,控制器可以提供6条存储器和控制操作指令中的任一条。

一条控制操作命令指示DS1820完成一次温度测量。

测量结果放在DS1820的暂存器里,用一条读暂存器容的存储器操作命令可以把暂存器中数据读出。

硬件电路设计如图7所示。

图7DS18B20硬件连接

3.1.5显示电路

我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示不同的字形。

数码管又分为共阴极和共阳极两种,共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。

共阳极就是将八个LED的阳极连在一起。

其原理图如图9所示。

图9LED原理图

3.2软件设计

3.2.1DS18B20的读写时序

图10初始化过程复位和存在脉冲

图11控制器写时序

图12控制器读时序

3.2.2程序流程图

图13系统流程图

4、硬件原理图

5、系统仿真和调试

在仿真过程中观察到数码管显示的温度可以很好的跟踪温度的变化。

具有较好的灵活性和准确性。

程序源代码如下。

#include

#include

sbitp1_1=P1^0;

sbitDS=P3^3;

unsignedinta,i;

unsignedcharduma[]={0x28,0xF9,0x4C,0x58,0x99,0x1A,0x0B,0xF8,0x08,0x98,0x88,0x08,0x2E,0x28,0x0E,0x8E,0xF7};

unsignedcodewema[]={0x7F,0xBF,0xDF,0xEF};

unsignedbaiwei,shiwei,gewei,dianhou;

#defineucharunsignedchar//将unsignedchar定义为uchar,简化输写。

提高编程速度

#defineuintunsignedint//将unsignedchar定义为uint,简化输写。

提高编程速度

 

/*延时子程序10ms*/

voiddelay5ms()

{

uchara,b;

for(a=20;a>0;a--)

for(b=30;b>0;b--);

}

/*延时子程序*/

voiddelayb(uintcount)

{

uinti;

while(count)

{

i=200;

while(i>0)

i--;

count--;

}

}

/*DS18B20初始化*/

voiddsreset(void)

{

uinti;

DS=0;

i=103;

while(i>0)i--;

DS=1;

i=4;

while(i>0)i--;

}

/*读一位数据值*/

bittmpreadbit(void)

{

uinti;

bitdat;

DS=0;i++;//i++,小延时一下

DS=1;i++;i++;

dat=DS;

i=8;while(i>0)i--;

return(dat);

}

/*读一个字节数据*/

uchartmpread(void)

{

uchari,j,dat;

dat=0;

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

{

j=tmpreadbit();

dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好//一个字节在DAT里

}

return(dat);//将一个字节数据返回

}

/*写一个字节到DS18B20里*/

voidtmpwritebyte(uchardat)

{

uinti;

ucharj;

bittestb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)//写1部分

{

DS=0;

i++;i++;

DS=1;

i=8;while(i>0)i--;

}

else

{

DS=0;//写0部分

i=8;while(i>0)i--;

DS=1;

i++;i++;

}

}

}

/*获取温度并转化命令*/

voidtmpchange(void)

{

dsreset();//初始化DS18B20

delayb

(1);//延时

tmpwritebyte(0xcc);//跳过序列号命令

tmpwritebyte(0x44);//发送温度转换命令

}

/*读取DS18B20中温度寄存器数据*/

voidget_temp(void)

{

floatftemp;

uchara,b;

inttemp;

dsreset();

delayb

(1);

tmpwritebyte(0xcc);

tmpwritebyte(0xbe);//发送读取数据命令

a=tmpread();//连续读两个字节数据,读低8位

b=tmpread();//读高8位

temp=b;

temp<<=8;//temp高8位和低8位交换,将交换过的值重新赋给temp。

temp=temp|a;//两字节合成一个字

ftemp=temp*0.0625;//得到真实十进制温度值,因为DS18B20可以精确到0.062度

//所以读回数据的最低位代表的是0.0625度

temp=ftemp*10+0.5;//放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。

baiwei=temp/1000;//显示百位温度,这里用1000,是因为我们之前乖以10位了

delayb

(1);

shiwei=temp%1000/100;//显示十位温度

delayb

(1);

gewei=temp%1000%100/10;//显示个位温度。

delayb

(1);

dianhou=temp%10;//显示小数点后温度

}

voiddisplay(ucharnum,uchardat)

{

P0=duma[dat];//段码

P2=wema[num];//位码

}

voiddelay1(uintx)

{

uinta,b;

for(a=x;a>0;a--)

for(b=50;b>0;b--);

}

voiddis_temp()

{

display(2,shiwei);

delay1

(1);

display(1,gewei);

delay1

(1);

display(1,16);//显示小数点

delay1

(1);

display(0,dianhou);

delay1

(1);

}

voidmain()

{

while

(1)

{

tmpchange();//温度转换

get_temp();

for(i=25;i>0;i--)//让数码管显示更加清晰

{dis_temp();}

}

6、结果分析

器件一览表如表1

器件名称

数量

Stc89c52单片机

1个

晶振11.0592MHZ

1个

10uf有极性电容

1个

开关

1个

阻排

1个

8段共阳数码管

4个

DS18B20温度传感器

1个

 

7、设计总结和体会

通过为期几天的设计,我和我的组员都对学过的知识有了更深的了解,懂得了以前基础学习的重要性,期间我们查阅了大量地资料,在互相合作中更好的完成任务。

我们会更加注重基础知识的学习。

在设计过程中我们小组三人展开了密切合作,可能由于考研等原因我们做的不够,但是我们尽全力去做,在老师指导下最终完成了任务。

 

8、参考文献

[1]康华光电子技术基础模拟部分(第五版)高等教育

[2]康华光电子技术基础数字部分(第五版)高等教育

[3]胡寿松自动控制原理第五版科学

[4]田裕鹏,恩涛,开宇 传感器原理科学

[5]闫玉德,俞虹51单片机原理与应用:

C语言版机械工业

[6]荣科51单片机C语言应用与开发航空航天大学

 

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

当前位置:首页 > 小学教育 > 小升初

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

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