资源描述
本科毕业论文(设计)(2015 届)火车站广场数字钟显示系统设计院 系 电子信息工程学院 专 业 电气工程及其自动化 姓 名 指导教师 讲师 助教 年 5 月学号:1108441048I摘 要本文介绍了一种基于 AT89S52 单片机的硬件架构的多功能电子日历的硬件和软件的设计方法。该电子钟设计主要是由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。AT89S52 单片机被用来作为控制器,以串行时钟芯片 DS1302 来记录日历和时间,也可以对年、月、日、小时、分钟和秒进行计时,还具有闰年补偿等功能。温度芯片 DS18B20 被用来采集温度数据,电子钟采用直观的数字显示,数字显示模块被用来显示数据,可以在数据显示上同时显示年、月、日、时、分、秒,还具有一个时间校准功能。这种日历具有读取方便、显示直观、多功能、电路简单、成本低廉等诸多优点,具有广阔的市场前景。关键字:万年历 温度计 数码管显示IIAbstractThis paper introduces the design of multi-function electronic calendarAT89S52 microcontroller hardware, software and hardware based on.The design of the data display module, the temperature acquisition module, processing module and setting module, four modules. And the serial clock calendar chip DS1302 calendar and time controller of AT89S52 system, it can be the date and time, minutes and seconds, also has a leap year compensation function. DS18B20 chip temperatureacquisition, display data display of the object, the use of digital calendar,digital liquid crystal display module, can be carried out, at the same timeevery year, month, day, hour, minute, second Sunday, and timealignment function. The calendar is easy to read, intuitive display, flexible,simple circuit, low cost and other advantages, has broad market prospects.Key words:Perpetual Calendar thermometer displayIII目 录摘 要 IABSTRACT.II目 录 III1 绪论 11.1 研究背景 11.2 国内外研究现状 11.3 研究意义和目的 12 系统总体设计 22.1 设计要求 22.2 系统设计方案 23 系统硬件设计 33.1 时钟芯片 DS1302 的性能简介及接口电路设计 33.2 温度芯片 DS18B20 接口设计与性能分析 .43.3 数码管显示 .53.4 按键设计 .53.5 复位电路的设计 .64 系统软件设计 .74.1 软件功能概述 .74.2 主程序流程图的设计 .85 联调与测试 95.1 调试过程 .95.2 硬件调试 .95.3 软件调试 10IV结论 .11致谢 .12参考文献 .13附录 A:系统的原理图 .14附录 B:系统的 PCB 图 .15附录 C:系统的源程序 .1611 绪论1.1 研究背景随着技术的快速发展通道,从观看太阳来判断时间到摆钟再到现在的数字电子钟,是人类的智慧的不断创新和突破。数字电子钟可以显示年、月、日、时、分和秒,而且还有闰年补偿等功能,而且该时钟芯片的寿命较长,误差相对较小。使用直观的数字显示,可以显示年、月、日、时、分、秒和温度等信息,它还具有一个时间校准功能。数字电子时钟的电路采用的是单片机AT89S52,具有耗能低的优点,可以在 3V的低电压下工作。这个日历具有方便阅读、显示直观、功能多样、电路简单、成本低等诸多优势,在发展迅速的信息时代,具有很好的市场前景和研究价值。1.2 国内外研究现状电子技术是 20 世纪第十九年代末的一种新技术,从上世纪二十年代开始发展最迅速,得到了广泛的应用,电子技术的发展已经成为了科学发展的一个重要的标志。电子技术的功能多样化,体积小,低功耗等特点,促进社会生产力的发展。郭沫若先生曾把时间比喻成生命以及速度和力量,可见时间对于我们来说是非常之宝贵的,在我们的日常工作,学习当中时间观越来越重要。在信息技术高速发达的二十一世纪,时间对于我们来说似乎消费的特别快,时间在工作中,学习中,上下班的路上不知不觉的就消逝了, 工业生产,每一步都有严格的时间限制,要做到技术精确,时间是重中之重。准确理解和实时知道时间,是我们学习,工作,生活中不可缺少的组成部分。机械的钟表虽然也可以告知人们时间和显示日期,但是由于其机械结构,功率和尺寸的限制,相比于性能更好的数字电子钟而言是注定要被淘汰的。电子时钟通常被应用于电子电路,计时装置,也广泛应用于家庭,户外广场,公交站和火车站。由于数字集成电路和石英晶体振荡被广泛应用数字电路,使得数字钟的精度更加准确,给人们的生产和生活带来了极大的方便。如 scheduleautomatic 自动报警系统,定时打铃,灯炉定时开关,电源设备,甚至所有的时间自动启用设备的基础都是数字钟表。因此,更先进的电子数字钟的设计,其市场的前景费长的广阔。实时温度显示系统的技术已经成熟,如在室温下显示,空调远程控制显示温度,热水器。如果我们能准确显示电子时钟以及其它电子设备的实时温度,无疑将会对我们的生活地阿莱极大的帮助,可以让我们了解周围的环境和必要的措施的变化。1.3 研究目的与意义电子这项新兴技术是在十九世纪初开始发展起来的,发展最为迅速的时期是在二十世纪初期,如今已成为了科学技术发展的一个重要的标志。在它的推广下现代电子产品正在以前所未有的速度朝着功能多样化,功耗最低化的方向发挥发展。电子技术的发展,2有力地推动了社会生产力的发展。在信息技术高度发达的二十一世纪,机械手表,虽然它也可以告知市民时间,也可以定时,显示日历。然而,由于其机械结构,功率和体积都没有办法与电子时钟进行比较,从而其发展必然会受到限制。当电子电路,定时装置,秒数字显示被应用于电子时钟后,促进了电子时钟被广泛广泛用于个人家庭,户外广场,公交站和火车站,同时也大大扩大了原来的手表报时功能。如定时自动报警,定时广播,自动启动和关闭的照明工具,定时开关箱,以及其他各种定时自动设备,所有这些的基础都是数字时钟的应用。随着社会的进步,人们越来越多地转向产品功能多样化。你还可以将温度实时显示应用于电子钟以准确的显示环境温度,那么将给生活,工作和工业生产带来了极大的方便,同时也让我们明白的变化,根据环境温度的实时性采取相应的措施。这次毕业设计的实物操作,通过把理论与实践的融合在一起,使我进一步加深了对单片机的结构的理解,编程的能力也得到了提高。在实践过程中学习到新的知识,也遇到过一些问题,经过老师的指导和同学的帮助,问题也被一一解决。同时,希望我们的劳动的结晶能够对读者有一定的帮助,并能从中得到一些启发。2 系统总体设计2.1 设计要求系统的总体设计要求是利用四个模块以及时钟芯片来实现数据的显示、实时环境温度的数据采集、时间的处理和调整的功能。时钟芯片可以记录日历并显示日历和时间,也可以对年、月、日、小时、分钟和秒进行计时,而且还有闰年补偿等多种功能,还具有时间校准功能。考虑到该设计的实际应用环境,应该使该电子钟显示比较直观、读取相对方便、功能多样化、价格也比较低廉、具有良好的实用性、普及起来比较方便。 2.2 系统设计方案数字电子钟总体设计方案应该在系统功能可以实现的前提下,充分考虑该电子钟系统使用的环境,所选的结构要简单使用、易于实现,器件的选用着眼于合适的参数、稳定的性能、较低的功耗以及低廉的成本。综合考虑,系统硬件设计框图如图 1 所示:3图 1 硬件电路框图3 系统硬件设计3.1 时钟芯片 DS1302 的性能简介及接口电路设计3.1.1 时钟芯片 DS1302 的性能简介时钟芯片DS1302是通过与微控制器的连接来实现其功能的,微控制器能够提供包括秒、分、实时信息、日、月、年等信息,并且可以实现闰年天数的自动调整功能,它也具有用于主电源和备用电源的双电源引脚,在主电源被关闭的状态下,也能维持该时钟连续运行,此外,它还可以提供31个字节的缓冲高速RAM中的数据。3.1.2 时钟芯片 DS1302 接口电路设计DS1302时钟芯片的工作原理是选择VCC1 和VCC2 两个当中的较大者来供给时钟芯片的用电需要。时钟芯片的的接口电路如图2所示:AT89S52电 源 模 块温 度 模 块独 立 按 键 时 钟 模 块显 示 模 块闹 钟 模 块4图2 DS1302的接口电路3.2 温度芯片 DS18B20 接口设计与性能分析3.2.1 温度芯片的性能简介DS18B20温度传感器是最新智能温度传感器,与一般的热电阻有的区别在于测得的实时温度可以被直接读取出来,可以通过简单的编程实现数字读取。应用“一线总线”传输现场的实时温度,提高了抗干扰性。该芯片可以被应用于相对比较恶劣的环境中,而且具有功耗低、所需电压范围低、分辨率高等特点。因此是很好的选择。3.2.2 温度芯片的接口电路的设计该系统采用数字温度传感器DS18B20,具有精度高,操作简单的电路连接特性,这种传感器需要进行数据传输,与DS18B20 DQ P3.7口连接只有一个数据线。其接口电路如图3所示:5图3 温度传感器的接口电路3.3 数码管显示模块该数字电子钟设计采用的显示模块是八段数码管显示模块,所谓八段数码管就是指数码管里面有八个晓得 LED 发光二极管,LED 亮灭被用来显示不同的字形。数码管的类型有两种,他们分别是共阳极和共阴极。其中共阴极的发光原理是将八个 LED 的阴极连在一起并接地,然后给八个 LED 其中一个的另一端输入高电平,它便能被点亮。显而易见,共阳极的点亮原理是将八个 LED 的阳极连在一起,然后给八个 LED 其中一个的另一端输入高电平,它便能够被点亮。综上所述,数码管显示模块及其接口电路如图 4 所示:图 4 数码管显示3.4 按键模块设计该系统使用五个按钮,其中一个被用于手动复位,其他的被用于独立按钮,查询相6对比较简单,占用CPU资源低,四个独立的按钮,分别与单片机的P3.4、P3.5、P3.6、P3.7接口连接。按键电路如图5 所示:图 5 按键电路3.5 复位电路的设计当单片机的复位引脚出现两个以上的高电平周期时,复位操作即可被完成。如果复位RST持续处于高电平的状态,那么程序将无法被执行。所以单片机复位后要脱离复位状态。在实际的应用中,考虑到电源的稳定时间不同、参数会发生漂移、以及晶振稳定时间和其他因素的影响,单片机必须有足够的裕度。根据该设计的要求,复位操作的基本形式有上电复位和手动复位两种。对上电复位操作中,复位会在接通电源后完成。 AT89S52单片机上电复位本质上是一个上电延时复位。在单偏激初始上电后,第一个工作的是复位电路。复位电路把单片机锁定在复位状态,并且保持一个延迟,让电压拥有一个达到稳定的时间,当电压稳定后,再插入一个延迟,给时钟振荡器一个达到稳定的时间; 在单片机进入运行状态之前,还要至少推迟两个机器周期的延迟。这种设计的复位电路采用了电且开关,通电后,因为电容保持充电状态使电路处于高电平。当微控制器正在运行之中,按下复位按钮还使得RST高电平一段时间,实现了开关的复位操作。综上所诉选用电容值为10F和电阻值为4.7K 的的电容。复位电路如图6所示:7图6 复位电路4 系统软件设计4.1 软件功能概述自动控制系统的一个重要的组成部分就是软件功能,它的功能的完善程度直接影响了一个系统是否能够最大化的发挥作用,在一个系统确定下来硬件以后,软件的指导和系统的严密监控是硬件能够实现稳定工作的关键,同时,优异的软件对系统后期的升级优化有相当大的帮助。数字电子钟的功能是在程序控制下实现的。软件设计和系统相对应的硬件设计,根据其在程序的总体功能中实现功能的不同将它们分为几个不同的模块,用于设计、编程以及调试,最终被主程序连接起来实现整体功能。这是一个很好的方案,增强了程序的可移植性。公历计算程序、温度测量程序以及键扫描输入等被应用于该系统的软件部分。当程序开始运行时最先要做的是初始化,各单片机的引脚初始化状态是根据程序的初始化命令而进行的,初始化完成后进行温度的测量与数据收集,然后运行公历计算程序,获得日历时间和日期信息,然后运行程序键扫描,检测有没有按下按钮,如果没有按钮被按下,则按节日计算程序得到的公历日期信息来计算节日,如果按下一个按钮,则将按键修改后的更新的关键变量递送给节日计算程序从而计算出节日。显示程序将在计算完成后将得到的公历信息、温度数据、节日信息送给对应的数码管将其显示出来。84.2 主程序流程图的设计数字电子钟系统的总体设计要求是利用四个模块以及时钟芯片来实现数据的显示、实时环境温度的数据采集、时间的处理和调整的功能。所以数字电子钟的主程序流程图如图7所示:开始返回D S 1 3 0 2 初始化设置 D S 3 0 2读取年 、 月 、 日 、星期 、 时 、 分 、 秒将读取的数据处理后送数码管显示图7 主程序流程图4.2.1 DS1302 读写程序设计该系统对时间的读取主要是通过对时钟芯片 DS1302 的操作来实现的,在硬件设计上的时钟芯片连接到控制器时需要三线,即 SCLK( 7),I / O(6),RST(5),具体连接图查看系统的硬件设计原理图。当时钟芯片与处理器的数据交换的时候,首先是一个命令字节由处理器向电路发出,最高位的命令字节必须是逻辑 1,如果是逻辑 0,则命令字节禁止被发出;当 D6 等于 0 时,时钟数据被指定,当 D6 等于 1 时,RAM 数据被指定 ; D5D1 特殊寄存器指定的输入或输出; 最低位 D0 为逻辑 0 时,指定写操作为输入,当 D0 为逻辑 1 时,指定读操作为输出 。94.2.2 温度程序的设计初始化、读和写是单总线上最基本的三种操作,所有其他操作都是由这三种基本操作的组合来完成的,初始化被用于设备在总线上的状态复位,写被用于主节点向总线上传入一位数据,读被用于总线上数据的读取。在这三种类型的操作,写操作是单向的,初始化和读操作是双向的。5 联调与测试5.1 调试过程对于一个自控系统而言,调试一般需要进行硬件调试和软件调试,在一定的分析与设计的基础上,可以一边进行硬件制作,一边进行相应的调试,这样对问题的及时分析和解决有很大帮助,不容易出现太多问题积累的现象,不至于后期出现一个问题导致整个设计全部需要被检查,甚至出现设计需要重新开始的问题,所以做好前期的硬件调试工作,可以避免在调试这一环节浪费大量时间。而在软件编写过程中,最好是分模块编写,在硬件调试成功的基础上,就可以做系统整体的调试,而本设计成功的关键就是运用了联机调试。5.2 硬件调试系统通电后观察系统是否能正常运行,如果不能,则根据原理图对电路进行分模块检测,看是否存在不正常焊接问题,如果焊接不存在问题,则再进一步检测下一环节,直到找出问题并解决问题。单个芯片的编译目标代码,可连接到该开始调试硬件电路的5V电压源。如果结果不符合设计要求,再次检查是否正确连接电路,硬件电路的调试工作的连接点,或检查代码程序符合硬件电路设计,如果它是错的,使相应的修改,编译,则调试硬件电路。直到调试正确的结果重复此过程。如图显示的分别是时期、温度和时间。105.3 软件调试(1)上的计算机程序调试软件的 Keil,程序调试运行时,如果显示为 0 的错误(S),0 个警告(S)证明代码是正确的。(2)在负载 Proteus 软件绘制电路中的程序代码的示意图,以 AT89S52 单芯片中,进行模拟。如果发生错误,调试,然后相应地修改仿真,调试直到正确的结果后查看错误。11结论在整个设计过程中,硬件系统主要由AT89S52单片机、DS1302接口电路、DS18B20接口电路、闹钟系统以及显示系统组成;软件通过各种渠道的信息手段,主要的设计由公历数据读取程序、公历农历转程序、温度采集程序,数字显示程序和闹钟程序组成;调试系统主要是通过AT89S52的开发板,再经Keil公司,STC的手段,为自己建了一个小的外围电路实现;再由分步调试将阳历的日期及时间显示出来,以及实时的温度。此电子钟具有显示直观、功能多样、电路简单、成本低廉的优点,因此发展前景非常广阔。整个设计过程中学到了很多新的知识,知道了电路的焊接虽然不是什么大问题,但在整个作品中也具有相当重要的地位。电路工程师一个心细的活并不能着急,这样才能布局清晰、美观大方。在本设计中,让我明白了做什么事情都不能投机取巧,要一步一个脚印,这样才能把事情做好。能学习到新的知识这永远是最重要的。总之,此次毕业设计的过程,使我的能力得到了全方位的提高,当然此次的设计尚有很多需要改进的地方,这也是我不断学习新知识的动力。12致谢能够顺利完成此次毕业设计,首先我要感谢我的知道老师刘栋材老师,还有同样给予很大帮助的王俊杰老师,是他们的悉心指导和严格要求,才让我圆满完成了任务。谨向导师和所有帮助过我的老师致以崇高的敬意和衷心的感谢。也感谢我的家人,朋友和所有宿舍的室友,他们给我创造一个良好的学习环境,在学习和生活中给予了我莫大的支持和帮助。我会一直督促自己更加努力,不辜负老师、亲戚、朋友对我的期望。特别感谢我的第一个毕业设计导师王俊杰老师,从论文的选题到设计到最终定稿,每一步都有老师辛勤的汗水。研究细致,勤奋和不懈的工作态度,扎实勤勉的他也会一直激励着我努力学习,推动我前进,这将是我终身受益。同时也为所有教师表达我深深的谢意!正是他们的教导丰富了我的知识面、拓展了我的视野,谢谢你们的知道,这将是我一生的财富,谢谢你们!作者:李鹏飞2015 年 5 月 日13参考文献1陈明荧 8051 单片机课程设计实训教程M北京:清华大学出版社2苏平. 单片机的原理与接口技术M.北京:电子工业出版社,2006:1-113.3王忠民.微型计算机原理M.西安:西安科技大学出版社,2003:15-55.4何立民单片机高级教程M北京:北京航空航天大学出版社,2003年5纪宗南.单片机外围器件使用手册M.北京:北京航空航天大学出版社,622-655.6周雪.模拟电子技术 M西安: 西安电子科技大学出版社,2005:81-95.7左金生.电子与模拟电子技术M.北京:电子工业出版社,2004:105-131.8新编单片机原理与应用(第二版).西安电子科技大学出版社,2007.29张萌.单片机应用系统开发综合实例M. 北京:清华大学出版社,2007.710王越明.电子万年历的设计J.黑龙江科技信息,2004 年11 Richard Blanchard, James Harden. Mosfets control more power in the same-sized package .Electronic Design, 1982, 12 :10711412 Daniel E. Geer, Jr. (Editor), Mary Ann Davidson, Marc Donner, Lynda McGhie, and Adam Shostack.13 Menozzi G.Eurimus approved 19 projects for total amount of Euro 89 million.MSTnews.2000.514附录 A:系统原理图15附录 B:系统 PCB 图16附录 C:系统源程序#include /调用单片机头文件#define uchar unsigned char /无符号字符型 宏定义 变量范围0255#define uint unsigned int /无符号整型 宏定义 变量范围065535#include “ds1302.h“/数码管段选定义 0 1 2 3 4 5 6 7 8 9uchar code smg_du=0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xBa,0x20,0x28,0x30,0x25,0xe4,0x23,0x64,0x74,0xff; /断码/数码管位选定义uchar code smg_we=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/数码管位选定义uchar dis_smg8 = 0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xBa;uchar smg_i = 8; /显示数码管的个位数bit flag_200ms ;bit flag_100ms ;bit flag_500ms; /500ms标志位sbit beep = P37; /蜂鸣器定义bit flag_beep_en;uint clock_value; /用作闹钟用的uchar flag_s = 0x03;/控制数码管闪烁的变量sbit dq = P31; /18b20 IO口的定义uint temperature ; /温度变量uchar flag_nl; /农历 阳历显示标志位uchar menu_1,menu_2,menu_i;sbit dat0 = B0;sbit dat1 = B1;sbit dat2 = B2;sbit dat3 = B3;sbit dat4 = B4;sbit dat5 = B5;sbit dat6 = B6;sbit dat7 = B7; /控制数码管闪烁的函数void smg_s(uchar dat)B = dat;if(dat0 = 1)dis_smg0 = 0xff;17if(dat1 = 1)dis_smg1 = 0xff;if(dat2 = 1)dis_smg2 = 0xff;if(dat3 = 1)dis_smg3 = 0xff;if(dat4 = 1)dis_smg4 = 0xff;if(dat5 = 1)dis_smg5 = 0xff;if(dat6 = 1)dis_smg6 = 0xff;if(dat7 = 1)dis_smg7 = 0xff;/*延时函数*/void delay_uint(uint q)while(q-);/*1ms延时函数*/void delay_1ms(uint q)uint i,j;for(i=0;i 0) /1dis_smg1 = smg_du10; /Adis_smg2 = smg_du2; /2dis_smg3 = smg_du10; /Adis_smg4 = smg_du3; /3dis_smg5 = smg_du10; /Adis_smg6 = smg_du4; /4dis_smg7 = smg_du10; /Asmg_i = 8;elsesmg_s(flag_s);if(menu_1 = 1) if(flag_500ms = 1)dis_smg0 = smg_dumiao % 16; /显示秒dis_smg1 = smg_dumiao / 16; /dis_smg2 = 0x7f; dis_smg3 = smg_dufen % 16; /显示分dis_smg4 = smg_dufen / 16; /dis_smg5 = 0x7f; dis_smg6 = smg_dushi % 16; /显示秒dis_smg7 = smg_dushi / 16; /elsesmg_s(flag_s);if(menu_1 = 2) if(flag_500ms = 1)dis_smg0 = smg_duri % 16; /显示日dis_smg1 = smg_duri / 16; /dis_smg2 = 0x7f; dis_smg3 = smg_duyue % 16; /显示月dis_smg4 = smg_duyue / 16; /dis_smg5 = 0x7f; dis_smg6 = smg_dunian % 16; /显示年dis_smg7 = smg_dunian / 16; /elsesmg_s(flag_s);if(menu_1 = 3) if(flag_500ms = 1)dis_smg0 = smg_duweek % 16; /显示星期 dis_smg1 = smg_duweek / 16; /dis_smg2 = 0x7f; if(open1 = 1) /开闹钟dis_smg3 = 0xb0; /OPENdis_smg4 = 0x64; dis_smg5 = 0x70; dis_smg6 = 0xa0; else dis_smg3 = 0x74; /OFFdis_smg4 = 0x74; dis_smg5 = 0xa0; dis_smg6 = 0xFF; 21dis_smg7 = 0xff; elsesmg_s(flag_s);if(menu_1 = 4) if(flag_500ms = 1)dis_smg0 = 0xff; /dis_smg1 = 0xff; /dis_smg2 = smg_dufen1 % 16; /显示分dis_smg3 = smg_dufen1 / 16; /dis_smg4 = 0x7f; dis_smg5 = smg_dushi1 % 16; /显示秒dis_smg6 = smg_dushi1 / 16; /dis_smg7 = 0xff; elsesmg_s(flag_s);/*闹钟报警函数*/void clock_dis()static uchar mm,value;if(flag_100ms = 1) /100ms执行一次flag_100ms = 0;if(open1 = 1) /如果闹钟打开if(miao = 0) /有报警 打开蜂鸣器响的标志位if(flag_beep_en = 1) /闹钟以被打开clock_value+;if(clock_value 30)beep = 1; /蜂鸣器停1秒if(clock_value 40)clock_value = 0;/ 1 分钟后自动关闭闹钟value +;if(value = 10)value = 0;mm+;if(mm = 60)mm = 0;flag_beep_en = 0;beep = 1;/*定时器0初始化程序*/void time_init() 23EA = 1; /开总中断TMOD = 0X01; /定时器0、工作方式1ET0 = 1; /开定时器0中断 TR0 = 1; /允许定时器0定时/*18b20初始化函数*/void init_18b20()bit q;dq = 1; /把总线拿高delay_uint(1); /15usdq = 0; /给复位脉冲delay_uint(80); /750usdq = 1; /把总线拿高 等待delay_uint(10); /110usq = dq; /读取18b20初始化信号delay_uint(20); /200usdq = 1; /把总线拿高 释放总线/*写18b20内的数据*/void write_18b20(uchar dat)uchar i;for(i=0;i= 1;/*读取18b20内的数据*/uchar read_18b20()uchar i,value;24for(i=0;i= 1; /读数据是低位开始dq = 1; /释放总线if(dq = 1) /开始读写数据 value |= 0x80;delay_uint(5); /60us 读一个时间隙最少要保持60us的时间return value; /返回数据/*读取温度的值 读出来的是小数*/uint read_temp()uint value;uchar low; /在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20(); /初始化18b20write_18b20(0xcc); /跳过64位ROMwrite_18b20(0x44); /启动一次温度转换命令delay_uint(50); /500usinit_18b20(); /初始化18b20write_18b20(0xcc); /跳过64位ROMwrite_18b20(0xbe); /发出读取暂存器命令EA = 0;low = read_18b20(); /读温度低字节value = read_18b20(); /读温度高字节EA = 1;value = 8; /把温度的高位左移8位value |= low; /把读出的温度低位放到value的低八位中value *= 0.625; /转换到温度值 小数return value; /返回读出的温度 带小数/*时钟显示*/void init_1602_ds1302()25static uchar value;smg_i = 8;value +;if(value = 5*2) /2秒dis_smg0 = smg_dumiao % 16; /显示秒dis_smg1 = smg_dumiao / 16; /dis_smg2 = 0x7f; dis_smg3 = smg_dufen % 16; /显示分dis_smg4 = smg_dufen / 16; /dis_smg5 = 0x7f; dis_smg6 = smg_dushi % 16; /显示秒dis_smg7 = smg_dushi / 16; /else if(value = 5*4) /2秒dis_smg0 = smg_duri % 16; /显示日 dis_smg1 = smg_duri / 16; /dis_smg2 = 0x7f; dis_smg3 = smg_duyue % 16; /显示月dis_smg4 = smg_duyue / 16; /dis_smg5 = 0x7f; dis_smg6 = smg_dunian % 16; /显示年dis_smg7 = smg_dunian / 16; /else if(value = 5*6) /2秒dis_smg0 = smg_duweek % 16; /显示星期dis_smg1 = smg_duweek / 16; /dis_smg2 = 0xff; dis_smg3 = smg_du12; dis_smg4 = smg_dutemperature % 10 ; /dis_smg5 = smg_dutemperature / 10 % 10 dis_smg6 = smg_dutemperature / 100 % 10; dis_smg7 = 0xff;
展开阅读全文