基于DS8b20的温度测量和秒表设计单片机小系统实验报告

合集下载

基于单片机的数字温度计课程设计

基于单片机的数字温度计课程设计

河南理工大学《单片机应用与仿真训练》设计报告基于单片机得数字温度计设计姓名:学号:专业班级:指导老师:所在学院:电气工程与自动化系2011年6月26日基于单片机得数字温度计设计摘要随着现代信息技术得飞速发展与传统工业改造得逐步实现.能够独立工作得温度检测与显示系统应用于诸多领域。

传统得温度检测以热敏电阻为温度敏感元件。

热敏电阻得成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定得误差。

与传统得温度计相比,这里设计得数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。

选用AT89S52型单片机作为主控制器件,DSl8B20作为测温传感器通过4位共阳极LED数码管串口传送数据,实现温度显示。

通过DSl8B20直接读取被测温度值,进行数据转换,该器件得物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0、1℃。

该器件可直接向单片机传输数字信号,便于单片机处理及控制。

另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。

目录1 概述 (4)1、1课题名称 (4)1、2课题要求 (4)1、3设计得目得意义 (4)2系统总体方案及硬件设计 (5)2、1单片机得选择 (5)2、2温度传感器得介绍 (6)2、3温度传感器与单片机得连接 (8)2、4复位信号及外部复位电路 (8)2、5单片机与报警电路 (9)2、6显示电路 (9)3 软件设计………………………………………………………………………104 Proteus软件仿真 (12)4、1 仿真图 (12)4、2仿真结果分析 (1)35 总结体会.................................................................................14 参考文献 (15)附录1程序源代码 (15)附录 2 系统原理图 (23)1概述1、1课题名称基于单片机得数字温度计得设计1、2课题要求1)基本范围-50℃~110℃2)精度误差小于0、5℃3)LED数码直读显示4)可以设定温度得上下限报警功能1、3设计目得与意义温度数我们日常生产与生活中实时在接触到得物理量,但就是它就是瞧不到得,仅凭感觉只能感觉到大概得温度值,传统得指针式得温度计虽然能指示温度,但就是精度低,使用不够方便,显示不够直观,数字温度计得出现可以让人们直观得了解自己想知道得温度到底就是多少度。

基于单片机的数字温度测量系统设计报告

基于单片机的数字温度测量系统设计报告

数字温度测量系统一、实习目的与要求1、目的及意义课题是数字温度测量系统的设计,利用数单片机测量温度信号,计算后在LED数码管上显示相应的温度值。

通过本次实习使学生了解和掌握工程设计所应遵循的步骤和程序,实习结束时,同学应具有以下的能力:(一)综合应用的能力。

(二)应用参考文献的能力。

(三)电路设计能力。

(四)分析问题的能力。

(五)创新能力。

2、总体设计方案本设计采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

而且此方案电路比较简单,软件设计也比较容易实现。

DS18B20可以直接温度转换为串行数字信号,供单片机进行处理,具有低功耗、商性能、抗干扰能力强等优点。

本设计采用STC89C52RC单片机实现。

单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。

而且体积小,硬件实现简单,安装方便。

既可以单独对多DS18B20控制工作,还可以与PC机通信。

另外STC89C52RC在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。

单总线数字温度计DS1820采用基板专利技术来测量温度,温度传感器及各种数字转换电路都集成在一起,由总线串行输出测量值(9位二进制编码)。

测温范围从- 55~+125℃,还可以读内部计数器,获得较高的分辨率。

本课题主要研究如何利用DS18B20智能温度传感器实时显示温度,并将其与LED显示键盘合并使用,制成一个能实时显示温度的数字温度计。

本设计将利用DS18B20智能温度传感器和单片小系统,设计一个数字温度采集系统。

并设计一个人机接口电路:键盘采用独立按键(功能自定义),显示器采用共阴极4位LED显示。

系统的总体设计方案框图如图1所示:图1 总体设计方案框图按照系统设计功能的要求,系统主要由单片机、温度传感器DS18B20、LED数码显示管和PC机组成。

系统的硬件电路主要由复位电路、测温电路、显示电路、晶振电路组成,系统总体结构方框图如图2所示:图2 系统总体结构框图二、单片机开发板原理及各部分功能说明1、整体功能:(1)八个数码管显示(数字和字母显示)(2)20个按键:包括4个独立按键和4*4矩阵键盘(人机接口输入)(3)8个发光二极管(流水灯、指示灯、红灯)(4)USB打印口(串口通信、USB供电)(5)红外接收头(高灵敏度,可做红外遥控器解码)(6)蜂鸣器(报警和音乐播放)(7)EEPROM 24C02(数据存储)(8)DS18B20(精密温度检测)(9)晶振采用焊接方式,可以使用不同频率的晶振(10)DS1302实时时钟(11)标准1602和12864液晶接口2、开发板总原理图如图3所示:图3 开发板总原理图3、DS18B20原理图如图4所示:图4 DS18B20原理图4、数码管原理图如图5所示:图5 数码管原理图三、软件编程1、程序流程图主程序是系统的监控系统,在程序运行的过程中必须先经过初始化,包括键盘程序,中断程序,以及各个控制端口的初始化程序。

单片机智能温度报警系统

单片机智能温度报警系统

私立华联学院毕业设计题目:单片机智能温度报警系统学院:电子信息工程系专业:电子信息工程技术班级: 08电子1班姓名:梁旭学号:0301080135摘要:介绍了单总线数字温度传感器DSI8B20模块的特性,利用DS18B20设计了一种基于STC89C52单片机的智能温度报警系统。

该智能温度报警系统以STC公司生产的STC89C52为控制器,结构简单、测温准确。

软件使用模块化结构.并对温度进行刷新显示和报警处理。

Abstract: The single-bus digital temperature sensor DSI8B20 module features, the use ofDS18B20 designed based on STC89C52 of Intelligent temperature alarm system. The intelligent temperature alarm system to STC produced STC89C52 the controller structure is simple, accurate temperature measurement. Software uses a modular structure. Refresh and temperature display and alarm processing.一、引言在工业生产中,温度的控制尤其重要,因而对温度报警系统的需求也越来越大。

如何设计一款成本低廉、测量准确、操作简单的智能温度报警系统成为一个重要问题。

在本次设计中,整个系统以SCT98C52为核心。

温度传感器DS18B20完成环境温度转换功能。

其输出为数字形式,可以直接给单片机进行处理;键盘为简单的三键控制,处理方式采用中断方式,减少了占用CPU时间。

这种设计的成本较小,结构简单、操作方便,并且测量也很准确,能够满足工业生产的需要温度控制,在工业自动化控制中占有非常重要的地位。

单片机智能温度报警系统方案

单片机智能温度报警系统方案

私立华联学院毕业设计题目:单片机智能温度报警系统学院:电子信息工程系专业:电子信息工程技术班级: 08电子1班姓名:梁旭学号:0301080135摘要:介绍了单总线数字温度传感器DSI8B20模块的特性,利用DS18B20设计了一种基于STC89C52单片机的智能温度报警系统。

该智能温度报警系统以STC公司生产的STC89C52为控制器,结构简单、测温准确。

软件使用模块化结构.并对温度进行刷新显示和报警处理。

Abstract: The single-bus digital temperature sensor DSI8B20 module features, the use of DS18B20 designed based on STC89C52 of Intelligent temperature alarm system. The intelligent temperature alarm system to STC produced STC89C52 the controller structure is simple, accurate temperature measurement. Software uses a modular structure. Refresh and temperature display and alarm processing.一、引言在工业生产中,温度的控制尤其重要,因而对温度报警系统的需求也越来越大。

如何设计一款成本低廉、测量准确、操作简单的智能温度报警系统成为一个重要问题。

在本次设计中,整个系统以SCT98C52为核心。

温度传感器DS18B20完成环境温度转换功能。

其输出为数字形式,可以直接给单片机进行处理;键盘为简单的三键控制,处理方式采用中断方式,减少了占用CPU时间。

这种设计的成本较小,结构简单、操作方便,并且测量也很准确,能够满足工业生产的需要温度控制,在工业自动化控制中占有非常重要的地位。

8B20数字温度计

8B20数字温度计

DS18B20数字温度计第一章 设计任务及方案分析一、设计任务及要求设计一个以单片机为核心的温度测量系统,可实现的功能为: (1)、测量温度值精度为±0.1°C 。

(2)、系统允许的误差范围在1°C 以内。

(3)、测温范围为-55°C 至+125°C 。

(4)、系统具有数码显示功能,能实时显示测得的温度值。

二、设计总体方案及方案论证在日常生活中经常要用到温度的检测,传统的测温元件有热电偶和热电阻,而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试也复杂,制作成本高。

本数字温度计设计采用智能温度传感器DS18B20作为检测元件,测温范围为-55°C 至+125°C ,最大分辨率可达0.0625°C 。

DS18B20可以直接读出被测量的温度值,而采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。

按照系统设计功能的要求,确定系统由三个模块组成:主控制器STC89C51,温度传感器DS18B20,驱动显示电路。

总体电路框图如下:主控制器STC89C51驱动显示电路DS18B20三、温度测量的方案及分析1、芯片选择本设计的测温系统采用芯片DS18B20,DS18B20是DALLAS公司的最新单线数字温度传感器,它的体积更小,适用电压更宽,更经济。

2、实现方法简介DS18B20采用外接电源方式工作,一线测温一线与STC89C51连接,测出的数据放在寄存器中,将数据经过BCD码转换后送到LED显示。

第二章芯片功能简介DS18B20的简介第三章系统硬件电路的设计1、主控制电路STC89C51原理图:2、温度传感器DS18B20原理图:3、数码管显示电路原理图:第四章软件编程调试1、主程序:程序说明: 18B20温度传感器通过数码管显示温度内容:18B20单线温度检测的应用样例程序,请将18b20插紧,然后在数码管可以显示XX.XC,C表示摄氏度,如显示25.3C 表示当前温度25.3度板子设置:短接J31J19接VCC拨码开关SW1:ON SW3:1 2 3 ON 45678 OFF同时:拔掉88点阵模块DS18B20短接SW4 5 ONIIC_SCL接P3.5IIC_SDA接P3.6/*********************************************************************************************//*-----------------------------------------------内容:18B20单线温度检测的应用样例程序,请将18b20插紧,然后在数码管可以显示XX.XC,C表示摄氏度,如显示25.3C 表示当前温度25.3度------------------------------------------------*/#include<REGX52.H> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<math.h>#include<INTRINS.H>#include "HT1623.C"#define uchar unsigned char#define uint unsigned intsbit pp37=P3^7;sbit bee1=P1^0;sbit bee2=P1^1;sbit fs=P0^2;sbit dj=P0^7;sbit wx=P1^4;int a;unsigned chardis_buf[12]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08 ,0x09,0x0c,0x80}; //,0xff//显示头文件可以修改对应的IO口//,0x80void delay1(uchar MS);unsigned int ReadTemperature(void);void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void delay(unsigned int i);typedef unsigned char U8; /* defined for unsigned8-bits integer variable 无符号8位整型变量*/ typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量*/typedef unsigned int U16; /* defined for unsigned16-bits integer variable 无符号16位整型变量*/ typedef signed int S16; /* defined for signed16-bits integer variable 有符号16位整型变量*/ typedef unsigned long U32; /* defined for unsigned32-bits integer variable 无符号32位整型变量*/ typedef signed long S32; /* defined for signed32-bits integer variable 有符号32位整型变量*/ typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度)*/ typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度)*/ /*************************************************** ***************/sbit DQ=P3^4;//ds18b20 端口//sfr dataled=0x80;//显示数据端口unsigned char TempH,TempL;uint temp;uchar flag_get,count,num,minute,second;uchar str[6];display_LED(){temp=ReadTemperature();TempH=temp>>4;TempL=temp&0x0F;TempL=TempL*6/10;//小数近似处理//第1位数码管显示什么就填什么比如显示1 就写LEDseg[1]; 显示2就写LEDseg[2];一次类推displaydata[0]=LEDseg[dis_buf[TempH/10]];//第2位数码管(TempH%100)/10displaydata[2]=LEDseg1[dis_buf[(TempH%10)]]; displaydata[4]=LEDseg[dis_buf[TempL]];//第3位数码管//displaydata[4]=LEDseg[dis_buf[9]];//第3位数码管displaydata[6]=LEDseg[dis_buf[10]];//displaydata[8]=LEDseg[8];//第5位数码管//displaydata[10]=LEDseg[8];//第6位数码管//displaydata[12]=LEDseg[7];//第7位数码管show_all_led();}/*************************************************** ***************//* 主函数*//************************************************* *****************/main(){while(1){display_LED();a=TempH/10;if (a>=4){bee1=0;bee2=0;dj=1;fs=1;// if(wx==0) // {// fs=1; // }// else// {// fs=0; // }}else{bee1=1;bee2=1;dj=0;fs=0;}}}/*************************************************** ***************//* 延时函数*//************************************************* *****************/void delay(unsigned int i)//延时函数{while(i--);}/*************************************************** ***************//* 初始化*//************************************************* *****************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay(8);delay(8); delay(8); delay(8); delay(8);delay(8);delay(8);delay(8);delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); delay(80);delay(80);delay(80);delay(80);delay(80);delay(80);delay(80);del ay(80);delay(80); //精确延时大于480usDQ = 1; //拉高总线delay(10);delay(10);delay(10);delay(10);delay(10);delay(10);delay(10) ;delay(10);delay(10);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(5);delay(5);delay(5); delay(5);delay(5);delay(5);}/*************************************************** ***************//* 读一个字节*//************************************************* *****************/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(5);delay(5);delay(5);delay(5);delay(5);delay(5);}return(dat);}/*************************************************** ***************//* 写一个字节*//************************************************* *****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);delay(5);delay(5); delay(5);delay(5);delay(5); delay(5);delay(5);delay(5);delay(5);delay(5);delay(5);DQ = 1;dat>>=1;}delay(5);delay(5);delay(5);delay(5);delay(5);delay(5);delay(5);d elay(5);delay(5);}/*************************************************** ***************//* 读取温度*//************************************************* *****************/unsigned int ReadTemperature(void){unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay(200);Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar(); //低位b=ReadOneChar(); //高位b<<=8;t=a+b;return(t);}2、从程序:////LED显示对应的IOsbit DINOUT=P2^0; //数据输入输出sbit CLK=P2^1; //时钟sbit STB=P2^2; //置位////////////用户可以自己修改对应的IOunsigned char lum=0x8c;//控制显示:显示控制位:1 0 * * b3 b2 b1 b0//b3=0(显示关);b3=1(显示开);b2 b1 b0 有8中选择000 001 010 011 100 101 110 111//所有lum的值有:0x88 0x89 0x8a 0x8b 0x8c0x8d 0x8e 0x8f//unsigned char xdatabitdisplay[7]={0x02,0x08,0x01,0x04,0x10,0x20}; //代表哪位数码管02是第一位08是第二位.....unsigned char dataLEDseg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80}; //共阴极0-f unsigned char datadisplaydata[14]={0x3f,0x06,0x06,0x3f,0x5b,0x3f,0x4f,0x3f,0x6 6,0x3f,0x6d,0x3f,0xff,0xff};//显示缓冲区最大地址00H--0DH ;unsigned charLEDseg1[17]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff, 0xef,0xf7,0xfc,0xf9,0xfe,0xf9,0xf1,0x80};/*****************发送1个字节数据给HD6928子程序***********/sendcmddata(unsigned char databye){unsigned char i;STB=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no p_();_nop_();_nop_();STB=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no p_();_nop_();_nop_();CLK=1;for(i=8;i>=1;i--){CLK=0;DINOUT=databye&0x01;databye=databye>>1;CLK=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no p_();_nop_();_nop_();_nop_();}}/*****************数据传输子程序***********/ senddata(unsigned char databye){unsigned char i;for(i=8;i>=1;i--){CLK=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no p_();_nop_();_nop_();_nop_();DINOUT=databye&0x01;databye=databye>>1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no p_();_nop_();_nop_();_nop_();CLK=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no p_();_nop_();_nop_();_nop_();}}//初始化子程序:地址增加模式:设置显示模式、设置数据、设置地址、传输显示数据、控制显示lint_val_display(){unsigned char i;_nop_();sendcmddata(0x03);//设为七段码11位显示模式_nop_();sendcmddata(0x40);_nop_();sendcmddata(0xc0);_nop_();for(i=0;i<14;i++){senddata(0x00);_nop_();_nop_();_nop_();_nop_();_nop_();}sendcmddata(lum);_nop_();_nop_();_nop_();_nop_();_nop_();}/**************显示程序STAR***********************/ show_all_led(){unsigned char i;_nop_();sendcmddata(0x03);//设为七段码11位显示模式_nop_();sendcmddata(0x40);_nop_();sendcmddata(0xc0);_nop_();for(i=0;i<14;i++){senddata(displaydata[i]);_nop_(); _nop_();_nop_();_nop_();_nop_();}sendcmddata(lum);_nop_();_nop_();_nop_();_nop_();_nop_();}第五章调试性能分析系统的性能调试以(1、主程序)为主。

ds8b20详解及程序

ds8b20详解及程序

最近都在学习和写单片机的程序, 今天有空又模仿DS18B20温度测量显示实验写了一个与DS18B20基于单总线通信的程序.DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。

因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。

DS18B20 产品的特点: (1)、只要求一个I/O 口即可实现通信。

(2)、在DS18B20 中的每个器件上都有独一无二的序列号。

(3)、实际应用中不需要外部任何元器件即可实现测温。

(4)、测量温度范围在-55 到+125℃之间; 在-10 ~ +85℃范围内误差为±5℃; (5)、数字温度计的分辨率用户可以从9 位到12 位选择。

将12位的温度值转换为数字量所需时间不超过750ms;(6)、内部有温度上、下限告警设置。

DS18B20引脚分布图DS18B20 详细引脚功能描述:1、GND 地信号;2、DQ数据输入出引脚。

开漏单总线接口引脚。

当被用在寄生电源下,此引脚可以向器件提供电源;漏极开路, 常太下高电平. 通常要求外接一个约5kΩ的上拉电阻.3、VDD可选择的VDD 引脚。

电压范围:3~5.5V; 当工作于寄生电源时,此引脚必须接地。

DS18B20存储器结构图暂存储器的头两个字节为测得温度信息的低位和高位字节;第3, 4字节是TH和TL的易失性拷贝, 在每次电复位时都会被刷新;第5字节是配置寄存器的易失性拷贝, 同样在电复位时被刷新;第9字节是前面8个字节的CRC检验值.配置寄存器的命令内容如下:MSBLSBR0和R1是温度值分辨率位, 按下表进行配置.默认出厂设置是R1R0 = 11, 即12位.温度值分辨率配置表4种分辨率对应的温度分辨率为0.5℃, 0.25℃, 0.125℃, 0.0625℃(即最低一位代表的温度值)12位分辨率时的两个温度字节的具体格式如下:低字节:高字节:其中高字节前5位都是符号位S, 若分辨率低于12位时, 相应地使最低为0, 如: 当分辨率为10位时, 低字节为:, 高字节不变....一些温度与转换后输出的数字参照如下:由上表可看出, 当输出是负温度时, 使用补码表示, 方便计算机运算(若是用C语言, 直接将结果赋值给一个int变量即可).DS18B20 的使用方法:由于DS18B20 采用的是1-Wire 总线协议方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

基于5单片机用LCD602显示的DS8B20课程设计键控上下限报警功能

基于5单片机用LCD602显示的DS8B20课程设计键控上下限报警功能

单片机课程设计DS18B20数字温度计设计专业电子信息科学与技术班级11级2班学号姓名1目录一.课题的设计目的。

------------------------------------------------------------------------ 二.对于课题的总体构想。

------------------------------------------------------------------------ 三.DS18B20温度传感器简介。

------------------------------------------------------------------------ 四.STC89C51单片机简介。

------------------------------------------------------------------------ 五.系统总仿真电路。

------------------------------------------------------------------------ 六.总程序。

------------------------------------------------------------------------ 七.心得体会。

------------------------------------------------------------------------2八.参考文献。

--------------------------------------------------- 一.课题的设计目的1. 巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力。

2. 培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力。

3. 通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。

电子温度计与秒表专业实践报告

电子温度计与秒表专业实践报告

1、实践任务要求1、制作电子温度计。

使用双7段数码管显示器显示温度。

采用2051单片机及温度传感器18B20设计电子温度计,实时显示当前温度值(两位),所示的温度范围为0~99。

2、采用Protues软件画出“电子温度计”原理图。

3、查找资料,编写软件程序。

4、在电子温度计的基础上,加上一个小开关,实现用开关控制电子温度计与计数器的切换功能。

计数器范围为0~992、硬件原理图使用AT89C2051实现显示温度,其中LG为2位共阳极数码管。

用DXP绘制的原理图,如下图1所示:图1 硬件原理图3、硬件仿真图用Protues软件进行仿真,如图2(1)、2(2)所示:图2(1)电子温度计仿真图图2(2)秒表仿真图4、 PCB板图硬件PCB板图,如图3所示:图3 硬件PCB板图5、产品实物图做出的产品实物图,如图4所示:图4 产品实物图6、器件明细表所需要的元器件见表1。

序号标号型号器件名称数量1 R1~R7、R12 200 电阻82 R8 、R9 1K 电阻 23 R10 10K 电阻 14 R11 2K 电阻 15 C1、C2 30PF 瓷片电容 26 C3 33uf 电解电容 17 DIP-20 20脚单片机芯片座 18 AT89C2051 AT89C2051 51单片机芯片 19 LG5621 18脚,共阳数码管 110 12M 12MHZ 晶振 111 18b20 18b20 温度传感器 112 Q1、Q2 9013 三极管 213 3节电池电池盒 114 S1 开关 17、软件流程图软件流程图,如图5所示:图5 软件流程图8、软件程序(秒表+温度计)#include<reg52.h> // 51单片机头文件,包含了特殊寄存器的说明#include <intrins.h>#define uchar unsigned char //定义无符号字符型#define uint unsigned int //定义无符号整型Uchar codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uint tempe;uint miao=0;uint j=0;uint flag=0;sbit DQ=P3^7;sbit p=P3^1;sbit q=P3^0;sbit key=P3^2;uint shi=0;uint ge=0;void delay1(uint z) //延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--) ;}void delay(uint t){while(t--);}void display1(){shi=miao/10;ge=miao%10;p=1;q=0;P1=table[shi];delay1(5);p=0;q=0;q=1;p=0;P1=table[ge];delay1(5);q=0;p=0; }void display(void){p=1;q=0;P1=table[tempe/10];delay1(5);p=0;q=0;q=1;p=0;P1=table[tempe%10];delay1(5);q=0;p=0;}void init_ds18b20(void) //DS18B20的初始化函数{uchar sample;DQ=1;delay(8);DQ=0;delay(80);DQ=1;delay(8);sample=DQ; //return(sample)带返回检测器件响应delay(4);}void wr_ds18b20(uchar dat) //写数据{uchar i;for(i=0;i<8;i++){DQ=0;DQ=dat&0x01;delay(4);DQ=1;dat>>=1;}delay(4);}uchar re_ds18b20(void) //读数据{uchar i;uchar result;for(i=0;i<8;i++){DQ=0;result>>=1;_nop_();DQ=1;if(DQ)result|=0x80;delay(4);}return(result);}uchar rd_temperature(void){uchar a,b;init_ds18b20();wr_ds18b20(0xcc); //跳过ROMwr_ds18b20(0x44); //启动温度测量delay(300);init_ds18b20();wr_ds18b20(0xcc);wr_ds18b20(0xbe);a=re_ds18b20();b=re_ds18b20();b<<=4;b+=(a&0xf0)>>4;return(b);}void main(){TMOD=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1; //总中断允许ET0=1; //开启T0定时器的溢出中断允许位TR0=1; //启动T0定时器EX0=1; //允许外部中断响应外部设备的触发信号IT0=1; //单脉冲下降沿触发中断有效while(1){if(flag==0){ TR0=0;P1=0XFF;delay(1);miao=0;tempe=rd_temperature(); //温度计display();delay(5);display();delay(5);}if(flag==1){ tempe=0;P1=0XFF;delay(1);TR0=1;display1();delay(1);display1();delay(5);display1();delay(5);}} }void timer() interrupt 1 //秒表{TH0=(65536-50000)/256;TL0=(65536-50000)%256;j++;if(j==20){ j=0;miao++;if(miao==60)miao=0;}}void exter() interrupt 0{flag=!flag;}9、实践总结通过本次实验,完成实现温度传感器的设计与制作,让我们更加深刻的了解了现实生活与我们电子技术的息息相关,更我们把从课本上学习的只是转化为我们的实践经验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于DS8b20的温度测量和秒表设计单片机小系统实验报告单片机最小系统实验报告——基于DS18b20的温度测量和秒表设计目录单片机最小系统实验报告 (1)一、单片机 (3)1.单片机简介 (3)2.最小系统 (3)3. AT89C51单片机引脚说明 (4)二、18B20介绍 (5)三、最小系统硬件设计 (8)1、设计结构框图 (8)2、系统时钟电路 (8)3、复位电路 (8)四、实验具体内容 (9)1、实现LED显示器的选通并显示字符.. 92、基于DS18b20的温度测量和秒表设计16五、总结 (29)一、单片机1.单片机简介单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

单片机由运算器,控制器,存储器,输入输出设备构成,相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。

概括的讲:一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机是了解计算机原理与结构的最佳选择。

它最早是被用在工业控制领域AT89C51提供以下标准功能:8K字节Falsh闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时AT89C51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,时/计数器,串行通信口及中断系统持续工作。

掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。

AT89C51单片机主要功能特性:2.最小系统单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统. 对51系列单片机来说,单片机+晶振电路+复位电路,便组成了一个最小系统.但是一般我们在设计中总是喜欢把按键输入、显示输出等加到上述电路中,成为小系统。

3. AT89C51单片机引脚说明VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,内部无上拉电阻每脚可吸收8TTL 门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流,这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时, ALE 只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

二、18B20介绍DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。

主要根据应用场合的不同而改变其外观。

封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。

耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

(1)DS18B20(a)通过单线总线端口访问 DS1820 的协议如下:•初始化void Init_DS18B20(){uchar x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败delay_18B20(20);}• ROM 操作命令int ReadOneChar(void){uchar i=0;uchar dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}•存储器操作命令WriteOneChar(uchar dat){uchar i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat>>=1;}}•执行/数据ReadTemperature(void){uchar a=0;uchar b=0;uint t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(100);Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar();b=ReadOneChar();//传感器返回值除16得实际温度值//为了得到2位小数位,先乘100,再除16,考虑整型数据长度,//技巧处理后先乘25,再除4,除4用右移实现b<<=8;t=a+b;return(t);}DS1820 需要严格的协议以确保数据的完整性。

协议包括几种单线信号类型:复位脉冲、存在脉冲、写0、写1、读0 和读1。

所有这些信号,除存在脉冲外,都是由总线控制器发出的。

和 DS1820 间的任何通讯都需要以初始化序列开始,初始化序列见下图。

一个复位脉冲跟着一个存在脉冲表明DS1820 已经准备好发送和接收数据(适当的ROM 命令和存储器操作命令)(b)当总线上只有一个器件时,DS18B20读温度的流程为:复位→发0CCH SKIP ROM命令→发44H开始转换命令→延时→复位→发0CCHSKIP ROM命令→发0BEH读存储器命令→连续读出两个字节数据(即温度)→结束。

➢Convert T [44h]这条命令启动一次温度转换而无需其他数据。

温度转换命令被执行,而后DS1820 保持等待状态。

如果总线控制器在这条命令之后跟着发出读时间隙,而DS1820 又忙于做时间转换的话,DS1820 将在总线上输出“0”,若温度转换完成,则输出“1”。

如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。

➢Read Scratchpad [BEh]这个命令读取暂存器的内容。

读取将从字节0 开始,一直进行下去,直到第9(字节8,CRC)字节读完。

如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。

(c)DS18b20 用12 位存贮温值度最高位为符号位,下图为18b20 的温度存储方式,负温度S=1 正温度S=0LSB:D7 D6 D5 D4 D3 D2 D1 D03MSB:D7 D6 D5 D4 D3 D2 D1 D0S S S S S 272625三、最小系统硬件设计1、设计结构框图2、系统时钟电路单片机内部具有一个高增益反相放大器,用于构成振荡器。

通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,系统时钟电路结构如图:3、复位电路单片机小系统采用上电自动复位和手动按键复位两种方式实现系统的复位操作。

上电复位要求接通电源后,自动实现复位操作。

手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。

显示电路、键盘以及外部RAM的扩展根据具体电路的不同而不同四、实验具体内容1、实现LED显示器的选通并显示字符电路图的绘制(1)打开PROTEUS将所需元器件加入到对象选择器窗口。

Picking Components into the Schematic单击对象选择器按钮,如图所示弹出“Pick Devices”页面,在“Keywords”输入AT89C51,系统在对象库中进行搜索查找,并将搜索结果显示在“Results”中,如图所示。

在“Results”栏中的列表项中,双击“AT89C51”,则可将“AT89C51”添加至对象选择器窗口。

相关文档
最新文档