毕业设计(论文)-多功能高精度电子钟的设计与实现.docx_第1页
毕业设计(论文)-多功能高精度电子钟的设计与实现.docx_第2页
毕业设计(论文)-多功能高精度电子钟的设计与实现.docx_第3页
毕业设计(论文)-多功能高精度电子钟的设计与实现.docx_第4页
毕业设计(论文)-多功能高精度电子钟的设计与实现.docx_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业论文论文题目 多功能高精度电子钟的设计与实现专 业 班 级 姓 名 学 号 指导教师 2013年 4 月摘要 数字电子时钟是人们日常生活中不可或缺的必需品。本文以STC89C52为核心控制芯片,DS1302为时钟芯片,DS18B20为温度传感器,通过液晶显示器LCD1602实时显示时间及温度。通过按键设置年月日和星期,使得户外活动的人们可以在得到精确时间显示的同时得到提醒接下来的时间安排,方便人们的生活。并且扩展了温度的测量和显示。程序的下载则是通过STC-ISP软件完成。经过测试,系统可以正常完成预定的功能。关键词 电子时钟;STC89C52;DS1302;DS18B20 ABSTRACT Digital electronic clock is an integral part of peoples daily life necessities. STC89C52 chip is used as the core control chip, DS1302 chip is used as the clock chip, DS18B20 chip is used as the temperature sensor and LCD1602 was used to display time and temperature.You can set the date and day of the week through the buttons, making outdoor activities people can get accurate time display to remind the next time arrangements to facilitate the lives of people. The download of the program is completed by STC-ISP software. After testing, the system can be completed normally intended function. KEY WORDS Electronic clock;STC89C52;DS1302;DS18B20 目 录1前 言11.1电子时钟的研究背景11.2电子时钟的国内外研究现状12系统总体方案设计32.1系统主控芯片的选择方案32.2 系统的设计思路32.3 系统总体设计框图33硬件设计53.1 硬件芯片介绍53.1.1 主控制芯片的选择:STC89C5253.1.2 实时时钟芯片DS130253.1.3 温度传感器DS18B2063.1.4 液晶显示屏LCD160283.2 系统单元模块电路设计93.2.1 单片机最小系统模块电路设计93.2.2 时钟模块设计103.2.3 温度传感器模块设计113.2.4 液晶显示模块设计123.2.5 按键模块设计123.2.6 蜂鸣器提示模块设计124软件设计144.1 系统软件实现总体描述144.2 主程序软件实现144.4 LCD1602模块软件实现154.5 DS1302模块软件实现164.6 上电提醒模块软件实现164.7 按键模块软件实现174.8系统软件仿真185系统调试与结果分析195.1 最小系统的调试195.2 液晶显示模块和蜂鸣器提示模块的调试195.3 整体调试195.4 实物图206总 结21参考文献22附 录23附录A:程序代码23附录B:程序头文件41致 谢461前 言1.1电子时钟的研究背景20世纪末,电子技术得到了极速的发展,毫无疑问,在其推动下,现代电子产品以及各种高科技产品几乎渗透到了社会的各个领域,这有力地推动了社会生产力的发展和社会信息化程度以及综合科技水平的提高,但产品更新换代的频率也越来越快。多功能电子钟不管在性能还是在样式亦或是用途上都发生了重大的变化,许多电子钟都已具备电子万年历、电子秒表、温度检测等功能。同时单片机在多功能数字钟中的应用已是非常普遍的1。多功能电子时钟除了具有时钟的功能外还可以包含对环境温度检测的功能。温度是一种最基本的环境参数。目前,典型的温度检测控制系统由模拟式温度传感器、A/D转换电路和各种单片机组成。以DS18B20为代表的新型单线总线数字式温度传感器集温度测量和A/D转换于一体,这类传感器可以直接输出数字量,同时与单片机接口电路结构非常简单,可以广泛用于距离远、节点分布多的场合,具有较强推广应用价值2。数字电子时钟是采用数字电路实现对时,分,秒数字显示的装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可或缺的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,数字时钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。例如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电器的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用,有着非常现实的意义。1.2电子时钟的国内外研究现状 数字电子时钟,自从它发明的那天起就成为人类的朋友,给人们的生活、学习、工作、娱乐带来极大的方便。但随着时间的推移,社会的进步,人们对时间计量的精度要求越来越高,应用越来越广,可以说时间的准确已成为各行各业安全运行的基础。电子时钟的设计方法有多种,可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用对单片机编程来实现电子钟。其中,利用单片机实现的电子时钟具有硬件结构简单、编程灵活、便于功能扩展等特点。由单片机作为数字钟的核心控制器,可以通过它的时钟信号实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。通过键盘可以进行定时、校时功能。输出设备显示器可以用液晶显示技术或者数码管显示技术3。智能温度传感器(亦称数字温度传感器)是上世纪90年代中期问世的。此类传感器是微电子技术、计算机技术和自动测试技术的结晶。21世纪后,智能温度传感器毫无疑问正朝着高精度、多功能、总线标准化、高可靠性及高安全性等高科技的方向迅速发展,开发虚拟传感器和网络传感器、研制更先进的单片测温系统已是刻不容缓4。在日常生活和自动控制系统中,我们时常会遇到对时间和温度实时监控的需求。这就给具有多种功能的时钟提供了市场,也有了市场开发的前景。本文给出了一种基于单片机实现带温度检测的电子时钟的设计方法和实现过程。22系统总体方案设计2.1系统主控芯片的选择方案方案一:采用ARM,ARM是一种功耗很低的高性能处理器,但是ARM现在的价格相对单片机还是很高,程序设计比较复杂。方案二:采用常用的STC89S52控制。技术比较熟练,应用广泛,现在51系列技术硬件的发展也非常快,出现了许多功能非常强大的单片机,因此使用单片机可以实现要求的基本功能。采用主从单片机工作方式来控制整个系统。其中一个单片机用于控制LED点阵显示,另外一个单片机用于串口与上位机通信、温度测量、时间读取等工作。相对单机工作方式,主从工作模式的处理能力大大提高,并且分工明确,执行速度得到很大的提高。虽然硬件电路以及软件设计方面要求相对高了一些,更涉及到主从单片机通信问题。但是,为了更好地实现各项性能指标,本设计采用了这种方案。通过比较,我选择方案二。2.2 系统的设计思路本次设计完成电子时钟年、月、日、时、分、秒的显示及环境温度测量的功能。硬件电路包括单片机最小系统电路、DS1302实时时钟芯片电路模块、LCD1602液晶显示模块、按键模块、DS18B20温度传感器模块、蜂鸣器上电提示电路模块;软件部分主要通过c程序的编程实现对时钟芯片进行时间数据的读和写,然后通过液晶显示程序将时间显示出来,通过按键操作实现功能的转换和屏幕的切换。设计中结合硬件、软件的分步调试,达到要求的控制效果。2.3 系统总体设计框图基于单片机系统的电子时钟基本结构框图如图2-1所示。电源 温度传感器DS18B20单片机晶振,复位电路液晶显示模块时钟芯片DS1302蜂鸣器声响模块按键模块图2-1系统基本结构框图该系统所需要的器件包括单片机STC89C52芯片一块,实时时钟芯片DS1302一块,温度传感器DS18B20一块,液晶显示屏LCD1602一块,蜂鸣器一个,12mHZ的晶振一个,37mHZ的晶振一个,排针排线若干组,电容电阻若干,导线若干,三极管一个,按钮5个。3硬件设计3.1 硬件芯片介绍3.1.1 主控制芯片的选择:STC89C52(一)STC89C52功能特点5STC89C52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。表3-1给出了其主要功能。表3-1 STC89C52功能表主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能(二)STC89C52各管脚介绍 STC89C52各管脚如图3-1所示。3.1.2 实时时钟芯片DS1302 DS1302是MAXIM公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。该器件内含一个实时时钟/日历(RTC)和31字节静态RAM,实时时钟/日历电路提供秒、分、时、日、星期、月、年、的信息。它广泛应用于电话、传真、便携式仪器、时间记录器以及电池供电的仪器表等产品领域6。(一)DS1302其主要功能特点 (1)实时时钟具有能计算2100年之前的秒分时日日期星期月年的能力还有闰年调整的能力。 (2)采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。 (3)对Vcc1有可选的涓流充电能力,双电源管用于主电源和备份电源供应,备份电源管脚可由电池或大容量电容输入,附加的7字节暂存存储。(二)DS1302各管脚图介绍: DS1302各管脚如图3-2所示。 图3-1 STC89C52管脚图 图3-2 DS1302各管脚各管脚主要功能:(1)Vcc1:主电源;Vcc2:备份电源。当Vcc2Vcc1+0.2V时由Vcc2向DS1302供电,当Vcc2Vcc1时,由Vcc1向DS1302供电。(2)SCLK:串行时钟,输入,控制数据的输入与输出;(3)I/O:三线接口时的双向数据线;(4)CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。3.1.3 温度传感器DS18B20(一)DS18B20功能特点DS18B20具有超小体积和超低硬件开销,精度高,抗干扰能力强等优点。具有全数字温度转换及输出,单总线数据通信,是开发温度相关产品的很好的选择。(二)DS18B20内部工作原理DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20原理图如图3-3所示。图3-3 DS18B20原理图DS18B20引脚定义:(1) DQ为数字信号输入/输出端(2) GND为电源地(3) VDD为外接供电电源输入端(在寄生电源接线方式时接地) DS18B20管脚图如图3-4所示。图3-4 DS1820管脚图3.1.4 液晶显示屏LCD1602 (一)LCD1602特点说明7液晶显示模块具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点。LCD1602 可以显示两行,每行16 个字符,采用5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比8。(二)LCD1602功能介绍 LCD1602各引脚功能如表3-7所示。 表3-2 LCD1602管脚功能表3.2 系统单元模块电路设计本设计以模块化的方式来进行硬件电路的设计和调试。单片机的模块化就是把系统分成各个具有独立功能又可以互相衔接的简单模块,将复杂难懂的指令、语法、编程及其电路分解,使设计简单化15。本设计的电路模块可以分为单片机最小系统模块,时钟模块,温度传感器模块,液晶显示模块,按键模块,蜂鸣器提示模块。3.2.1 单片机最小系统模块电路设计本设计的单片机最小系统主要包括STC89C52芯片,晶振电路,复位电路和电源。(一)晶振电路 最小系统晶振电路如图3-5所示。 图3-5 晶振电路图 图3-6 复位电路图 STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL0和XTAL1分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图3-6所示,在XTAL0和XTAL1引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.212MHz之间选择,电容值在530pF之间选择,电容值的大小可对频率起微调的作用。(二)复位电路方案一:采取上电复位,其又分为内部复位电路和外部复位电路。不论哪种电路,都相当于在上电时,给单片机的复位引脚施加一个一定宽度的脉冲电平。外部复位电路通常用一个电阻和一个电容实现。 方案二:采取按键复位,在复位电路中通过按键按一下弹起时给单片机复位引脚施加一个脉冲信号,按键复位电路通常用一个按键,两个电阻和一个电容实现,这是单片机复位电路采用最常见的方式。我采用方案二。最小系统复位电路如图3-6所示。 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经过一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位8。(三)最小系统整体图最小系统整体电路如图3-7所示。图3-7 最小系统电路图3.2.2 时钟模块设计 本设计中的DS1303芯片SCLK引脚与STC89C52芯片的P1口相连接,在读写时向总机发送同步时钟脉冲,ST是复位/片选线,通过把RST输入驱动置高电平启动所有的数据传输,I/O引脚是DS1302芯片与STC89C52芯片之间的数据输入输出端口。 时钟模块电路如图3-8所示。图3-8 时钟模块电路图3.2.3 温度传感器模块设计温度传感器DS18B20的接法很简单,它的DQ引脚与STC89C52芯片的P1.7引脚相连接,当DSI8B20接收到温度转换命令后,DQ引脚直接向单片机输出数据进行通讯。作为数字信号输出端。这里只用到一个温度传感器,若要使用多个则只需将所有的DS18B20的I/O口接在一起即可,在具体操作时,通过读取每个芯片的内部序列号来识别9。温度传感器模块电路如图3-9所示。图3-9 温度传感器模块电路图3.2.4 液晶显示模块设计液晶LCD1602的D0-D7引脚与STC89C52芯片的P0口相接, 引脚3接一个15K的电位器来调整它的显示对比度,从而达到合适的背光。液晶显示模块电路如图3-10所示。图3-10 液晶显示模块电路图3.2.5 按键模块设计五个按键K1-K4也接到STC89C52芯片的P1.0-P1.4起到调节时间日期等功能。四个按键中K1为菜单键,K2为上调键,K3为下调键,K4为退出键,K5为复位时钟键。按键模块电路如图3-11所示。 3.2.6 蜂鸣器提示模块设计当时钟上电时,P3.6输出低电平,三极管导通,这样蜂鸣器的电流形成回路,发出声音。通过短暂的延时后,P3.6输出高电平,三极管不导通,没有电流经过蜂鸣器的线圈,停止发声。通过短暂的蜂鸣器提示音起到时钟上电提示作用。蜂鸣器提示模块电路如图3-12所示。 图3-11 按键模块电路图 图3-12 提示模块电路图 4软件设计4.1 系统软件实现总体描述系统程序实现三部分功能:时钟部分实现年、月、日、时、分、秒、星期显示和设置功能;温度测量部分实现环境温度测量及显示;键盘部分为时钟设置提供操作功能。本系统的程序采用C语言编写,为了便于修改和调试,系统软件采用模块化设计,程序的编写编译在Keil uVision3软件中完成。首先对STC89C52、DS1302、LCD1602、DS18B20进行初始化,日历和温度信息通过LCD1602显示出来。4.2 主程序软件实现主程序流程如图4-1所示。 图4-1程序流程图 图4-2 DS18B20模块子程序流程图上电开始进行单片机系统的初始化,LCD1602屏幕的初始化,读取全部的时间信息,启动温度转换,读取当前的温度信息,在已设置好显示格式的液晶屏幕上显示时间、温度。扫描是否有按键的操作,如果有就对不同的键值进行相对应的处理,如果没时钟就开始运行。4.3 DS18B20模块软件实现DS18B20模块子程序流程如图4-2所示。首先控制器对DS18B20进行复位,给它低电平的信号,当DS18B20接到此复位信号,会向控制器会发一个芯片的存在脉冲检验,这时控制器知道DS18B20在总线上已做好操作。然后控制器对DS18B20读写操作,让它进行温度转换,读取经过转换的数据,该数据为LCD1602液晶显示模块提供温度显示。在这里一直弄不明白控制器如何对DS18B20进行写和读的命令操作,通过弄清楚写0、写1和读0、读1的时序过程,终于成功完成相关的命令操作。4.4 LCD1602模块软件实现LCD1602液晶显示模块子程序流程如图4-3所示。 图4-3 LCD1602液晶显示模块子程序流程图 图4-4 DS1302模块子程序流程图控制器向液晶显示器写指令设置其显示的格式,即设置16*2行、5*7点阵、8位数据接口,写字符指针和光标自动向右移动,开显示、不显示光标、光标不闪烁,显示清屏。然后控制器向液晶显示器写入时间显示,写入秒、分、时、星期、日、月、年的数据。最后,控制器写入来自DS18B20模块提供的温度显示数据。在写入秒、分、时、星期、日、月、年的数据时,它们在液晶屏幕显示的位置一直弄得很混乱,后来通过认真了解每个字符显示所对应的设置,分两层显示,完成了较好的显示排版。4.5 DS1302模块软件实现DS1302模块子程序流程如图4-4所示。控制器向DS1302送一字节数据子程序,读取DS1302一个字节子程序。向DS1302某地址写一字节数据子程序,读取DS1302相应地址子程序。初始化DS1302子程序,写入时钟数据,读取DS1302时间子程序,读取出时钟数据,将读出的数据转换为十进制,为LCD1602显示模块提供时钟显示数据,并更新LCD1602显示时间。一开始时由于没有把将从DS1302读出的数据进行十进制的转换,LCD1602无法显示时间,通过认真查阅LCD1602手册,才知道问题的所在。 4.6 上电提醒模块软件实现上电提醒模块子程序流程如图4-5所示。图4-5 上电提醒模块子程序流程图控制器上电后通过与蜂鸣器模块相连的IO口输送低电平,三极管导通,蜂鸣器电路形成回路,蜂鸣器发出声音,延时500ms后,控制器再向IO口输送高电平,三极管截止,蜂鸣器停止发声。通过蜂鸣器短暂的发声,完成系统上电提示的功能。4.7 按键模块软件实现按键模块子程序流程如图4-6所示。图4-6 按键模块子程序流程图系统中有四个按键,即:菜单键K0、上调键K1、下调键K2、退出键K3、复位键K4。按下K0键,系统进入菜单设置状态,再继续按下光标可在除温度之外的不同的项目上停留,如按下一次时在秒上停留,随着按下的次数的增加,光标会在分,时,星期,日,月,年上依次停留,直到按下第七次,系统退出菜单设置状态。在光标在不同的项目上停留时,按下上调键K1即可进行相关项目数据的加一操作,按下下调键K2即可进行相关的减一操作。按下退出键K3键则会退出当前任何的菜单设置操作。按下复位键K4,时钟不再显示当前时间,会回到系统设置的时间,并重新开始计时。4.8系统软件仿真系统软件仿真如图4-7所示。图4-7 系统软件仿真图在仿真图里可以看到显示屏第一行显示的是时钟的年、月、星期和日,第二行显示的是时、分、秒以及温度,完成了多功能电子钟的基本功能要求。5系统调试与结果分析5.1 最小系统的调试 使用Proteus软件设计完电路图后,首先在电路板上焊制了单片机最小系统,通过向芯片中写入让每个引脚持续规律地在1和0电位转换的程序,将引脚接到发光二极管之后,发光二极管可以规律地亮或者灭,这说明实现了最小系统的测试。这样可以继续焊制后面的模块。5.2 液晶显示模块和蜂鸣器提示模块的调试液晶模块的显示是通过普中科技单片机箱来调试的,由于该试验箱中同样有LCD1602芯片,所以向此芯片中写入简单的显示012的小程序,可以正常显示。蜂鸣器报警模块的调试同样是通过最小系统的那个小程序,写入之后,报警模块的蜂鸣器如预期一样产生提示音,发光二极管亮灭。5.3 整体调试进行整体调试的时候发现,液晶显示无法定格在一个画面,而是一直跳动。经过仔细检查焊点,并重新接线之后问题仍然存在。所以判断是按键模块出了问题,比如虚焊或者某个按键接错了变成长导通的状态。但是将按键模块剔除出系统后,发现问题仍然存在。然后判断是时钟模块出现问题,但是将时钟芯片拔除后发现问题仍然存在。最后判断应该是最小系统及周边电路出现问题。所以我重新焊制了一个最小系统,重新接线后,画面可以定格,日历和温度信息正常显示。至此,系统调试成功。5.4 实物图图5-1 电路实物图6总 结本设计完成了多功能高精度电子钟的基本功能要求,硬件电路主要由单片机最小系统电路、按键模块、温度测量模块、时钟芯片模块、LCD1602液晶显示模块等模块组成,软件方面则是通过C语言对系统进行编程,这体现了本设计的实时性和灵活性。系统实现了以下多种功能:(1)显示年、月、日、星期等日历相关信息。通过按键设置年月日和时钟的具体时间。(2)上电蜂鸣器提示。 (3)实时温度显示。本设计还有一些地方可以改进:(1)增加音乐闹钟提醒功能。该功能可以极大方便人们日常生活的需要,提醒人们时间的重要性。时钟加入这个功能而且大大地扩展了钟表原先的报时功能,适应其发展的趋势。(2)可以增加一个背光自动调节功能。该功能主要是通过液晶显示屏LCD1602外接光敏三极管来实现,但考虑到器件价格及时间方面的限制,放弃了这个部分。但若能有这个功能,则夜晚的时候背光灯更亮,白天的时候背光灯较暗,这也间接起到了节能的作用。参考文献1 王云涛,王楠.浅谈多功能数字钟的设计J.山东电力高等专科学报.2005.4(8):71-722 刘长勇,叶希梅.基于DS18B20的温度测量装置的设计J.鲁东大学学报(自然科学版).2009.25(3):225-2283 林军,谢晓斌.用8031单片机控制的数字钟J.半导体技术.2002. 2:40-444 严芸.浅谈温度传感器的现状与发展J.大众科技.2006.5:38-395 张开碧,王浩,曾勇斌.基于STC89C52单片机的多功能数字钟的设计J.科技信息.2010.35:76 薛小玲,刘志群,贾俊荣.单片机接口模块应用与开发实例详解M.北京:北京航空航天大学出版社,2010.375-3767 朱华光.LCD1602编程中一些问题怎样解决J.电脑编程技巧与维护.2010.15:90-918 “广电电器网”Z,/html/s696/2012-02.htm(2012/2/18)9 张开碧,王浩,曾勇斌.基于STC89C52单片机的多功能数字钟的设计J.科学之友:下旬.2010.(35):7附 录附录A:程序代码主程序代码#include #include #include Main.h#include KeyScan.h#include System.h#include DS1302.h#include Temperature.h#include LCD1602.hvoid main(void)InitSystem(); while(1)if(TimeOutFlag=1)TimeOutFlag = 0;readAllTime();Convert_Temperature();/ 启动温度转换,需要750mslcd_write_temperature(Read_Temperature(); /显示温度 KeyScan(); void InterruptTimer0(void)interrupt 1 using 1TL0 = 0x00;/设置定时初值 TH0 = 0x4C;/设置定时初值 CounterTimer0+;if(CounterTimer0=20) CounterTimer0 = 0;TimeOutFlag = 1; 模块子程序代码#include Temperature.h#include GPIO.hextern delay(unsigned int); /延时函数 /*函数功能:复位DS18B20 入口参数:无 返回参数:无 */void DS18B20Reset(void)U16 i;Temperature = 0;/* 拉低约900us */i = 100;while (i0)i-;Temperature = 1;/ 产生上升沿 i = 4;while (i0)i-;/*函数功能:应答DS18B20 入口参数:无 返回参数:无 */void DS18B20_Ack(void)U16 i;while(Temperature);while(Temperature);/ 检测到应答脉冲 i = 4;while (i0)i-;/*函数功能:读取DS18B20一个bit的数据 入口参数:无 返回参数:当前数据位信息 */bit DS18B20_Read_Bit(void)U16 i;bit b;Temperature = 0;i+;Temperature = 1;i+;i+;/ 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效 b = Temperature;i = 8;while(i0) i-;return (b);/*函数功能:读取DS18B20一个byte的数据 入口参数:无 返回参数:当前一个字节的数据 */U8 DS18B20_Read_Byte(void)U8 i,j,b;b = 0;for (i=1;i=8;i+)j = DS18B20_Read_Bit();b = (j1);return(b);/*函数功能:向DS18B20写入一个byte的数据 入口参数:要写入的一个字节数据 返回参数:无 */void DS18B20_Write_Byte(U8 b)U16 i;U8 j;bit btmp;for(j=1;j1;/ 取下一位(由低位向高位) if (btmp)/* 写1 */Temperature = 0;i+;i+;/ 延时,使得15us以内拉高 Temperature = 1;i = 8;while(i0) i-;/ 整个写1时隙不低于60us else/* 写0 */Temperature = 0;i = 8;while(i0) i-;/ 保持低在60us到120us之间 Temperature = 1;i+;i+;/*函数功能:温度转换 入口参数:无 返回参数:无 */void Convert_Temperature(void)DS18B20Reset();/ 产生复位脉冲,初始化DS18B20DS18B20_Ack();/ 等待DS18B20给出应答脉冲 delay(1);/ 延时 DS18B20_Write_Byte(0xcc);/ skip rom 命令 DS18B20_Write_Byte(0x44);/ Convert_Temperature T 命令 /*函数功能:读取DS18B20温度 入口参数:无 返回参数:当前温度 */U8 Read_Temperature(void) U8 shu ,a1,a2,a3,a4 ,tplsb,tpmsb;U8 a11,a22,a33,a44; DS18B20Reset();/ 产生复位脉冲,初始化DS18B20 DS18B20_Ack();/ 等待DS18B20给出应答脉冲delay(1);/ 延时DS18B20_Write_Byte(0xcc);/ skip rom 命令DS18B20_Write_Byte(0xbe);/ read scratchpad 命令tplsb = DS18B20_Read_Byte();/ 温度值低位字节(其中低4位为二进制的小数部分)tpmsb = DS18B20_Read_Byte();/ 高位值高位字节(其中高5位为符号位)a1=tplsb&0x08 ; a1=a13 ; a11=a1*5 ;a2=tplsb&0x04 ; a2=a12 ; a22=a2*3;a3=tplsb&0x02 ;a3=a31 ; a33=a3*1 ;a4=tplsb&0x01 ; a44=a4*1 ;shu=(a11+a22+a33+a44);tplsb=tplsb4;tpmsb=tpmsb&0xf7;tpmsb=tpmsb0)i-;Temperature = 1;/ 产生上升沿 i = 4;while (i0)i-;/*函数功能:应答DS18B20 入口参数:无 返回参数:无 */void DS18B20_Ack(void)U16 i;while(Temperature);while(Temperature);/ 检测到应答脉冲 i = 4;while (i0)i-;/*函数功能:读取DS18B20一个bit的数据 入口参数:无 返回参数:当前数据位信息 */bit DS18B20_Read_Bit(void)U16 i;bit b;Temperature = 0;i+;Temperature = 1;i+;i+;/ 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效 b = Temperature;i = 8;while(i0) i-;return (b);/*函数功能:读取DS18B20一个byte的数据 入口参数:无 返回参数:当前一个字节的数据 */U8 DS18B20_Read_Byte(void)U8 i,j,b;b = 0;for (i=1;i=8;i+)j = DS18B20_Read_Bit();b = (j1);return(b);/*函数功能:向DS18B20写入一个byte的数据 入口参数:要写入的一个字节数据 返回参数:无 */void DS18B20_Write_Byte(U8 b)U16 i;U8 j;bit btmp;for(j=1;j1;/ 取下一位(由低位向高位) if (btmp)/* 写1 */Temperature = 0;i+;i+;/ 延时,使得15us以内拉高 Temperature = 1;i = 8;while(i0) i-;/ 整个写1时隙不低于60us else/* 写0 */Temperature = 0;i = 8;while(i0) i-;/ 保持低在60us到120us之间 Temperature = 1;i+;i+;/*函数功能:温度转换 入口参数:无 返回参数:无 */void Convert_Temperature(void)DS18B20Reset();/ 产生复位脉冲,初始化DS18B20DS18B20_Ack();/ 等待DS18B20给出应答脉冲 delay(1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论