版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1.、设计的任务与要求21.1系统设计的背景21.2理论基础22、总体设计和系统框图22.1温度采集模块32.2温度显示模块33、设计方案43.1硬件系统设计4供电电路设计4温度采集模块设计4显示电路53.2软件系统设计63.2.1 DS18B20的读写时序6程序流程图74、硬件原理图85、系统仿真和调试96.程序源代码97、设计结果分析148、设计总结和体会159、参考文献16附录一:硬件原理图17摘要 本文介绍了采用51系列单片机和DS18B20温度传感器,实现数字温度测量,用数码管把温度实时显示出来,温度以两位整数位和一位小数位的形式显示。 本系统主要包括供电模块、单片机最小系统模块
2、、DS18B20温度采集模块和LED数码管显示模块。关键词:51单片机 DS18B20 LED1.、设计的任务与要求1.1系统设计的背景温度的测量广泛的应用在工农业生产和社会生活中,由于工农业的发展要求温度的测量的精度和实时性提出了更高的要求,传统的水银温度计和热电偶等,存在测量不方便、精度低、采集和传输较复杂等缺点。本设计采用美国Dallas公司的DS18B20和stc89c52单片机构成温度测量系统,用LED数码管实时显示温度,具有更高的智能性和直观性。1.2理论基础要较好的设计出温度计,需要我们深入的了解DS18B20温度传感器的构造、接线、信息沟通,要较好的掌握51系列单片机的使用以及
3、硬件搭建,LED数码管的显示原理以及与单片机的连接。要找出一个较好的温度采集方案,使得到的温度更加准确。2、总体设计和系统框图包括方案比较、方案论证、方案选择(以方框图的形式给出各方案,并简要说明)为了以数字的形式来显示采集的温度我们需要以一个单片机来处理数据,由于对单片机的性能要求不是很高,我们采用51系列单片机来处理数据,系统总体方框图如图1。图12.1温度采集模块 采用DS18B20温度传感器,DS18B20输出的量为数字量,只要按特定的时序读出数值就可获得温度数据,电路较为简单且成本较低,DS18B20如图3所示,所以选择方案二。 图3 DS18B202.2温度显示模块 采用LED数码
4、管显示,虽然占用了单片机较多的时间,但数码管显示的较清晰,且价格较便宜连接电路简单。3、设计方案 3.1硬件系统设计51系列单片机性能稳定价格便宜功耗低,使用于在较低应用下的智能系统的设计。3.1.1供电电路设计该单片机的正常工作电压为+5V,可以由外界直接输入+5V电压,此单片机采用USB供电。图4 供电电路3.1.4温度采集模块设计本系统采用DS18B20作为温度采集芯片,DS18B20通过一个单线接口发送或接收信息,因此在中央微处理器和DS18B20之间仅需一条连接线,每只DS18B20都有一个独特的片序列号,所以多只DS18B20可以同时连在一根单线总线上。DS1820 依靠一个单线端
5、口通讯。在单线端口条件下,必须先建立 ROM 操作协议,才能进行存储器和控制操作。因此,控制器必须首先提供下面 5 个 ROM 操作命令之一:1)读 ROM,2)匹配 ROM,3)搜索ROM,4)跳过 ROM,5)报警搜索。这些命令对每个器件的激光 ROM 部分进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时可以向总线控制器指明有多少器件或是什么型号的器件。成功执行完一条 ROM 操作序列后,即可进行存储器和控制操作,控制器可以提供 6 条存储器和控制操作指令中的任一条。 一条控制操作命令指示 DS1820 完成一次温度测量。测量结果放在 DS1820 的暂存器里,用一条读暂存器
6、内容的存储器操作命令可以把暂存器中数据读出。硬件电路设计如图7所示。图7 DS18B20硬件连接3.1.5显示电路我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示不同的字形。数码管又分为共阴极和共阳极两种,共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。共阳极就是将八个LED的阳极连在一起。其原理图如图9所示。图9 LED原理图3.2软件系统设计3.2.1 DS18B20的读写时序图10 初始化过程 复位和存在脉冲图11 控制器写时序图12 控制
7、器读时序3.2.2程序流程图图13 系统流程图 4、硬件原理图5、系统仿真和调试 在仿真过程中温度由高到零下,然后又由零下调到零上,观察到数码管显示的温度可以很好的跟踪温度的变化。具有较好的灵活性和准确性。仿真过程中的两个截图如下。图14 仿真截图1图15 仿真截图26.程序源代码在仿真过程中观察到数码管显示的温度可以很好的跟踪温度的变化。具有较好的灵活性和准确性。程序源代码如下。#include<reg52.h>#include<intrins.h>sbit p1_1=P10;sbit DS=P33;unsigned int a,i;unsigned char dum
8、a = 0x28,0xF9,0x4C,0x58,0x99,0x1A,0x0B,0xF8,0x08,0x98,0x88,0x08,0x2E,0x28,0x0E,0x8E,0xF7;unsigned code wema=0x7F,0xBF,0xDF,0xEF;unsigned baiwei,shiwei,gewei,dianhou;#define uchar unsigned char/将unsigned char定义为uchar,简化输写。提高编程速度#define uint unsigned int/将unsigned char定义为uint,简化输写。提高编程速度/*延时子程序10ms*/v
9、oid delay5ms() uchar a,b;for(a=20;a>0;a-)for(b=30;b>0;b-);/*延时子程序*/ void delayb(uint count) uint i;while(count)i=200;while(i>0)i-;count-;/*DS18B20初始化*/void dsreset(void) uint i; DS=0;i=103;while(i>0)i-;DS=1;i=4;while(i>0)i-;/*读一位数据值*/bit tmpreadbit(void) uint i;bit dat;DS=0;i+; /i+,小延
10、时一下DS=1;i+;i+;dat=DS;i=8;while(i>0)i-;return (dat);/*读一个字节数据*/uchar tmpread(void) uchar i,j,dat;dat=0;for(i=1;i<=8;i+)j=tmpreadbit();dat=(j<<7)|(dat>>1); /读出的数据最低位在最前面,这样刚好/一个字节在DAT里return(dat); /将一个字节数据返回/*写一个字节到DS18B20里*/void tmpwritebyte(uchar dat) uint i;uchar j;bit testb;for(j
11、=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-;elseDS=0; /写0部分i=8;while(i>0)i-;DS=1;i+;i+;/*获取温度并转化命令*/void tmpchange(void) dsreset(); /初始化DS18B20delayb(1); /延时tmpwritebyte(0xcc); /跳过序列号命令tmpwritebyte(0x44); /发送温度转换命令/*读取DS18B20中温度寄存器数据*/void
12、 get_temp(void) float ftemp;uchar a,b; int temp;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度 /所以读回数据的最低
13、位代表的是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;/显示小数点后温度void display(uchar num,uchar dat)P0=dumadat; /段码P2=wemanum;
14、/位码void delay1(uint x)uint a,b;for(a=x;a>0;a-)for(b=50;b>0;b-);void dis_temp() display(2,shiwei); delay1(1);display(1,gewei);delay1(1);display(1,16);/显示小数点delay1(1);display(0,dianhou); delay1(1); void main() while(1) tmpchange(); /温度转换 get_temp(); for(i=25;i>0;i-) /让数码管显示更加清晰 dis_temp(); 7、
15、设计结果分析仿真过程中调节温度,数码管显示的温度可以很好的跟着变化,小数点后显示一位,达到预定的目标。 器件一览表如 表1器件名称数量Stc89c52单片机1个晶振11.0592MHZ1个10uf有极性电容1个开关1个阻排1个8段共阳数码管4个DS18B20温度传感器1个8、设计总结和体会 通过对这一系统的设计,我们对以前所学的知识有了更深的了解,懂得了以前基础学习的重要性,在这一设计过程中我们查阅了大量地资料,并对以往所学进行了系统性的复习和总结。今后我们会更加注重基础知识的学习。设计过程中我们小组三人展开了密切的合作并明确了分工,其中xxx完成了硬件电路的分析设计和proteus7.0仿真
16、环境的学习并很好的为本设计作好了仿真的工作,xxx为本设计绘制了protell99电路原理图和参加了仿真的部分设计工作,xxx学习和编写了在KEIL环境下的51单片机软件的设计,在设计过程中组内三人展开了热烈的讨论,遇到问题共同探讨,在指导老师的指导下,成功的完成了LED温度计的设计,取得了较好的效果。设计过程中我们采取了创新性的设计,我们并没有让LED一直都亮,而是采取了闪烁的形式,不仅降低了功耗,而且延长了LED数码管的寿命。本系统还可以采用干电池供电,从而系统具有较好的可携带性。本系统中我们的设计是采取有线的设计,单片机和DS18B20是在一起的,由于时间仓促,如果近一步研究,我们想把有线的设计改成无线的设计,我们把温度传感器和单片机之间以无线的方式相连,把较多温度传感器的数据采集到主控单片机,可以检测到更多的温度数据,对于温度的控制和分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二类烟煤行业深度研究报告
- 定时表行业深度研究报告
- 白鳓鱼行业深度研究报告
- 2025木材购销类合同模板
- 大飞艇行业深度研究报告
- 石结构构件行业深度研究报告
- 中国有柄钢丝杯扫项目投资可行性研究报告
- 中国模具有项目投资可行性研究报告
- 卧式交流焊机行业深度研究报告
- 2025年的房屋租赁合同定金协议
- 子路背米孝双亲课件
- 广州铁路局笔试考试题目及答案
- 冬季堤防施工方案
- 绳索安全培训课件
- 台球厅吸引人活动方案
- 2025“黑龙江人才周”绥化市事业单位招聘269人考试参考题库及答案解析
- 2025四川九洲建筑工程有限责任公司招聘成本管理部副部长1人备考模拟试题及答案解析
- AIAgent现状与发展趋势
- 工程监造方案模板范文(3篇)
- 智能医疗自动售卖机合作租赁与药品配送服务合同
- 围墙工程施工方案(完整版)
评论
0/150
提交评论