基于STC89C52单片机的LED温度计设计.doc

上传人:飞****9 文档编号:136865414 上传时间:2020-07-03 格式:DOC 页数:19 大小:568KB
返回 下载 相关 举报
基于STC89C52单片机的LED温度计设计.doc_第1页
第1页 / 共19页
基于STC89C52单片机的LED温度计设计.doc_第2页
第2页 / 共19页
基于STC89C52单片机的LED温度计设计.doc_第3页
第3页 / 共19页
基于STC89C52单片机的LED温度计设计.doc_第4页
第4页 / 共19页
基于STC89C52单片机的LED温度计设计.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《基于STC89C52单片机的LED温度计设计.doc》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的LED温度计设计.doc(19页珍藏版)》请在金锄头文库上搜索。

1、目录1.、设计的任务与要求21.1系统设计的背景21.2理论基础22、总体设计和系统框图22.1温度采集模块32.2温度显示模块33、设计方案43.1硬件系统设计43.1.1供电电路设计43.1.4温度采集模块设计43.1.5显示电路53.2软件系统设计63.2.1 DS18B20的读写时序63.2.2程序流程图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温度传感器的构造、接线、信息沟

3、通,要较好的掌握51系列单片机的使用以及硬件搭建,LED数码管的显示原理以及与单片机的连接。要找出一个较好的温度采集方案,使得到的温度更加准确。2、总体设计和系统框图包括方案比较、方案论证、方案选择(以方框图的形式给出各方案,并简要说明)为了以数字的形式来显示采集的温度我们需要以一个单片机来处理数据,由于对单片机的性能要求不是很高,我们采用51系列单片机来处理数据,系统总体方框图如图1。图12.1温度采集模块 采用DS18B20温度传感器,DS18B20输出的量为数字量,只要按特定的时序读出数值就可获得温度数据,电路较为简单且成本较低,DS18B20如图3所示,所以选择方案二。 图3 DS18

4、B202.2温度显示模块 采用LED数码管显示,虽然占用了单片机较多的时间,但数码管显示的较清晰,且价格较便宜连接电路简单。3、设计方案 3.1硬件系统设计51系列单片机性能稳定价格便宜功耗低,使用于在较低应用下的智能系统的设计。3.1.1供电电路设计该单片机的正常工作电压为+5V,可以由外界直接输入+5V电压,此单片机采用USB供电。图4 供电电路3.1.4温度采集模块设计本系统采用DS18B20作为温度采集芯片,DS18B20通过一个单线接口发送或接收信息,因此在中央微处理器和DS18B20之间仅需一条连接线,每只DS18B20都有一个独特的片序列号,所以多只DS18B20可以同时连在一根

5、单线总线上。DS1820 依靠一个单线端口通讯。在单线端口条件下,必须先建立 ROM 操作协议,才能进行存储器和控制操作。因此,控制器必须首先提供下面 5 个 ROM 操作命令之一:1)读 ROM,2)匹配 ROM,3)搜索ROM,4)跳过 ROM,5)报警搜索。这些命令对每个器件的激光 ROM 部分进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时可以向总线控制器指明有多少器件或是什么型号的器件。成功执行完一条 ROM 操作序列后,即可进行存储器和控制操作,控制器可以提供 6 条存储器和控制操作指令中的任一条。 一条控制操作命令指示 DS1820 完成一次温度测量。测量结果放在

6、DS1820 的暂存器里,用一条读暂存器内容的存储器操作命令可以把暂存器中数据读出。硬件电路设计如图7所示。图7 DS18B20硬件连接3.1.5显示电路我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示不同的字形。数码管又分为共阴极和共阳极两种,共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。共阳极就是将八个LED的阳极连在一起。其原理图如图9所示。图9 LED原理图3.2软件系统设计3.2.1 DS18B20的读写时序图10 初始化过程 复位和

7、存在脉冲图11 控制器写时序图12 控制器读时序3.2.2程序流程图图13 系统流程图 4、硬件原理图5、系统仿真和调试 在仿真过程中温度由高到零下,然后又由零下调到零上,观察到数码管显示的温度可以很好的跟踪温度的变化。具有较好的灵活性和准确性。仿真过程中的两个截图如下。图14 仿真截图1图15 仿真截图26.程序源代码在仿真过程中观察到数码管显示的温度可以很好的跟踪温度的变化。具有较好的灵活性和准确性。程序源代码如下。#include#includesbit p1_1=P10;sbit DS=P33;unsigned int a,i;unsigned char duma = 0x28,0xF

8、9,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*/void delay5ms

9、() uchar a,b;for(a=20;a0;a-)for(b=30;b0;b-);/*延时子程序*/ void delayb(uint count) uint i;while(count)i=200;while(i0)i-;count-;/*DS18B20初始化*/void dsreset(void) uint i; DS=0;i=103;while(i0)i-;DS=1;i=4;while(i0)i-;/*读一位数据值*/bit tmpreadbit(void) uint i;bit dat;DS=0;i+; /i+,小延时一下DS=1;i+;i+;dat=DS;i=8;while(i

10、0)i-;return (dat);/*读一个字节数据*/uchar tmpread(void) uchar i,j,dat;dat=0;for(i=1;i=8;i+)j=tmpreadbit();dat=(j1); /读出的数据最低位在最前面,这样刚好/一个字节在DAT里return(dat); /将一个字节数据返回/*写一个字节到DS18B20里*/void tmpwritebyte(uchar dat) uint i;uchar j;bit testb;for(j=1;j1;if(testb) / 写1部分DS=0;i+;i+;DS=1;i=8;while(i0)i-;elseDS=0;

11、 /写0部分i=8;while(i0)i-;DS=1;i+;i+;/*获取温度并转化命令*/void tmpchange(void) dsreset(); /初始化DS18B20delayb(1); /延时tmpwritebyte(0xcc); /跳过序列号命令tmpwritebyte(0x44); /发送温度转换命令/*读取DS18B20中温度寄存器数据*/void 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;temp0;a-)for(b=50;b0;b-);void dis_te

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 管理论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号