欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于单片机的多功能万年历设计毕业设计论文(34页).doc

    • 资源ID:37060068       资源大小:378KB        全文页数:34页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的多功能万年历设计毕业设计论文(34页).doc

    -基于单片机的多功能万年历设计毕业设计论文-第 28 页分类号 密级 U D C 中国地质大学江城学院毕业设计(论文)基于单片机的多功能万年历设计 姓 名: 专 业: 电子信息工程 班 级: 学 号: 指导教师: 陈荣 讲师 论文外文题目: The Design of Multi Function Calendar Based on MCU 论文主题词: 多功能万年历 单片机 DS1302 数码管 外文主题词: Multi Function Calendar MCU DS1302 LED 论文答辩日期:答辩委员会主席: 评阅教师:原创性声明本人呈交的毕业论文,是在导师的指导下,独立进行研究工作所取得的成果,所有数据、图片资料真实可靠。尽我所知,除文中已经注明引用的内容外,本毕业论文的研究成果不包含他人享有著作权的内容。对本论文所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确的方式标明。本毕业论文的知识产权归属于培养单位。本人签名: 日期: 摘 要随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中。日历是人们不可或缺的日常用品。但一般日历都为纸制用品,使用不便,寿命不长。电子万年历是一种非常广泛的日常计时工具,它采用智能电子控制和显示技术,改善了纸制日历的缺陷。它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能。本设计采用STC89C52单片机为核心,构成单片机控制电路,用DS1302时钟芯片计时,完成时间的自动调整和掉电保护,DS18B20检测温度,再经过单片机处理后把时间和温度信号通过MAX7219和74HC573驱动20位共阴极数码管显示。日历能显示阳历和阴历年、月、日以及星期、时、分、秒、温度。该万年历设有四个按键:S1、S2、S3、S4键,可以实现日期调整,闹钟功能,秒表功能。关键词:多功能万年历 单片机 DS1302 DS18B20 数码管 ABSTRACTWith the rapid development of world economy and the forthcoming of information era, many kinds of mini-type intelligent domestic electric appliances appear in our life one after another.Calendars are necessary daily goods in peoples life. But they are generally paper goods with inconvenient use and short life.Electronic calendar is a very wide range of daily timing tool,it adopts the technology of intelligent electronic control and display, and then improves the deficiency of paper calendars.It can be years, month, day, week, hour, minutes and seconds for time, but also has a leap year compensation and other functions.The design adopts the core of AT89S52 single chip microcomputer, which constitutes controlling circuit,and integrates DS1302 clock chip, which achieve self-adjusting of time and no power protecting.DS18B20 temperature detection, and then through the single-chip processing time and temperature signal and use 20 common cathode led that driven by MAX7219 and 74HC573 to display.The calendar can display solar and lunar year, month, day, week, hour, minute, second. The calendar has four buttons: S1, S2, S3, S4, can achieve the date of adjustment, alarm function, stopwatch function.Keywords: Multi function calendar MCU DS1302 DS18B20 LED 目 录1 引言12 系统方案选择32.1 控制模块32.2 时钟模块32.3 显示模块42.4 温度检测模块42.5 最终方案选择53 系统硬件电路的设计63.1 系统核心部分STC89C52主控模块63.1.1 STC89C52单片机特性63.1.2 STC89C52单片机引脚及功能73.1.3 STC89C52单片机最小系统设计83.2 时钟模块103.3 温度检测模块113.4 键盘模块123.5 显示模块123.6 扬声器模块154 系统软件的设计164.1 系统初始化164.2 开机显示函数174.3 DS18B20温度检测函数174.3.1 DS18B20的初始化174.3.2 DS18B20的写操作184.3.3 DS18B20的读操作184.3.4 温度检测函数194.4 按键函数204.5 DS1302函数204.6 阴历函数214.7 显示函数224.8 闹钟函数及整点报时函数224.9 秒灯函数235 调试中的问题与解决方法24结束语26致谢28参考文献29附录301 引言随着科技的不断进步与发展,越来越多的电子类产品变得人性化与智能化,在这种大的变化趋势下,钟表类产品当然不会示弱。本次设计的多功能万年历即为生活中随处可见的产品,不管是什么时候,时间总是很重要的,一个好的时钟类产品就是可以让人们一目了然地接受到时间的信息。而随着时代的发展,时钟类产品也从最先的机械式钟表发展出了电子类钟表,让人们的生活变的更加的便捷。本次设计的多功能万年历,以STC89C52单片机为核心,加上DS1302时钟芯片和DS18B20温度传感器,可以实现对阳历年月日星期,时间以及阴历月日和温度的显示。另外,通过本设计的4个按键还可以实现对时间的调整,还可以实现秒表和倒计时功能,以及闹钟功能。本次设计的结构简单,计时准确,可以广泛的应用于家庭以及社会上一些需要时钟显示的场所。而且还可以被用于学校学生的兴趣设计,增强学生的动手能力,因此,本设计具有相当重要的现实意义和实用价值。1.1 系统概述 多功能万年历是一种利用数字电路计算并显示时间等数据的设备,和机械式钟表相比,其显示更直观,计时更精确,且由于没有机械齿轮等磨损性器件,所以具有更长的使用寿命。而且万年历除了可以显示时间外还可以显示年月日星期等信息,如果加入外围器件,还可以显示温度湿度信息等等。本设计是以单片机为核心加上一些外围器件构成,其中单片机选用的是STC89C52,而时钟芯片选用了DS1302,另外加上温度传感器DS18B20感知温度,通过程序处理后,由MAX7219和74HC573驱动20个共阴极数码管显示阳历和阴历,时间,还有温度。在本设计中共设置了四个按键,还有一个蜂鸣器模块,可以通过这四个按键实现对日历时钟信息的调整以及闹钟功能和秒表功能。同时,由于DS1302可以设置备用电池,所以可以很好的形成掉电保护,这样等再次上电后,时间就是此刻,而不用再去校时。本次设计所用功能均通过软件控制实现,电路通过5V供电,直接用手机充电器即可实现稳定工作。本设计的系统框图如图1.1所示,设计简单,时间准确,可以广泛的应用于各种需要时钟显示的场所。显示电路蜂鸣器电路单片机控制电路电源电路软件控制DS1302时钟电路操控电路温度检测电路图1.1 系统框图2 系统方案选择由于现在市面上已经有很多电子万年历产品,且分有很多种类,它们的性能和价格都不尽相同,所以电子万年历应该如何设计才能具有竞争性就尤其重要。正确的方案选择可以使开发的难度大幅降低,这样就可以使开发周期缩短,并降低成本,使产品性能更好,功能接地气,价格更亲民,因而使人们更容易选择这款产品,使它能更快的推向市场。根据本设计最终要实现的功能,可将本系统分为控制模块,时钟模块,显示模块及温度检测模块等。为了能较好的实现各个模块的功能,我分别考虑了以下几种方案,并通过比较分析,从中选择了性价比较高的方案。2.1 控制模块方案1:采用STC89C52单片机作为系统控制芯片STC89C52单片机是STC公司生产的一种低功耗、高性能的CMOS 8位微控制器,其使用了经典的MSC-51内核,但由于做了很多的改进所以使得芯片具备了传统51单片机并不具备的功能。由于STC89C52单片机功耗低,体积较小,技术成熟,成本低,抗干扰性能好,且软件编程灵活,可利用软件编程实现各种算法和逻辑控制,在各个领域应用广泛。方案2:采用MSP430F169单片机作为系统控制芯片 MSP430系列单片机是美国德州仪器公司推出的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor)。MSP430系列单片机可以实现各种复杂的逻辑功能,它将许多功能不同的外设都集成在一块芯片上,模块多,密度高,体积小,提升了稳定性,降低了功耗,适合用于各种需要电池供电的便携式设备中。其中,MSP430F169更是具备了多种工作模式,多个串行接口,硬件乘法器,AD转换等等功能。总体而言,MSP430F169功能更强大,速度更快,与STC89C52对比来说,这些都是优势。但是,MSP430F169作为混合信号处理器,针对本次设计,许多功能未必有用,而且本次设计对处理速度的要求也不是很高,STC89C52同样可以胜任,从成本和方便调试的角度考虑,本次设计选择方案1。2.2 时钟模块方案1:采用STC89C52单片机计时利用单片机的一个16位定时计数器使其每200us发生一次中断,则当中断250*20次后即可产生一个秒信号,然后就可以根据时间的递进关系计算出分、时、日、星期、月、年。然而用单片机实现计时,虽然不用外接时钟芯片,且充分的利用了单片机的资源,但是计时精度却不够高,容易产生误差,而且一旦掉电就会失去所有的数据。方案2:采用DS1302为时钟芯片DS1302是串行接口的时钟芯片,综合性能较好且价格便宜。其采用三线接口(时钟,数据,复位)与单片机进行同步通信,占用资源少,计时精确。而且它采用双电源设计,当主电源断掉时可以启用备用电源(如果设置了备用电源),这样就实现了数据的掉电保护,当再次上电后,系统就可以调用到正确的时间数据。由于采用单片机计时会采用计数器,这样就占用了硬件资源,而且还需要设置中断与算法,也会占用单片机的资源,而采用DS1302计时单片机就可以避免计算时间所占用的资源,且DS1302计时更准确,又具有掉电保护,电路设计也较简单,综上所述,本次设计采用方案2采用DS1302为时钟芯片。2.3 显示模块方案1:采用FYD12864-0402B液晶显示模块作为显示器FYD12864-0402B是一种具备多种接口方式,且自带字库的点阵图形液晶显示器。该显示器和其它同类型的显示器相比,不管是周边电路结构设计,还是显示程序设计都要简单的多,而且它的价格也略低于相同规模的显示器。利用此显示器可以很灵活很方便的构成全中文人机交互图形界面。方案2:采用多位LED数码管构成显示模块采用LED数码管用于显示时,虽然说显示的内容有限,但是也可以显示0到9的数字以及有限的几个英文字母,而且驱动电路和程序的设计非常简单,价格也比液晶显示器要低得多。液晶显示器可以显示很丰富的内容,且硬件设计不复杂,但是本设计中并不需要显示多么复杂的内容,而且相比数码管而言,数码管显示更加清晰易见,液晶显示器显示内容过小,对于电子万年历来说不太直观,实用价值不高。故从经济和实用的角度考虑,本次设计选择方案2.2.4 温度检测模块方案1:采用DS18B20数字温度传感器作为温度检测模块DS18B20体积小、接线少且反应灵敏,可以很方便的用于环境测温。DS18B20是一线式数字温度传感器,只需要和单片机的一个I/O口相连就可以实现双向通讯。它可以实现-55到+125之间的温度测量,且测温误差不超过+/-0.5。方案2:采用DHT11数字温湿度传感器作为温湿度检测模块DH11是一款可以同时测量温湿度的传感器,它采用了专用的传感和数字采集技术,具有很高的可靠性和稳定性。DH11传感器具有响应快,抗干扰能力强,性价比高等特点,且由于其采用了单线串行接口,所以可以很方便的集成进系统,这使得它在很多苛刻的场合都得到应用。DH11可以实现050间的温度测量以及20-90%RH间的湿度测量,其温度测量误差不超过+/-2,湿度测量误差不超过+/-5%RH。由于本设计暂未考虑湿度显示设计,且DS18B20的温度检测更为精确,所以本次设计选择了方案1,采用DS18B20测温。2.5 最终方案选择经过反复考虑,最终确定了如下方案:1) 采用STC89C52单片机作为系统控制芯片。2) 采用DS1302作为时钟芯片。3) 采用多位LED数码管构成显示模块。4) 采用DS18B20数字温度传感器作为温度检测模块。3 系统硬件电路的设计根据本次设计初设想要实现的功能,初步确定本系统由主控模块、时钟模块、温度检测模块、键盘模块、显示模块、扬声器模块等6个模块构成,其电路方案构成框图如图3.1所示。其中,主控芯片采用STC89C52单片机,时钟芯片采用DS1302,温度检测器件采用DS18B20数字温度传感器,显示模块分别由MAX7219和74HC573驱动的共20个LED数码管构成。扬声器模块DS18B20温度检测STC89C52主控模块DS1302时钟模块数码管显示模块键盘模块图3.1 系统电路方案框图3.1 系统核心部分STC89C52主控模块STC89C52是一种以8051为内核的单片机,它具有8位CPU,8KB的ROM,512字节RAM,且具有多种外设。与其它传统51单片机相比,具有更多功能,能满足多数对运算速度要求不高的电子产品的需求,为很多产品提供了一种性价比高的解决方案。3.1.1 STC89C52单片机特性增强型8051单片机,指令代码完全兼容传统8051,可以自由选择6T或是12T时钟时钟周期。工作电压:5.5V3.3V工作频率范围:040MHz,相当于普通8051的080MHz,实际工作频率可达48MHz8KB程序存储器512字节RAM32条I/O口线ISP程序下载,可以直接通过串口升级程序。具有EEPROM功能具有看门狗功能共3个16位定时器/计数器。即定时器T0、T1、T2外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒通用异步串行口(UART),还可用定时器软件实现多个UART工作温度范围:-40+85(工业级)/075(商业级)PDIP封装3.1.2 STC89C52单片机引脚及功能STC89C52单片机的引脚分布如图3.2所示。图3.2 STC89C52单片机STC89C52单片机引脚功能说明: (1)VCC和GND分别是STC89C52的电源输入端和接地端。 (2)XTAL1和XTAL2是单片机的时钟引脚,当采用外部时钟信号时,XTAL1接晶振,XTAL2悬空,当采用内部时钟时,两个引脚均要接上晶振,并在晶振两端与地之间接上2033pF的小电容,使时钟起振,并使时钟更稳定。 (3)RST为复位引脚,当需要复位单片机时,给这个引脚两个机器周期以上的高电平,即可使单片机复位。EA引脚是单片机的外部存储允许位,当单片机只需要访问内部存储时,直接将EA引脚拉高即可。ALE/PROG和PSEN是单片机与外部存储通讯的引脚。 (4)P0、P1、P2、P3端口均可作普通I/O口使用,其中一些端口还具有第二功能,由于本次设计并没有多少涉及第二功能的使用,此处就不介绍了。 3.1.3 STC89C52单片机最小系统设计单片机最小系统是一个控制系统的核心,主要有单片机以及晶振、复位电路和电源电路组成,单机最小系统可以通过I/O口和各种外围电路结合,然后通过编写程序实现你想要实现的各种功能。STC89C52单片机构成的最小系统简单且可靠,在用STC89C52单片机设计最小系统时,只需要为单片机接入晶振电路、时钟电路和复位电路即可,其结构如图3.3所示,由于STC89C52单片机自身的限制,此最小系统只能运用于对运算速度要求不高的设计。STC89C52单片机电源电路复位电路晶振电路图3.3 STC89C52单片机最小系统结构(1)电源电路STC89C52单片机采用5V供电,最初是准备利用变压器产生18V电压,然后通过7805三端稳压器降压到5V给单片机供电,后来发现这样本设计就会很笨重,于是就利用一般手机充电器输出电压为5V的特性,直接给电子万年历供电,但由于miniusb口不好固定在万用板上,最后选取了DC电源接口,这样既方便了供电口的固定,而且供电线在市面上也比较容易购买到。另外再在DC电源接口输出端接上自锁开关,这样就起到了随心控制电源的功能。电源电路设计图如图3.4所示。图3.4 电源电路(2)晶振电路STC89C52单片机必须在时钟信号的作用下才能正常工作,所以就必须有晶振电路,晶振电路上电启动后会震荡产生时钟信号,而这个时钟信号就是单片机有序工作的基准信号。STC89C52单片机晶振电路设计如图3.5所示,在图中,由12MHZ晶体振荡器及30pF电容连接构成电容三点式振荡器,两个30pF电容在其中起到了稳定频率和快速起振的作用,其中18、19分别对应单片机的XTAL1和XTAL2引脚。图3.5 晶振电路(3)复位电路单片机复位即使单片机和其他模块初始化为最初的状态,复位电路通常有上电复位和手动复位两种方式,上电复位即通过电容的充放电实现单片机的复位,但有些情况下,采用手动复位是很有必要的,本设计即采用的是手动按键复位。本设计中通过按键开关和RC组合电路实现手动复位,其电路结构简单,如图3.6所示,当按下开关时,RST引脚由低电平变为高电平,单片机即实现复位。 图3.6 复位电路(4)STC89C52最小系统STC89C52单片机最小系统如图3.7所示。图3.7 STC89C52单片机最小系统3.2 时钟模块本设计的时钟系统采用的是Dallas公司生产的实时时钟芯片DS1302,DS1302通过串行的方式可以写入和读出当前的时间信息。DS1302内置的时钟模块可以独立走时,可以向单片机提供秒、分、时、日、月、星期、年在内的时间信息,而且具有闰年自动补偿功能。同时DS1302还设计有双电源引脚,电源范围为2.55.5V之间,当VCC2>VCC1时由VCC2供电,当VCC2<VCC1时由VCC1供电。本次设计即根据这个特性,将VCC2直接接入电源开关前,将VCC1接入3V纽扣电池,这样只要万年历接入电源,即使没有打开开关也可以给DS1302供电使其工作,而在主系统掉电后就会启用备用电源,使DS1302在备用电源的作用下继续运行,这样当系统再次上电后,时间仍然是准确的,不用再重新设定时间,而且还节省了备用电源的电量。其中,X1和X2引脚是振荡源,用于外接32.768KHZ晶振,从图4.8可看出DS1302和单片机的连线只有三条,其中RST是复位/片选端,I/O是串行数据输入/输出端,SCLK是串行时钟输入端。时钟电路设计如图3.8所示。图3.8 DS1302时钟电路3.3 温度检测模块本次设计使用的温度检测模块是通过传感器DS18B20实现的,DS18B20的一线制接法使环境温度的检测变的非常简单。DS18B20检测温度的原理是将温度通过芯片内部转化为数字信号,然后通过DQ引脚将数字信号传到单片机内,通过单片机的处理再读出相应的温度。本次设计的温度检测电路如图3.9所示。图3.9 温度检测模块3.4 键盘模块键盘模块可以设计成矩阵键盘或者是独立键盘两种形式,它们各有自己的优点,如果选用矩阵键盘模式设计可以在减少I/O口使用的情况下设置尽可能多的按键,这样一来也可以获得更多的按键功能。但本次设计只需要能够设置时间即可,并不需要太多的按键,在这种情况下,并不需要占用多少I/O口,于是就采用了独立键盘的设计。其中S1为设置键,S2为+键,S3为-键,S4为功能键。键盘模块如图3.10所示。图3.10 键盘模块3.5 显示模块本次设计显示模块使用的是20位7段共阴极LED数码管,显示清晰,电路设计简单。要使数码管能够稳定清晰的显示,就必须有电路驱动,初时本准备全用74HC573驱动数码管显示,但考虑到用74HC573驱动太多数码管可能会使数码管过暗,后来查到MAX7219芯片可以一次驱动8个数码管,且显示效果很好,于是决定使用2片MAX7219芯片驱动16个数码管,2片74HC573芯片驱动4个数码管。LED数码管分为共阳极与共阴极两种,本设计中使用的是20位共阴极7段数码管。共阴极数码管的阴极只有接低电平时才能使数码管被点亮,而其它引脚分别对应一段发光二极管,只有给它高电平时,对应的段才能够被点亮,利用这种原理即可显示出数字或字符。当有多位数码管时,就是利用公共阴极使数码管逐一显示,从而形成位选。MAX7219芯片是一种串行输入/输出共阴极数码管显示驱动芯片,它和单片机相连可驱动8位共阴极LED数码管。该芯片通过三线串行接口于单片机相接,而且只需要外接一个10k电阻即可设置所有数码管的电流,单片机通过MAX7219的串行数据线、串行时钟线和芯片选通线即可实现控制多个数码管显示。MAX7219芯片的引脚功能如表3.1所示。表3.1 MAX7219引脚功能74HC573是8进制数据锁存器,是一种CMOS器件。其中OE为输出使能端,当OE使能端接低电平时,则将使74HC573永久使能。LE为输出锁存端,当输出锁存端LE为高电平时,锁存功能对数据是不存在的,即输出同步。本次设计采用2个74HC573驱动四个数码管显示阴历月日,其中一个74HC573通过7段码使数码管显示,另一个74HC573则通过位选码以扫描显示数码管。显示模块如图3.11所示。图3.11 显示模块3.6 扬声器模块扬声器模块,主要是用于支持在设置的闹铃到时间后发出声音以及整点报时的功能。本次设计的扬声器模块在设计时考虑到此设计只是由于演示用,故而并没有设计有声音放大的功能,只是简单的用蜂鸣器设计电路来发出声音。当有需要发出声音时,由单片机给出连续或者是变化的高电平,使蜂鸣器可以鸣叫甚至放出音乐。电路很简单,由2.2k电阻、三极管9012以及蜂鸣器构成,其中三极管起到了放大和开关的作用,电阻主要是起到限流的作用以避免三极管被烧毁。扬声器模块电路图如图3.12所示。图3.12 扬声器模块4 系统软件的设计在系统硬件电路方案设计完成后,接下来就要考虑整个系统软件的设计,首先,要梳理清楚本次设计所要实现的功能具体有哪些,然后根据要实现的功能,建立系统软件框架的流程图,在设计出流程图后,需要对整个系统进行功能模块的划分,这样就可以把大的思路化为小的需求,从而逐个模块的实现所要展现的功能,最后,在各个模块实现后,就可以把各个模块通过合理的串联,构成完整的具备各种功能的系统程序。系统软件流程框图如图4.1所示。系统初始化读取温度是否有按键被按下是按键函数否秒表设置秒表模式时间更改显示日历时间及温度图4.1 系统软件流程框图在系统流程框图设计出来后,就要考虑各个模块的设计,具体大概有系统初始化、开机显示、DS18B20模块、按键函数、DS1302函数、阴历函数、显示函数、闹钟函数、秒灯函数、整点报时函数等等。4.1 系统初始化在程序设计中,系统初始化是很重要的,它将为使系统能正常运行提供初始条件,使一些模块通电初始化运转,为整个系统奠基。在初始化函数void init()中,首先开全局中断,设置中断允许,然后以方式1开两个定时器的中断,并将定时器0赋初值为50ms,定时器1赋初值为1ms,此处定时器0为时钟计时用,而定时器1为秒表计时。然后还要初始化MAX7219和DS1302,需要注意的是,由于MAX7219的抗干扰能力稍差,所以每次调用MAX7219时都需要初始化MAX7219以避免出现乱码。4.2 开机显示函数在众多有显示器件的电子产品中,大多都有在开机时设置开机画面,这样一是可以让产品有个预热的时间,让系统可以初始化,二来也可以显示品牌,提升用户好感。本次设计虽然设计简单,但也设置了开机显示函数。由于本次设计采用的显示模块是LED数码管,所以开机显示很简单,即使全部数码管显示8。4.3 DS18B20温度检测函数单片机通过DS18B20检测温度时,需要向DS18B20发送指令,其中,DS18B20主要的命令有以下三条:0XCCH 忽略ROM序列的读取操作,直接向DS18B20发送其他命令,这命令仅仅适合只有一片DS18B20工作的情况;0X44H 启动DS18B20进行温度转换;0XBEH 读取温度寄存器9个字节内容。当然仅仅知道DS18B20工作命令是不够的,还需要了解DS18B20的通讯协议,与DS18B20通讯必须有三个步骤:每次通讯时需对DS18B20进行初始化操作,在初始化完成后需要发送ROM寻址指令(只有一片工作时不需要寻址,使用0XCC命令即可),然后再发送RAM指令,这样才能使DS18B20进行相应的工作。4.3.1 DS18B20的初始化初始化DS18B20时,需要先将数据线置“1”,然后稍作延时(这个时间尽可能短一点,几十微秒就够了),然后再将数据线拉低到“0”,这时要精确延时(最好在480到960微秒间),最后再将数据线拉高,并延时一段时间后结束初始化。以下是DS18B20的初始化程序:/*初始化DS18B20*/void Init_DS18B20(void) DQ = 1; /DQ复位 Delay_DS18B20(8); /稍做延时 DQ = 0; /单片机将DQ拉低 Delay_DS18B20(80); /精确延时,大于480us DQ = 1; /拉高总线 Delay_DS18B20(35); /延时,结束初始化4.3.2 DS18B20的写操作DS18B20进行写操作时需将数据线拉低,然后先低位再高位向DS18B20写入数据,并延时,然后将数据线拉到高电平,如此重复直到将命令发送完为止(在这里我设了8个循环),最后再将数据线拉高。以下是DS18B20的写操作程序:/*写一个字节*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; Delay_DS18B20(5); DQ = 1; dat>>=1;4.3.3 DS18B20的读操作DS18B20读操作时需要先将数据线拉低然后再将数据线拉并延时,这时可以读取到数据的一个位,如此循环8次并将数据处理即可读到一个字节的数据。以下是DS18B20的读操作程序:/*读一个字节*/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_DS18B20(4); return(dat);4.3.4 温度检测函数由于读数据时只能读取一个字节,所以读取两次分别都低8位和高8位,然后将高低位数据合并。读出的数据还需要经过处理才能输出实际温度,本次设计的函数只能正确输出高于0的温度,即先将数据乘于0.0625得出实际温度,然后将温度数字放大10倍以便输出小数点后一位数值。以下即温度检测函数:/*读取温度*/void ds18b20() unsigned char a=0; unsigned char b=0; unsigned int t=0; float ft=0; Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0x44); /启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器 a=ReadOneChar(); /读低8位 b=ReadOneChar(); /读高8位 t=b; t<<=8; t=t|a; ft=t*0.0625; wendu=ft*10+0.5; /放大10倍输出并四舍五入4.4 按键函数本次设计采用的是独立按键设计,所以判断按键是否按下是很简单的,只需读取到按键I/O口电平置0即可确定案件被按下。由于本次设计只采用了4个按键,所以按键的多功能就很有必要了。其中S1为设置键,在程序里设置了按键计时参数,这样就可使用设置键的长按功能,本次设计将S1设为短按进入时间设置界面,长按进入闹钟设置界面,在设置界面长按S1即为退出设置并不保存结果。在时钟设置和闹钟设置界面中,S2为加键,S3为减键。S4为秒表键,当进入秒表界面时S2为开始和停止键,S3为清除键,按S4进入倒计时设置,此时S2和S3为加减功能,退出设置后准备倒计时,此时S2为开始和停止键,S3为清除键。4.5 DS1302函数DS1302的应用流程如下。启用寄存器读写: write_1302(0x8e,0x00);写入当前时间数据禁止寄存器读写: write_1302(0x8e,0x80);读出DS1302的时间数据图4.2 DS1302流程图 由于DS1302内部编码为BCD编码,所以在单片机读出和写入时都要进行进制转换。如果单片机向DS1302写入了错误的数据,DS1302是不会向单片机报错的,所以使用DS1302时要特别注意转换进制的算法。本次设计的BCD与十进制转换算法如下所示:date=(date/10)*16)+(date%10); /十进制转BCDtemp=temp/16*10+temp%16; /BCD转十进制4.6 阴历函数刚开始写阴历程序时,是准备通过程序计算出阴历时间的,后来经过多方查找资料,发现由于阴历是以月亮的周期为天文依据,采用朔月望月为基本周期,每月的天数都不是固定的,有时是29天,有时又是30天,而且有时一年为12月,有时又是13月。和阳历相比,两种历法都有着各自的规律,但它们间并没有明确的转换公式。阴历历法为了协调回归年和阴历年的矛盾,采用十九年七闰法,并且闰月的计算规则比较复杂,通过程序计算实现相当困难。那么究竟要如何计算阴历时间呢?后来我发现还有另外一种查表法,即将万年历上已经确定的阴历时间信息通过通过建表汇集到一起,在需要计算阴历时间时根据阳历查找计算出来,这样就简单很多。确定使用查表法后,就需要思考如何存入阴历信息才能使信息全部导入且占用空间最少。本次设计使用的数据表算是利用了比较变态的存储方法,每个阳历年所对应的阴历数据仅占用了三个字节。其中,第一字节中BIT7-4表示当年闰月的月份,如为0则表示无闰月,BIT3-0对应阴历1到4月的大小,第二字节中BIT7-0对应了阴历5到12月的大小,第三字节中BIT7为阴历第十三月的大小,BIT6-5对应春节的阳历月份,BIT4-0对应了春节的阳历日期。如2015年的数据即是(0x04,0xBA,0x53),从第一字节可以看出2015年没有闰月,结合第二字节可以看出2015年阴历月大小为0100 1011 1010,从第三字节可看出由于本年无闰月,所以BIT7为0,而春节对应阳历为2月19日。接下来介绍的是阴历函数设计的思想,首先进入阴历子函数,然后是根据阳历定位阴历数据表的地址,定位后取出阴历信息,然后计算当年春节距当年元旦的天数。接下来即要计算当前阳历日距当年元旦的天数,计算阳历日距元旦的天数后就

    注意事项

    本文(基于单片机的多功能万年历设计毕业设计论文(34页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开