ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:214.70KB ,
资源ID:26646529      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26646529.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计DS18B20的温度测量与显示系统.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计DS18B20的温度测量与显示系统.docx

1、单片机课程设计DS18B20的温度测量与显示系统单片机课程设计说明书题 目:DS18B20的温度测量与显示系统学 院:航空自动化学院 系 别:自动化系 专业名称:自动化专业 班 级: 学 号: _ 指导 中国民航大学航空自动化学院1课程设计要求12总体方案设计42.1、单片机系统2.2、电源模块2.3、显示模块2.4、总体设计方案3系统方框图44系统各方框的电路图9 4.1、温度传感器DS18B20电路4.2、显示电路 4.3、主控制器 4.4、系统总电路图5主程序流程图和各个子程序的流程图121、主程序流程图2、温度读取子程序流程图3、温度转换子程序流程图6源程序说明157心得体会附录一 D

2、S18B20简介 20基于数字温度计DS18B20的温度测量与显示系统一、任务与要求1.利用1个DS18B20测量室内温度(误差小于?)2.用数码管显示温度3.显示精度为0.1扩展要求1.多通道测量2.LCD显示3.生成印刷电路板三、二、总体方案设计(基本功能)1、单片机系统我选用了AT89C52单片机,查过资料后我知道AT89C52单片机具有不但AT89C51单片机所有的优点,而且具有更大的程序存储空间,可在线仿真的功能,方便调试。所以选用AT89S52八位单片机作为温度采集的控部分。2、电源模块采用普通的直流电源实现电路简单,而且采用集成电源芯片设计的直流电源电压比较稳定,完全满足系统各模

3、块的供电要求。 3、显示模块为了显示出温度,采用数码管显示工具。4、总体设计方案为了不失通用性和智能性,本方案采用AT89S52单片机作为控制器,单总线温度传感器DS18B20进行温度采集。电源部分采用普通的直流电源,完全满足AT89S52和DS18B20等各模块的工作电压范围。温度显示采用数码管。四、系统方框图四、系统各方框的电路图1、温度传感器DS18B20电路由于DS18B20 工作在单总线方式,其硬件接口非常简单,仅需利用系统的一条I/ O线与DS18B20的数据总线相连即可,如图1所示。图1 DS18B20电路2、显示电路显示电路采用4位共阳极LED数码管,P0口由上拉电阻提高驱动能

4、力,作为段码输出并作为数码管的驱动。P2口的低四位作为数码管的位选端。采用动态扫描的方式显示。 3、主控制器单片机AT89S5具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。4、系统总电路图总体设计电路图所下,控制器采用单片机AT89S52,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。五、主程序流程图和各个子程序的流程图1、主程序流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序

5、流程见图3.1所示。2、温度读取子程序流程图3、温度转换子程序流程图六、程序与说明:#include#include#define uchar unsigned char#define uint unsigned intsbit DQ=P23;sbit dula=P26;sbit wela=P27;sbit FM=P25;sbit LED1=P20;sbit LED2=P21;sbit LED3=P22;uint temp,tmp,temp1,temp2,temp3;uchar flag1=0;uchar qian,bai,shi,ge;uchar code table=0xc0,0xf9,0

6、xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc0,;/数码管显示代码uchar code table1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc0,; /数码管显示代码void delay(uchar i) while(-i);/延时函数void delays(uchar i) while(i-);/延时函数voi

7、d delayms(uint timer) uchar x,y; for(x=timer;x0;x-) for(y=110;y0;y-);ms级别的延时函数void Ds18b20_Init(void)/* uint i; DQ=0; i=103; while(i0)i-; DQ=1; i=4; while(i0)i-; */ uchar flag=0;/设置标志位 DQ=1;/拉高数据总线 delay(1);/延时一段时间,尽量短一点 DQ=0;/拉低总线 delays(100);/延时时间在480us到960us之间 DQ=1;/拉高总线 delay(15);/如果在15-60ms的时间内

8、产生一个低电平,则初始化完成。 flag=DQ; delay(100);/ds18b20初始化bit tempreadbit()/位读取子程序 uint i; bit dat; DQ=0;i+;/ i+起延时作用,1us后进入读时序 DQ=1;i+;i+;/ i+起延时作用,在1us到15us内进行采样,这里延时大概8us dat=DQ; i=8;while(i0)i-;/至少需要60us才能完成读周期 return(dat);/返回位数据 uchar Read_One_Byte() uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit();

9、dat=(j1); /循环8次读一个字节 return(dat);void Write_One_Byte(uchar wdat) uint i; uchar j; bit testb; for(j=1;j1;/右移位 if(testb)/写1周期 DQ=0; i+;i+;/延时一段时间,写周期开始 DQ=1; i=8;while(i0)i-;/完成一次写周期至少要需要60us,这里大概是100us DQ=1; i+;i+; Else/写0周期 DQ=0; i=8;while(i0)i-; DQ=1; i+;i+; /* uchar i=0; uchar time=0; for(i=8;i0;i

10、-) DQ=1; _nop_(); DQ=0; _nop_(); DQ=wdat&0x01; delay(40); DQ=1; for(time=0;time=1; delay(10); */uint Get_temp() float tt; uchar low,high; Ds18b20_Init();/调用初始化函数 delayms(1); Write_One_Byte(0xcc);/跳过读ROM指令 Write_One_Byte(0x44); /温度转换指令/ delayms(2); Ds18b20_Init();/调用初始化函数 delayms(1); Write_One_Byte(0

11、xcc); /跳过读ROM指令 Write_One_Byte(0xbe); /读温度指令/ delayms(2); low=Read_One_Byte();/低字节存放在LOW high=Read_One_Byte();/高字节存放在high temp=high; temp=8; temp=temp|low;/将温度合并 if(temp63488) temp=temp+1; tt=temp*(0.0625); if(tt=100) flag1=1; */ temp=tt*10+0.5; tt=temp*(0.0625); temp=tt*10+0.5;/ temp=temp+0.05; ret

12、urn(temp); void Display(uint value)/* uchar qian,bai,shi,ge; bai=value/100; shi=value%100/10; ge=value%10; */ qian=temp/1000;/百位数 bai=temp%1000/100;/十位数 shi=temp%100/10;/个位数 ge=temp%10;/小数位 if(qian=0)/百位若为零,则不显示 dula=1; P0=0xff; dula=0; P0=0xff; wela=1; P0=2; wela=0; delayms(5); P0=0xff; else dula=1

13、; P0=tableqian; dula=0; P0=0xff; wela=1; P0=2; wela=0; delayms(5); P0=0xff; if(flag1=0)/若温度我正数,则最高位不显示 dula=1; P0=0xff; dula=0; P0=0xff; wela=1; P0=1; wela=0; delayms(5); P0=0xff; Else/若温度为负数,则最高位为负号 dula=1; P0=0xbf; dula=0; P0=0xff; wela=1; P0=1; wela=0; delayms(5); P0=0xff; /* dula=1; P0=tableqian

14、; dula=0; P0=0xff; wela=1; P0=2; wela=0; delayms(5); P0=0xff; */ dula=1;/显示百位 P0=tablebai; dula=0; P0=0xff; wela=1; P0=4; wela=0; delayms(5); P0=0xff; dula=1; /显示十位 P0=tableshi; dula=0; P0=0xff; wela=1; P0=8; wela=0; delayms(5); P0=0xff; dula=1; /显示个位 P0=tablege; dula=0; P0=0xff; wela=1; P0=0x10; we

15、la=0; delayms(5); P0=0xff; void main() LED1=1; while(1) P1=0x39; tmp=Get_temp(); Display(tmp); delayms(25); 六、DS18B20简介DS18B20 采用3 脚PR-35 封装或8 脚SOIC 封装,管脚排列如图3所示。图中GND 为地,DQ为数据输入/输出端(即单线总线),该脚为漏极开路输出,常态下呈高电平,Vcc是外部+5V 电源端,不用时应接地,NC 为空脚。图3 DS18B20的外部结构DS18B20内部主要包括寄生电源、温度传感器、64 位激光ROM 单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH 和TL 解发器存储与控制逻辑、8 位循环冗余校验码(CRC)发生器等七部分,内部结构如图4。图4 DS18B20内部结构七、心得体会在两个星期的努力中,这次课程设计终于顺利完成了,在设计中我遇到了很多编程问题,在老师和同学的帮助下,终于把这些问题逐个解决。同时这次课程设计给我一个很好的锻炼的机会。非常感谢学校和老师!

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

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