基于单片机的多功能数字万年历的设计

更新时间:2024-05-23 05:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

安徽大学毕业设计(论文)

基于单片机的多功能数字万年历的设计

摘 要

随着电子技术的迅速发展,特别是大规模集成电路出现,新一代电子产品给人类生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户,而数字万年历的出现给人们的生活带来的诸多方便。

本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。本设计以数字集成电路技术为基础,单片机技术为核心。本文编写的主导思想是软硬件相结合,在硬件基础上来进行软件各功能模块的编写。本系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。 系统通过点阵式液晶为载体显示数据,所以具有人性化的操作和美观的页面效果,可以显示时间、公农历日期、星期、温度、节气,天干地支,并有闹铃功能。 关键词: 单片机;万年历; 液晶技术 ; 农历

I

基于单片机的多功能数字万年历的设计

Design of Multifunctional digital Perpetual Calendar Based on MCU

Abstract

With the rapid development of electronic technology, especially with the emergence of large-scale integrated circuits, a new generation of electronic products has brought about a fundamental change to our human beings. In particular, products based on Microcontroller single-chip technology have entered tens of thousands of households and the emergence of digital calendar have brought about a lot of convenience to people's lives.

This article will first describe the working principle of the hardware system with the system block diagram to illustrate the structure, and highlighted by the application of the system interface technology of the hardware and the interface module functions and work processes. Secondly, I described the program in detail and how I did it. The design is based on digital integrated circuits technology, with single-chip technology as the core. The essence of this article is the combination of the hardware and the software. We proceed programming based on hardware.The system uses C-language software programming, which increases the readability and portability. In order to facilitate the expansion and changes to the design of modular software structure, the design of the software adopts module programming which made the logic of the program is more concise.

The system adopts the vector dot-matrix liquid crystal to display data and therefore have a user-friendly operation and aesthetically pleasing results, which can show the time, the Chinese date, week, temperature, weather, Heavenly Stems and Earthly Branches, and also include alarm functions.

Keywords: microcontroller single-chip; calendar; crystal technology; Chinese date

II

安徽大学毕业设计(论文)

目 录

引 言 .................................................................................................................................... 1 第1章 绪论 .............................................................................................................................. 2 1.1 课题的背景与意义 .......................................................................................................... 2 1.2 数字万年历的现状与发展 .............................................................................................. 2 1.3 论文的主要工作及章节安排 .......................................................................................... 2 1.4 本章小结 .......................................................................................................................... 3 第2章 系统方案论证 .............................................................................................................. 4 2.1 多功能数字万年历系统概述 .......................................................................................... 4 2.2 设计任务与要求 .............................................................................................................. 4 2.3 系统方案论证 .................................................................................................................. 4 2.3.1 计时方案 ....................................................................................................................... 5 2.3.2 测温方案 ....................................................................................................................... 5 2.3.3 显示方案 ....................................................................................................................... 5 2. 4 本章小结 ......................................................................................................................... 5 第3章 硬件电路的设计 .......................................................................................................... 6 3.1 主控制器 .......................................................................................................................... 6 3.2 时钟电路DS1302 ............................................................................................................ 6 3.3 温度检测DS18B20 ......................................................................................................... 7 3.4 液晶显示 .......................................................................................................................... 8 3.5 按键接口 .......................................................................................................................... 8 3.6 语音闹铃模块 .................................................................................................................. 8 3.7 电源模块 .......................................................................................................................... 9 3.8 本章小结 ........................................................................................................................ 11 第4章 系统软件设计 ............................................................................................................ 12 4.1 公历计算显示程序设计 ................................................................................................ 13 4.1.1 DS1302内部寄存器 .................................................................................................... 14 4.1.2 时间读取程序设计 ..................................................................................................... 15 4.2 农历转换程序设计 ........................................................................................................ 17 4.2.1 公历转农历算法研究 ................................................................................................. 17 4.2.2 干支纪年法简介 ......................................................................................................... 18 4.2.3 公历转农历程序 ......................................................................................................... 19 4.3 温度测量程序设计 ........................................................................................................ 21 4.3.1DS18B20测温原理 ...................................................................................................... 21 4.3.2 温度程序 ..................................................................................................................... 21 4.4二十四节气算法研究 ..................................................................................................... 24 4.5 本章小结 ........................................................................................................................ 25 结论与展望 .............................................................................................................................. 26 致 谢 .................................................................................................................................... 27 参考文献 .................................................................................................................................. 28 附录A 总体电路图 ................................................................................................................ 29 附录B 外文文献及译文 ........................................................................................................ 30 附录C 参考文献题录及摘要 ................................................................................................ 35

III

基于单片机的多功能数字万年历的设计

附录D 源程序 ........................................................................................................................ 37

IV

安徽大学毕业设计(论文)

插图清单

图2-1 数字万年历系统框图 .................................................................................................... 4 图3-1 DS1302与ATMEGA16连接图 .................................................................................... 7 图3-2 DS18B20与ATMEGA16连接图 ................................................................................. 8 图3-3 报时电路 ........................................................................................................................ 9 图3-4 稳压电源原理图 .......................................................................................................... 10 图3-5 电源电路 ...................................................................................................................... 10 图4-1 系统程序流程图 .......................................................................................................... 13 图4-2 公历程序流程图 .......................................................................................................... 14 图4-3 DS18B20测温原理 ...................................................................................................... 21

V

基于单片机的多功能数字万年历的设计

表格清单

表3-1 LCD12864显示内容 ................................................................................................... 8 表4-1 DS1302的寄存器及其控制字 .................................................................................. 14 表4-2 RS位配置 .................................................................................................................. 15

VI

安徽大学毕业设计(论文)

引言

人类的日常生活离不开时间,任何具有周期性变化的自然现象都可以用来测量时间。远古时代的中国人通过观测日影的位置以确定当时的时辰或刻数,发明了古老的计时工具日晷。日晷虽然只由一根晷针和刻有刻线的晷面组成,但是它却利用了复杂的天体运动规律,这反映了我国古代劳动人民的智慧。随着科技的进步以及中西文化的交融 ,希腊人根据水流从一个容器滴漏到另一个容器的数量来计量时间从而发明了滴漏,在当时得到了普遍的应用。到十四世纪,简易的机械钟开始在欧洲流行,1656年出现了有摆的座钟。它是以伽利略发现的摆动具有规则性这个原理为基础而发明的。自此以后人类掌握了比较精确的计时工具,并不断改进计时方法。现在人们日常生活中广泛使用的是机械表、电子表、电子钟等。

对于日以上的时间系统计量与安排则属于历法范畴,历法在我们几千年的华夏文明中占有重要的地位,中华子孙繁衍生息,最早就是依靠耕种为主的农业,那时人们是日出而作、日落而息。后来经过长期的经验积累,掌握了太阳的变化,发现年、月、日都直接与天体运行周期相关。因此,人们就把四季更迭的周期定为年,把月亮盈亏变化的周期定为月。一回归年365.2422日,一朔望月为29.5306日,它们既不是月的整数倍,也不是日的整数倍,使用起来很不方便。因此在人为规定历法中的年和月都是整数日,这种整数日的年和月,称为历年和历月。这就是早期的历法,根据春夏秋冬的季节变化及天干地支时间为依据,来确定什么时候应该耕种,什么时间该收获,这些历法一直延续了几千年,这在世界上也是首屈一指的。现在人们日常生活中广泛使用的有历和挂历等。

以上介绍的记录时间的钟表和记录年、月、日的挂历都只具有某一方面的功能,比如钟表只能记录时间,即便是比较先进的钟表顶多也只能多一个记录日期的功能;挂历也只能记录日期而不能记录时间。随着科技的发展,电子技术和计算机应用领域不断扩大,特别是单片机的出现,是近代计算机技术发展史上的一个重要里程碑,因为单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。单片机单芯片的微小体积和低的成本,可以广泛地嵌入到如玩具,家用电器,机器人,仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化工具之一,于是基于单片机的醒目而时尚的电子版万年历顺应而生。基于单片机的数字万年历结合了时钟和日历的功能,将其二者融为一体,在显示时间的同时还能显示日期和年、月,它主要是通过单片机来读取时钟芯片的时间、日期,然后送给显示设备显示出来。

本文设计的数字万年历与普通万年历相比具有一下特点:1.除了能显示通用的公历外还能显示我国的农历,除了能显示农历的日、月外还能显示农历的年号、节气。它是根据单片机读取到的时钟芯片的日期计算出农历的日期、年号和节气,然后通过单片机的I/O口直接送给液晶显示屏,通过软件程序来控制显示内容; 2.能查询1921年2月8日至2100年2月8日间任意一天的公历和农历的对应关系;3.能实时准确显示它所处环境的温度。本设计所采用的测温元件是美国DALLAS半导体公司生产的一种智能温度传感器DS18B20,测温范围为-55℃~125℃,最高分辨率达到0.0625℃;4.能实现多点定时并且语音报时。

- 1 -

基于单片机的多功能数字万年历的设计

第1章 绪论

1.1 课题的背景与意义

随着电子技术的迅速发展,特别是大规模集成电路出现,给人类生活带来了根本性的改变,尤其是单片机技术的应用产品已经走进了千家万户。近年来,我国科技的不断发展,我国经济发展的支柱产业——电子产业获得长足发展,各种电子产品琳琅满目,随处可见,随着电子产品的更新速度的加快,各种功能强大,款式新颖的电子产品不断问世。

数字万年历便是这一发展趋势中的代表,数字万年历则顺应了人们对时间方面的要求。它的出现给人们的生活带来的诸多方便,在时间极显宝贵的现代生活中,其作用更是不言而喻。它在学校、车站、码头、剧院、医院、办公室等公共场所的应用非常广泛。但传统的数字万年历除显示时间之外,功能较为单一,逐渐失去了市场。顺应技术发展和人们生产、生活需求,各种功能的新式万年历不断涌现,且功能不断更新。 数字万年历作为电子类的小产品以其方便、实用等优势成为市场上的宠儿,同时也成为单片机设计培训中一个很实用的课题。因为这个课题有很好的的开发性和可发挥性,因此对设计者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且要求设计的数字万年历在操作上力求简洁,功能上尽量齐全,显示界面也要出色。所以数字万年历无论从实用的角度和培养能力的角度都很有价值。

1.2 数字万年历的现状与发展

当前,数字万年历技术已经进入了优化人-家庭 -环境的整体关系的阶段,它向着超微型、超高效以及集成电路的微型化方向发展,并为数字万年历上的集中控制提供了基础。目前,市场上出售的数字万年历品种很多,其中大部分是基于单片机技术设计的电子系统。它们一般由输入脉冲电路、单片机、晶振和复位电路、外部存储器电路和LED显示电路组成。当今,数字万年历主要还是用于计时、自动报时、定时、日期查询以及自动控制等方面。由于单片机技术以及数字集成电路技术的发展和采用了先进的石英技术,使得如今的数字万年历系统具有体积小、耗电省、计时准确、性能稳定、维护方便、走时准确、携带方便等优点,此外,现在市场上已有现成的数字万年历集成电路芯片出售,而且价格便宜、使用也很方便。

日历的发展经历了数千年的历史。现代日历随着使用范围的不断扩大,功能日益增加,种类也越来越多。从70年代以来,随着单片机和超大规模集成电路的发展,为数字万年历的飞速发展奠定了物质基础。近几年来,数字万年历的发展方向是朝着走时精度高、稳定性好、使用方便、耗电量小、走时延续时间长、体积小、功能多、制造成本低等方向发展。最新的数字万年历,它除了具有常见万年历功能外,而且还具有倒计时、多点定时、语音报时、实时温度测量等功能。在硬件方面它并没有太大的变化,主要是通过增加软件部分来实现倒计时、多点定时的功能。

不难想像,随着科学技术的飞速发展, 各种高新技术的出现并被广泛应用到生产、生活中,未来数字万年历产品也必将沿着体积小、耗电省、计时准确、性能稳定、维护方便、走时准确、性能稳定、携带方便等方向发展而其成本却越来越低。 1.3 论文的主要工作及章节安排

论文主要围绕对数字万年历系统的设计为主线展开,主要包括复位电路设计、时钟

- 2 -

安徽大学毕业设计(论文)

电路设计、按键电路设计、实时控制电路设计、报时电路设计、数字万年历显示电路设计等硬件电路的设计以及为实现其各项功能而编写的软件程序设计等。论文具体章节的安排如下:

第一章:阐述本课题的背景与意义,并对数字万年历系统的现状与发展展开了叙述,以及按章节具体介绍了论文所需要完成的工作。

第二章:介绍了本套系统的组成,并讨论了本套数字万年历系统的几种方案设计以及主要电路的方案设计与比较,从而从理论上得出了本套系统最合理的方案设计。

第三章:介绍了本套系统的各硬件模块设计,提出了几种基本硬件电路的设计。 第四章:介绍了数字万年历系统的软件设计以及如何读取DS1302时间以及公历与农历如何转换等。 1.4 本章小结

本章首先讲述了本文的选题来源及研究意义,然后讲述了数字万年历系统在国内外的发展过程及当前现状,其中叙述了数字万年历系统的优点,最后根据论文需要研究的主要内容,对课题的来源与所要完成的工作做了进一步的交代。

- 3 -

基于单片机的多功能数字万年历的设计

第2章 系统方案论证

2.1 多功能数字万年历系统概述

本设计是利用键盘模块进行输入控制,将控制指令传送到单片机,通过单片机的数据处理,配合复位电路以及时钟电路来驱动LCD显示和闹铃音乐,从而实现该数字万年历的各项功能。单片机是整个系统的核心,它既是协调整机工作的控制器,又是数据处理器,AVR公司的Mega系列能完成本系统所要求的所有功能,所以选用单片机ATmega16;时钟芯片采用DALLAS公司的DS1302涓流充电时钟芯片;按键电路拟采用四个按键,分别实现校时、定时功能,并且定时时间到可报时;显示电路采用128×64点阵字符液晶显示器;语音系统是提示用户系统的实时状态或对系统进行操作,语音电路可提供整点报时、闹铃等功能,本系统选用简单的蜂鸣器来完成。本设计的基本结构框图如下:

复位电路 键盘电路 时钟电路DS1302 温度传感器DS18B20 单片机ATmega16 LCD显示 语音系统

图2-1 数字万年历系统结构图 2.2 设计任务和主要内容

本设计以单片机为控制核心,采用模块化设计,共分以下几个功能模块:单片机控制系统、实时时钟模块、环境温度检测模块、人机接口模块、语音模块等。

1、 单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数据处理器。它由单片机、时钟电路、复位电路等组成。

2、 实时时钟芯片采用带 RAM的时钟芯片DS1302。该芯片可以进行时分秒的计数,具有100年日历,可编程接口,还具有报警功能和掉电保存功能,并且可以对其方便的进行程序控制,完全能满足设计的要求。

3、 温度检测电路采用DALLAS公司生产的单线数字温度传感器DS18B20,它具有独特的单线总线接口方式,具有接口简单、精度高、抗干扰能力强、工作稳定可靠等特点。 4、 语音电路是提示用户系统的实时状态或对系统进行操作,语音电路可提供整点报时、闹铃等功能。根据这些功能要求,本系统选用简单的蜂鸣器。

5、 人机接口模块采用四个普通控制键盘,液晶显示。液晶显示功耗低,轻便防震,由于本设计显示信息比较复杂,采用液晶显示界面友好清晰,操作方便,显示信息丰富。本设计采用LCD(128×64)显示各种状态。 2.3 系统方案论证

- 4 -

基于单片机的多功能数字万年历的设计

型号78××前面和后面还有一个或几个英文字母,如W78××、AN78××、L78××CV等。前面的字母称“前缀”,一般是各生产厂(公司)的代号;后面的字母称“后缀”用以表示输出电压容差和封装外壳的类型。

稳压电源由电源变压器、整流电路、滤波电路和稳压电路四个部分组成,如图3-4所示

图3-4 稳压电源原理图

电源变压器的作用是将来自电网的220V交流电压uI变换为整流电路所需要的交流电压u1。在稳压电源中一般用四个二极管组成桥式整流电路,整流电路的作用是将交流电压u2变换成脉动的直流电压u3。由于输入电压u3发生波动、负载和温度发生变化时,滤波电路输出的直流电压u3会随着变化。因此,为了维持输出电压U0稳定不变,还需加一级稳压电路。

稳压电源是单片机系统的重要组成部分,它不仅为系统提供多路电压源,还直接影响到系统的技术指标和抗干扰性能。一个稳压电源输出电压和最大输出电流决定于所选三端稳压器。在本次设计中采用+5V电压所以选用H7805稳压器。它的主要特点如下:

1.输出电流可达1A 2.输出电压有:5V 3.过热保护 4.短路保护

5.输出晶体管SOA保护 光靠一个稳压器还不行,还需要有电容或电阻与其连接才能得到较稳定的+5V电压。220V电压必须经过整流才可接到稳压器的输入端,则整个电源电路可分整流、滤波、稳压三部分。电路图如图3-5所示。 DIODED51DIODE*4D4220VAC50Hz3H7805UiGNDD121E6V4Uo3+5V2D3D2E22200uFC00.33uFE3220uF图3-5 电源电路

整流部分为桥式整流电路,其桥式整流电路的工作原理如下:E 为正半周时,对D1 、D3 加正向电压,Dl,D3 导通;对D2 、D4 加反向电压,D2 、D4 截止。电路中构成E、Dl、后接负载 、D3 通电回路,在后接负载上形成上正下负的半波整洗电压,E为负半周时,对D2 、D4 加正向电压,D2 、D4 导通;对D1 、D3 加反向电压,D1 、D3 截止。电路中构成E、D2 、D4 通电回路,同样在后接负载上形成上正下负的另外半波的整流电压。如此重复下去,结果在后接负载上便得到全波整流电压。从图2-6中还不难看出,桥式电路中每只二极管承受的反向电压等于变压器次级电压的最大值,比全波整流电路小一半。

- 10 -

安徽大学毕业设计(论文)

滤波部分为带极性的电容,如图3-5中电容E2即为滤波电容其值取2200uF。 稳压部分接三端稳压集成芯片H7805,能输出5V稳压电源,电容C0来抵消输入线较长时的电感效应,以防止电路产生自激振荡,其容量较小,一般小于1uF。用E3消除输出电压中的高频噪声,并有滤波的作用。另外,二极管D5起保护作用。 3.8 本章小结

本章主要介绍的是本设计的硬件结构设计,通过单片机相关的I/O口输入、输出来实现相应的控制功能。还具体介绍了时钟电路、温度电路、按键电路、显示电路、语音电路以及电源电路等的设计。 - 11 -

基于单片机的多功能数字万年历的设计

第4章 系统软件设计

本系统的软件部分主要进行公历计算程序设计,公历转农历的算法的研究,温度 测量程序设计,按键的扫描输入等。程序开始运行后首先要进行初始化,把单片机的各引脚的状态按程序里面的初始化命令进行初始化,初始化完成后运行温度测量程序,读取出温度传感器测量出来的温度,然后运行公历计算程序,得到公历的时间、日期信息 , 再运行按键扫描程序,检测有无按键按下,如果没有按键按下则直接调用公历转农历程 序,根据得到的公历日期信息计算出农历的日期和年号,如果有按键按下则更新按键修 改后的变量后送给农历计算程序,由农历计算程序根据修改后的变量计算出对应的农历 年份,计算完成后运行显示程序,显示程序将得到的温度数据、公历信息、农历信息送给液晶屏让其显示。系统总体程序流程图如图所示:

开始初始化读取温度读取时间扫描按键按键按下Y农历计算N修正变量显示输出结束 图4-1 系统整体程序流程图

4.1 公历计算显示程序设计

本系统使用的是时钟芯片 DS1302,公历程序主要完成从 DS1302 各个寄存器中读出 年、周、月、日、时、分、秒等数据,再进行处理。在首次对 DS1302 进行操作前,必 须对它进行初始化,然后从 DS1302 中读出数据,再经过处理后,送给液晶屏显示。

- 12 -

安徽大学毕业设计(论文)

公历程序流程图如图 4-2 所示:

开始初始化DS1302DS1302开始振荡读取年、月、日、星期、时、分、秒将读取的数据处理后送液晶屏显示

图4-2 公历程序流程图

4.1.1 DS1302内部寄存器

DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD 码形式。其日历、时间寄存器及其控制字见表4-1。

表4-1 DS1302的日历、时钟寄存器及其控制字

寄存器名 秒寄存器 分寄存器 小时寄存器 日期寄存器 月份寄存器 周寄存器 年寄存器 命令字 写操作 读操作 80H 82H 84H 86H 88H 8AH 8CH 81H 83H 85H 87H 89H 8BH 8DH 00-59 00-59 01-12或00-23 00-28、29、30、31 01-12 01-07 00-99 取值范围 各位内容 7 CH 0 12/24 0 0 0 10YEAR 6 5 4 3 2 1 0 10SEC 10MIN 0 0 0 0 10/AP 10DATA 0 0 HR SEC MIN HR DATA 10M MONTH 0 0 DAY YEAR 注:本数据均来自DS1302操作说明书。

- 13 -

基于单片机的多功能数字万年历的设计

此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为COH~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、 FFH(读)。 CH:时钟停止位 CH=0 振荡器工作允许 CH=1 振荡器停止 WP:写保护位

WP=0 寄存器数据能够写入 WP=1 寄存器数据不能写入 TCS:涓流充电选择 TCS=1010 使能涓流充电 TCS=其它 禁止涓流充电

寄存器2 的第7 位12/24 小时标志 bit7=1,12 小时模式 bit7=0,24 小时模式

寄存器2 的第5 位:AM/PM定义 AP=1 下午模式 AP=0 上午模式 DS:二极管选择位 DS=01 选择一个二极管 DS=10 选择两个二极管

DS=00 或11, 即使TCS=1010, 充电功能也被禁止

表4-2 RS位配置

RS位 00 01 01 10 10 11 电阻 没有 R1 R1 R2 R2 R3 典型位 没有 2K 2K 4K 4K 8K 注:数据来源于DS1302操作说明书。

4.1.2 时间读取程序设计

本系统的时间读取主要来源于单片机对DS1302的操作,在硬件上DS1302与单片机的连接需要三条线,即SCLK(7)、I/O(6)、RST(5),具体连接图见系统硬件设计部分图3-1 DS1302与ATmega16的连接图。在软件上的操作可分为以下几个步骤:

(1)初始化DS1302: #asm

.equ ds1302_port=0x18; PORTB .equ ds1302_io=5 .equ ds1302_sclk=4 .equ ds1302_rst=6 #endasm

- 14 -

//定义 DS1302 所使用的 I/O 口

安徽大学毕业设计(论文)

void rtc_init(unsigned char tc_on,unsigned char diodes,unsigned char res) { res&=3;

if (tc_on) res|=0xa0; if (diodes==1) res|=4; else if (diodes==2) res|=8; else res=0; ds1302_write(0x8e,0); ds1302_write(0x90,res); ds1302_write(0x8e,0x80); }

该函数的主要功能是设置是否使用涓流充电,复位 DS1302,发控制命令,允许写 DS1302。

(2)读取时间和日期。DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位 MSB(D7)必须为逻辑 1,如果 D7=0,则禁止写 DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定 RAM 数据;D5~D1 指定输入或输出的特定寄存器;最低位 LSB(D0)为逻辑 0,指定写操作(输入),D0=1,指定读操作(输出)。

void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec) {

*hour=bcd2bin(ds1302_read(0x85)); *min=bcd2bin(ds1302_read(0x83)); *sec=bcd2bin(ds1302_read(0x81)); }

该函数的主要功能是读取 DS1302 的时间,读取小时、分钟、秒钟的具体值。 void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year,unsigned char *week) {*date=bcd2bin(ds1302_read(0x87)); *month=bcd2bin(ds1302_read(0x89)); *year=bcd2bin(ds1302_read(0x8d)); *week=bcd2bin(ds1302_read(0x8b))}

该函数的主要功能是读取 DS1302 的日期,月份和年份和星期。

(3)时间设置。在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。

- 15 -

基于单片机的多功能数字万年历的设计

void rtc_set_time(unsigned char *hour,unsigned char *min,unsigned char *sec) { ds1302_write(0x8e,0);

ds1302_write(0x84,bin2bcd(hour)); ds1302_write(0x82,bin2bcd(min)); ds1302_write(0x80,bin2bcd(sec)); ds1302_write(0x8e,0x80); }

该函数的主要功能是设置 DS1302 的时间,写入修改的小时、分钟、秒钟的具体值。 void rtc_set_date(unsigned char *date,unsigned char *month,unsigned char *year,unsigned char *week)

{ ds1302_write(0x8e,0);

ds1302_write(0x86,bin2bcd(date)); ds1302_write(0x88,bin2bcd(month)); ds1302_write(0x8c,bin2bcd(year)); ds1302_write(0x8a,bin2bcd(week)) ds1302_write(0x8e,0x80); }

该函数的主要功能是设置 DS1302 的日期,月份、年和周。 4.2 农历转换程序设计

农历转换程序主要是通过对当前公历日期的计算,得到当前的农历日期。农历是同 时考虑太阳和月亮运动的历法,它起源于夏朝,又名夏历、中历、旧历,民间也有称阴 历的。它用严格的朔望周期来定月,又用设置闰月的办法使年的平均长度与回归年相近 , 兼有阴历月和阳历年的性质,因此在实质上是一种阴阳合历,它采用的是干支纪年法。

4.2.1 公历转农历算法研究

农历以月为基本单位,一个月以新月出现的那一天为始直至下一个新月出现的前一 天。由于月亮公转的周期介于 29 到 30 天之间,农历的一个月也就由新月出现时刻的早晚或是 29 天或是 30 天。大月为 30 天,小月为 29 天。与公历不同的是,大小月在不同的年中不固定。如春节的前一天常称为大年三十,但有不少年如 2000 年的农历十二月只有 29 天。由于十二个月的时间较阳历年即地球绕太阳公转一周的时间短 11 天左右,为了使农历年与公历年保持相对稳定,每隔两三年就需要加入一个闰月。大约每十九年要加入七个闰月。而二十四节气则是由地球在绕太阳公转的轨道上的位置确定的。以每年的冬至为始,每 15 度为一个节气。是故二十四节气在阳历的每月中有大概固定的日期。其中阳历下半月的十二个节气又称为中气。中气出现的时刻和闰月的确定有直接的关系。

我国农历的计算有下列四条规则:

(1)所有新月和节气出现的时刻的计算以东经 120 度即东八区标准时为准。但计算1929 年以前的阴历时应以北京即东经 116 度 25 分的当地时为准。此条规则用以区分

- 16 -

安徽大学毕业设计(论文)

中国阴历和其他类似阴历如日本阴历。

(2)新月出现的一天为一个月的第一天。如某个节气的出现时刻也在这一天,则不论该节气的出现时刻是否比新月晚,一律算落入新的一个月中。 (3)每年的冬至总是出现在这年的农历十一月中。

(4)从一年的冬至后一天起到下一年冬至这一天止的这段时间中,下称其间,如有十三个新月出现,则其间要加入一个闰月。需要加入闰月时,其间第一个没有中气的月为闰月。因为其间只有十二个中气,所以其间至少有一个月没有中气,也存在有两个月没有中气的可能性。但这种情况下只有第一个没有中气的月为闰月。闰月的前一个月为 几月则该闰月称为闰几月。

上述的农历的计算规则是在清朝顺治年间,即公元1645年开始采用的。以上规则的一个重要特点就是理论上完全以天文观测为依据,其中没有任何数学关系。这和公历,即格里历,完全是由数学关系确定的形成了鲜明的对比。当然,具体到未来农历的计算,仍然需要月亮与地球运动的数学模型,而且精度高的这种数学模型相当复杂,在没有电 脑的情况下,一般人根本不可能推算出精确的农历来。而公历的数学关系则非常简单,这又形成了另外一种鲜明的对比。

公历,也就是太阳历,其本质就是对太阳在黄道上的视位置进行划分。 农历,也就是月亮历,其本质就是对月球在白道上的视位置进行划分。

因此公历到农历的转换就是:已知太阳黄经刻度求月亮白经刻度的计算,说的通俗一点的解释就是已知地球轨道位置,求此时月球的视位置。粗略的计算方法需要的参数就是地球、月球的基本轨道参数(半长径、半短径、向径、偏心率、周期等)、质量,另外还包括轨道焦点的进动和地球的章动这两个偏移量。具体的计算公式就比较复杂

这种计算方法用于公历到农历的转换了,其中包含大量的三角函数方程和迭代计算法。

足够了,当然精确一点的方法则要考虑到大行星的摄动,也就是他们的引力对地球和月球的轨道的影响,最主要的是离我们最近的火星和金星,以及质量最大的木星,这种计算精度适用于阿波罗登月之类的活动。最好的方法是把以上传统力学计算公式换成相对论公式,这样算出来的是最精确的。

很显然,用单片机来直接计算农历这是不可能的。本系统采用的方案是用查表法来 实现的。把农历的每年的月大月小和闰月情况编成一个用 32 位二进制数据,低 12/13 位表示每个月的大小,高16 位表示闰哪个月,最后把每个 32 位的二进制数据转换成 16进制数据放在数组里,在查表的时候调用它。

比如2006年农历的16进制数据为0x7155b,转换成二进制数如下: 0000 0000 0000 0111

0001 0101 0101 1 0 1 1

|--------闰7月--------------|------- 1 2345 6778 9 10 11 12---| 又如2007年农历的16进制数据为0x25d,转换成二进制数如下: 0000 0000 0000 0000 4.2.2 干支纪年简介

0000 0010 0101 1 0 1 1

|--------无闰月------------|------------ 1234 5678 9 10 11 12 ---|

- 17 -

基于单片机的多功能数字万年历的设计

农历纪年法叫干支纪年法。是以十天干和十二地支组合来纪年的,干支就字面意义来说,就相当于树干和枝叶。我国古代以天为主,以地为从,天和干相连叫天干,地和支相连叫地支,合起来叫天干地支,简称干支。天干有十个,就是甲、乙、丙、丁、戊 、己、庚、辛、壬、癸,地支有十二个,依次是子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。古人把它们按照一定的顺序而不重复地搭配起来,从甲子到癸亥共六十对, 依次为:01.甲子 02.乙丑 03.丙寅 04.丁卯 05.戊辰 06.己巳 07.庚午 08.辛未 09.壬申

10.癸酉 11.甲戌 12.乙亥 13.丙子 14.丁丑 15.戊寅 16.己卯 17.庚辰 18.辛巳 19.壬午 20.癸未 21.甲申 22.乙酉 23.丙戌 24.丁亥 25.戊子 26.己丑 27.庚寅 28.辛卯 29.壬辰 30.癸巳 31.甲午 32.乙未 33.丙申 34.丁酉 35.戊戌 36.己亥 37.庚子 38.辛丑 39.任寅 40.癸卯 41.甲辰 42.乙巳 43.丙午 44.丁未 45.戊申 46.己酉 47.庚戌 48.辛亥 49.壬子 50.癸丑 51.甲寅 52.乙卯 53.丙辰 54.丁己 55.戊午 56.己未 57.庚申 58.辛酉 59.壬戌 60.癸亥 六十年满后又重新开始,周而复始,不断循环。

4.2.3 公历转农历程序

本系统设计的公历转农历程序的日期为 1921 年 2 月 8 日到 2100 年 2 月 8 日,将公历 1921 年 2 月 8 日作为起点,对应的农历为 1921(辛酉)年正月初一。具体的转换程序如下:

zhuanhuan() {

static int nIsEnd,m,k,n,I,nBit; static long nTheDate; int y;

wCurYear = nian; wCurMonth = yue; wCurDay = ri; y=wCurYear - 1921;

nTheDate =(y<<8)+(y<<6)+(y<<5)+(y<<3)+(y<<2)+y + wMonthAdd[wCurMonth - 1] - 38;

if((!(wCurYear & 0x0003)) && (wCurMonth > 2)) nTheDate++; nIsEnd = 0; m = 0; while(nIsEnd != 1){

if(wNongliData[m] < 4095) else k = 12;

k = 11;

+ (y>>2) + wCurDay

- 18 -

安徽大学毕业设计(论文)

n = k;

while(n>=0){nBit = wNongliData[m];

for(i=1;i>1); nBit = (nBit & 0x0001);

if (nTheDate <= (29 + nBit)) { nIsEnd = 1;break; } nTheDate = nTheDate - 29 - nBit; n--; }

if(nIsEnd) break; m++;} wCurYear = 1921 + m; led1=(wCurYear+6); led2=(wCurYear+8); wCurMonth = k - n + 1; wCurDay = nTheDate; y=wNongliData[m] / 65536 + 1; if (k == 12){

if (wCurMonth == y)

wCurMonth = 1 - wCurMonth; else if (wCurMonth > y)

wCurMonth = wCurMonth - 1; }

if(wCurMonth<0)

{wCurMonth=-wCurMonth;yun=1;} else yun=0; }

该函数是将读取到的公历的年份先赋值给wCurYear,先计算出当前公历年份距1921 年的年数,y=wCurYear-1921;然后根据y计算出今天距离公历1921年2月8日的具体天数,nTheDate=(y<<8)+(y<<6)+(y<<5)+(y<<3)+(y<<2)+y+(y>>2)+wCurDay+wMonthAdd[wCurMonth-1]-38;该公式中不包括公历 1921 年距今的闰年天数,所有的 2 月份全部都是按 28 天计算的,接下来就需要对 nTheDate 进行修正,

if((!(wCurYear & 0x0003)) && (wCurMonth > 2)) nTheDate++;

如果碰到闰年,总天数 nTheDate 就加 1 天。通过得到的 nTheDate 进行查表计算出 当前距农历 1921 年的年数 m,然后就得到了当前农历的年份,

- 19 -

基于单片机的多功能数字万年历的设计

wCurYear = 1921 + m;

农历采用是干支纪年法,通过得到的 wCurYear 先计算出天干,然后根据 wCurYear 计算出地支。

4.3 温度测量程序设计 4.3.1 DS18B20的测温原理

DS18B20测温原理如图3-3所示。传感器中低温度系数晶振的振荡频率受温度影响很 小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在- 55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。下图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值,只要计数门仍未关闭就重复上述过程, 直至温度寄存器值达到被测温度值, 这就是DS18B20的测温原理。

预置斜累加器计数器比较低温温度系数晶振计数器1预置LSB置位/清除减到0增加温度寄存器停止高温温度系数晶振计数器2减到0

图3-3 DS1302测温原理

在正常测温情况下,DS18B20的测温分辨率为0.5℃以12位数据格式表示,其中最低 有效位(LSB)由比较器进行0.25℃比较,当计数器1中的余值转化成温度后低于0.25℃时,清除温度寄存器的最低位(LSB),当计数器1中的余值转化成温度后高于0.25℃,置位温度寄存器的最低位(LSB)。 4.3.2 温度程序

单总线上最基本的操作有初始化、写和读 3 种,所有其它的操作都由这3 种基本操 作组合而成。

初始化用于对总线上的器件进行状态复位,写用于主节点向总线上写入一位数据, 读用于主节点从总线上读取一位数据。在这3 种操作中,只有写操作是单向的,初始化操 作和读操作都是双向的。所谓“单向”是指操作波形完全由主节点决定,而“双向”是 指前半个操作波形由主节点决定,而后半个波形由从节点决定,从节点通过这种方式向主节点返回信息。初始化操作利用这一返回信息可以得知总线上是否有器件存在,

- 20 -

安徽大学毕业设计(论文)

而读操作可以利用这一返回信息获取数据。

以上的所说的读写都是针对单个位(Bit) 进行的,一个字节(Byte) 的读写由8 次 位读写组合而成,顺序是从低位到高位。8 次位读写之间的时间间隔没有特定要求。

单总线系统的总线操作流程如下: 初始化; ROM操作命令;功能操作命令。 “初始化”使总线上所有器件复位;“ROM 操作命令”用于器件定址或获取器件的 ROM ID,所谓“器件定址”也就是决定后边的功能命令针对哪一个器件进行操作;“功能 操作命令”用于完成具体的功能。除了“初始化”是直接由基本的初始化操作完成外, 其它命令(ROM操作和功能操作) 都是由多个位读写操作或字节读写操作复合而成的。

下面具体介绍一下对 18B20 操作的关键程序: (1) 初始化 #asm

.equ w1_port=0x12 ;PORTD .equ w1_bit=7 #endasm

//定义 18B20 所用的数据线

在对 DS18B20 进行 ROM 和 RAM 操作之前,单片机首先发出一个复位脉冲(最小脉冲 宽度为 480us 的低电平信号),然后单片机释放单总线 I/O 线,使之处于接收状态。单 总线经过上拉电阻被拉至高电平。当DS18B20检测到 I/O端的上升沿时,就等待 15-60us, 然后向单片机发出应答脉冲(60-240us 的低电平信号)。初始化程序如下:

unsigned char DS18B20_init(unsigned char *addr,signed char temp_low,signed char temp_high,unsigned char resolution) {

if (DS18B20_select(addr)==0) return 0; resolution=(resolution<<5) | 0x1f; w1_write(0x4e);

w1_write(temp_high); w1_write(temp_low); w1_write(resolution); if (DS18B20_read_spd(addr)==0) return 0;

if (( DS18B20_scratch_pad.temp_low!=temp_low) || ( DS18B20_scratch_pad.temp_high!=temp_high) ||

( DS18B20_scratch_pad.conf_register!=resolution)) return 0; if (DS18B20_select(addr)==0) return 0; w1_write(0x48); delay_ms(15); return w1_init(); } (2) 写时序

- 21 -

基于单片机的多功能数字万年历的设计

单片机把 I/O 线从高电平拉低至低电平时,作为一个写时序的开始。写时序分为写1 和写 0 两种。写 0 时,单总线要被拉低至少 60us,保证 DS18B20 能够在 15-45us 之间 能够正确的采样 I/O 总线上的“0”电平。若 I/O 线为高电平,即认为写入了一位 1,反之,则认为写入了一位 0。写 1 时,单总线被拉低之后,在 15us 之内就要释放单总线。 在两个写周期间至少有 1us 的恢复期。写时序的程序如下:

unsigned char DS18B20_select(unsigned char *addr) {

unsigned char i;

if (w1_init()==0) return 0; if (addr)

{ w1_write(0x55); i=0; do

w1_write(*(addr++)); while (++i<8); }

else w1_write(0xcc); return 1; } (3) 读时序

当单片机将 I/O 线从高电平拉至低电平时,就作为一个读周期的开始,并且 I/O 线保持低电平的时间至少为 15us。DS18B20 的读时序也分为读 0 和读 1 两个过程。DS18B20 的读时序是从单片机把单总线拉低后,在 15us 后就要释放单总线,以让 DS18B20 把数 据传输到单总线上。DS18B20 在完成一个读时序过程,至少需要 60us 才能完成,并且在两位数据之间至少要有 1us 的恢复期。读时序的程序如下:

unsigned char DS18B20_read_spd(unsigned char *addr) {

unsigned char i; unsigned char *p;

if (DS18B20_select(addr)==0) return 0; w1_write(0xbe); i=0;

p=(char *) & DS18B20_scratch_pad; do

*(p++)=w1_read(); while (++i<9);

- 22 -

安徽大学毕业设计(论文)

return !w1_dow_crc8(& DS18B20_scratch_pad,9); }

(4) 数据处理

读完18B20后,就可以对存放在RAM的数据进行转换,得到实际温度了。需要说明 的是,本系统中设置的18B20的转换精度是12位,虽然低8位和高4位分别存在8位的RAM中,其实这个RAM是复用的,所以应该先读低八位的数据,把它存放到一个变量里,再读高4位的数据,存放在另外一个变量里,最后转换出正确的值。转换温度的程序如下:

float DS18B20_temperature(unsigned char *addr) { unsigned char resolution;

if (DS18B20_read_spd(addr)==0) return -9999;

resolution=( DS18B20_scratch_pad.conf_register>>5) & 3; if (DS18B20_select(addr)==0) return -9999; w1_write(0x44); delay_ms(conv_delay[resolution]);

if (DS18B20_read_spd(addr)==0) return -9999; w1_init();

return (*((int *) & DS18B20_scratch_pad.temp_lsb) &bit_mask[resolution])*0.0625;} 4.4 二十四节气算法研究

节气指二十四时节和气候,是我国古代发明的一种用来指导农事的历法。中国古代 利用土圭实测日晷,将每年日影最长定为日至(又称日长至、长至、夏至),日影最短为日短至(又称短至、冬至),在春秋两季各有一天的昼夜时间长短相等,便定为春分和秋 分,在商朝时只有四个节气,到了周朝时发展到了八个,直到西汉时才成为了现在的二十四节气。在《史记》太史公自序中就有提到阴阳、四时、八位、十二度、二十四节气的概念。

二十四节气每一个分别相应于太阳在黄道上每运动15°所到达的一定位置。二十四 节气又分为12个中气和12个节气,一一相间。二十四节气反映了太阳的周年视运动,所以在公历中它们的日期是基本固定的,上半年的节气在6日,中气在21日,下半年的节气在8日,中气在23日,二者前后不差1~2日。将一回归年的长度等分成24份,从冬至开始,等间隔地依次相同安排各个中气和节 气。这种方法叫做平气。由于太阳周年视运动不均匀,按太阳黄经每移行15°的节气是非等间距的,此法称为定气。定气使用于历法计算中。因为两个节气的时间长于一个朔望月(见月)的时间,所以可能出现一个月内只有一个节气或一个中气的情况。从西汉的《太初历》起,规定遇到没有中气的月份定为上月的闰月。这种置闰原则沿用至今。二十四节气的命名反应了季节、气候现象、气候变化三种。反应季节的是立春、春分、立夏、夏至、立秋、秋分、立冬、冬至,又称八位;反应气候现象的是惊蛰、清明 、小满、芒种;反应气候变化的有雨水、谷雨、小暑、大暑、处暑、白露、寒露、霜降、小雪、大雪、小寒、大寒。现代都是根据太阳在黄道上的位置,准确地确定二十四节气的具体时间。由于二十四节气的时间在公历中的日期变化不大,都在三天内,所以在要求不太严格的情

- 23 -

基于单片机的多功能数字万年历的设计

况下可以简化算法。 4.4 本章小结

本章主要介绍的是本设计的软件结构设计,首先通过介绍本数字万年历系统的主流程图,然后逐渐引出各功能子程序模块流程图,具体有时间读取子程序、温度测量子程序、公历转换农历程序及24节气算法等。

- 24 -

安徽大学毕业设计(论文)

结论与展望

本数字万年历实现了实时显示当前的公历年、 月、日、时、分、秒、星期、室温、农历年、月、日、二十四节气、定时,预期设计目标全部实现,与传统万年历相比,本系统提供更加强大的功能,更加人性化的人机对话,更小的功耗,适宜在更多场合使用。 从系统调查到查资料再到系统的分析设计,经历了几个月的时间。经过这几个月的努力,这个系统总算是完成了。当然,这个系统还有很多不成熟、不完善的地方。由于时间和能力有限,本系统只完成了基本的功能部分,能够实现的功能并不完善,美工方面也不够漂亮。但这毕竟是自己独立完成的第一个运行正常的系统,从敝帚自珍的角度来讲,还是颇觉欣慰的。最后,恳请各位评审老师不吝赐教,多提宝贵意见。 通过这个设计,使我拓展了思路,在完成论文的过程中所学到的东西可以将其运用在实际生活和工作中,根据本系统的设计思路和功能,以及在设计中所积累的经验,使我了解了单片机设计的基本方法,包括所用元器件选型,以及控制部分整个单片机系统的硬件选型与设计,并用Protel绘制出整个系统总体电路图。 对涉及到的软件设计,也有了充分的理解。

- 25 -

基于单片机的多功能数字万年历的设计

致 谢

首先,衷心感谢我的指导老师江老师!

本课题的大量工作都是在江老师的精心指导下完成的,在我整个的学业过程中,包括这篇论文的完成,都受到江老师大量的帮助。特别是我在外实习的情况下。江老师仍不时的与我联系,关心我的安全与学业情况,令我很受感动。。江老师严谨的治学态度、事必躬亲的工作精神、宽人律己的高尚品德深深打动着我,使学生倍受教育。值此论文完成之际,谨向江老师致以崇高的谢意!

另外要感谢自己学习生活中帮助我的同学们,尤其要感谢同寝室同学,感谢他们在完成自己的毕业论文期间为我提供的无私帮助!在课题进行到比较困难的时候,经常能提出宝贵的意见及给了我很强大的力量帮助。同时,因为基础知识及有关技能的欠缺常常成为障碍,老师和同学则给予真诚的指导。这里我表示我的感谢!

最后,向在百忙中抽出宝贵时间参与论文评审和答辩的专家和评委们,表示由衷地感谢!

作者: 日期:

- 26 -

安徽大学毕业设计(论文)

参考文献

[1] 李广弟,朱月秀,王秀山.单片机基础[M]. 北京:北京航空航天大学出版社,2001 [2] 求是科技, 靳达.单片机应用系统开发实例导航[M]. 北京:人民邮电出版社,2003 [3] 何立民.MCS-51系列单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学出版社,1999

[4] 胡汉才.单片机原理及其接口技术(第2版)[M].北京:清华大学出版社,2004 [5] 沈红卫. 基于单片机的智能系统设计与实现[M].北京:电子工业出版社,2005.1 [6]黄继昌.检测专用集成电路及其应用[M].北京: 人民邮电出版社,2006

[7]张克彦.AVR单片机实用程序设计[M].北京: 北京航空航天大学出版社,2004.2

[8]耿德根.AVR嵌入式单片机原理与应用[M].北京: 北京航空航天大学出版社,2002.10 [9]林志奇,郎建军,李会杰.基于Proteus的单片机可视化软硬件仿真[M].北京:北京航空航天大学出版社,2006

[10]刘海成.AVR单片机原理及测控工程应用[M].北京:北京航空航天大学出版社,2008 [11]康万新.毕业设计指导及案例剖析应用电子技术方向[M].北京:清华大学出版社,2007 [12] Philips.80C51-Based 8-Bit Microcontrollers.1998;

[13]Fuzzy Logic Toolbox For Use with Matlab. The MathWorks, Inc. 1999; [14]Astrom K J. Expert Control. Automatic, 1986;

[15]Exxon Production Research Company. A course in reservoir Engineering Study Guide ,1987;

[16] AT89C51 DATA SHEEP Philips Semiconductors 1999.dec

- 27 -

附录A:

基于单片机的多功能数字万年历的设计

G1T234NEISBSSB+SB-SBD468Msd01234567K21sd0LDCVVVRSWBBBBBBBBCTCAR/EDDDDDDDDSBPNRSNLBBCLL4567RRRR1234567890123456789011111111112SBDVN53GRK5V50D2B2NRK3GOCC8/IVS10UD1123V50987654321098765432143333333333222222222V501234567F765432107AAAAAAAAEDCCCCCCCCD/P/P/P/P/P/P/PRNCC/P/P/P/P/PP/P/P/P01234567AGV2110CCCCCCCCAAL/P2DDDDDDDDSCSCDDDAAAAAAAAOOTTMS/KCTTSSCCOTT2N1KINCAI01/O6X2A/SDDOOBA11/T0IS01CIKATTNSIIOMM21XXTT11CCTNNCPIIOOIG/////S///SCTE//////01234567DLL123456EBBBBBBBBScEcNAA/R0TTDDDDDDM2PPPPPPPPRVGXXDPPPPPPPTUA1234567890123456789011111111112V51ROKT21V5/ccILEccVSCSEVVR2P50?N.1123QP1XXS1UDZVVH558.1617X23DNRGEKA1FFECp2p6C6S1LSP - 28 -

V5Fu20E2250580877HHFu303C.0Fu010E2241*EEDGO2DIID12BRDD1343DD4VE6V0Z2H20~5D5安徽大学毕业设计(论文)

附录B:

Design of the digital Perpetual Calendar based on

real-time clock chip

XIAO Yangen SHU Wang

Zhuzhou Professional Technology College

Abstract:This Electronic calendar uses the AT89S52 microcontroller as the core for the control. Time Circuit which is constituted by Dallas's DS12C887A real-time clock chip achieved a time and date display, it increased functionality for the temperature display and the whole point timekeeping. This paper discusses the hardware circuit of the system, principle in detail,and gives the flow chart of the software design and the major source code. keywords:microcontroller; real-time clock; Temperature measurement 1 Introduction

E-calendar-bedroom at home,schools,stations and more and more extensive use of plaza for people's lives,study,work great convenience. Electronics calendar for the past need to re-adjust after power-off time and date,and time is a big error. Designed the system using real-time clock chip (DS12C887A) as a timer parts,the chip comes with an internal crystal oscillator,so that effectively guarantee the accuracy of the time and hang own internal battery power makes the situation will continue to update the time information . This design uses AT89S52 as the main controller,in order to improve the practicality of the circuit add temperature measurement circuit,timekeeping and alarm functions. 2 System hardware design

Schematic circuit shown in Figure 2:

Real-Time Clock Audio signal generator and driver LED Single-chip controller AT89S52 Key circuit Power circuit Temperature measurement circuit

System architecture diagram 2.1 Power Supply Circuit

In order to reduce circuit costs,the system power supply circuit by the transformer

transformer,three-terminal integrated regulator (L7805> circuit 5V, has a simple,reliable, inexpensive and so on. 2.2 Host Controller

Host controller using ATMEL's latest MCU Products AT89S52. Apart from the single-chip microcomputer has a MCS-51 series single-chip all the benefits of things,also has 8KB of internal in-system programmable FLASH memory,free and low-power brown-out mode, greatly reducing the power circuit . In addition,also has a watchdog circuit,a reliable job for

- 29 -

基于单片机的多功能数字万年历的设计

the circuit provides greater assurance. 2.3 digital tube display circuit

Show circuit with a high brightness,long life,low cost features such as the LED digital tube. Throughout the show circuit by the digital control and display LED drive circuit and decoding circuit. Because of the system to display the contents of more,a total of 16 digital tube, respectively,with eight shows year,month,day,four show time,show that 22 weeks,2 show the temperature. Controller in order to save resources,between the controller and displays add a decoding circuit 16 so that would have required the line of control into the circuit only 4 control lines,a great save system resources. The decoder by the decoder constitute both 3-8. 2.4 Real-time clock chip

This design uses the United States Dallas company DS12C887A, the chip can automatically generate century,year,month,day,hour,minute,second,such as time information. Century the use of internal registers with the software will be able to resolve the 'Millennium', the problem. The chip has its own internal battery-keng,external brown-out,the internal time information also be able to maintain for 10 years. Time for a single day record of 12 hours and there is a 24-hour mode. Time Table

Ways that also has two kinds of binary numbers,and the other with BCD code express. The chip with 128 bytes of internal RAM,one of 11 bytes used to store time information,4 bytes of memory chips used to control information,known as the control register,113-byte general-purpose RAM for users to store temporary information. In addition,users can also program the chip to control a variety of square-wave output,and its internal three-way through the software interrupt shielding.

2.5 Buttons and temperature measurements and circuit

The system in order to make the circuit more easy,button circuit design only three keys, which are 'set','+','-', three keys to adjust the calendar and clock. The system in order to improve the practicality of the circuit,an increase of a temperature display. The system temperature measurement circuit using Dallas's DS1280. The device because of its low price,easy circuits,measurement precision,etc.. 2.6 audio signal generator and driver circuit

The circuit's function is to receive control circuit to send to the entire point of time and timing signal,according to system settings produce different frequencies of audio

signals,amplification by the drive circuit to drive speakers to voice their opinions in order to realize the whole point timekeeping and alarm functions. 3 system software design

Procedures of the system by the main program interrupt service function and pose a number

- 30 -

安徽大学毕业设计(论文)

of Functions. Main function and interrupt the completion of the initialization function. Timer interrupt function main timing clock chip to complete scanning and keypad scanning. Clock chip main function is to read and write time,read out the calendar information and to amend the specific value of the internal write clock chip. The main source code is as follows:

- 31 -

基于单片机的多功能数字万年历的设计

基于实时钟芯片的电子万年历的设计

肖炎根,舒望

(株洲职业技术学院电子工程系)

摘要:电子万年历以AT89S52单片机为控制核心,采用Dallas公司的DS12C887A实时钟芯片构成计时电路,实现了时间和日期的显示,还增加了温度显示和整点报时的功能。文章对该系统的硬件电路、工作原理做了详细介绍,同时给出了软件设计的流程图及主要程序源代码。

关键词:单片机,实时钟.温度测量 1引言

电子万年历在家庭居室、学校、车站和广场使用越来越广泛,给人们的生活、学习、工作带来极大的方便。针对以往的电子万年历断电后需重新调整时间与日期,且计时误差大的现象。本系统设计采用实时钟芯片(DS12C887A)作为计时器件,该芯片内部自带晶体振荡器,这样就有效的保证了计时的精确性,并且内部自带铿电池使得在断电情况能继续更新时间信息。本设计采用AT89S52作为主控制器,为了提高电路的实用性加入温度测量电路、报时和闹钟功能。 2系统硬件的设计

电路原理图如图所示:

实时时钟芯音频信号产生及驱动电电源电路 该系统的结构框图 数码显示管 单片机控制器AT89S52 按键电路 温度测量电路

系统的工作原理是:主控制器每隔一段时间(小于一秒钟)读一次时钟芯片的内部寄存器的值,将读出的日历、时间信息实时的显示在LED数码显示器一上。同时,主控制器不断的扫描按键电路和温度测量电路,当有键按下时,识别出按键的值并调整相应的时间或日历的值再写入时钟芯片内部。温度数据由测量电路(DS1280)获得的温度值送入显示电路显示。 2. 1电源电路

为了减少电路成本,本系统电源电路由变压器变压、三端集成稳压(L7805>电路产生5V,具有简单、可靠、价格低廉等特点。 2. 2主控制器

主控制器采用ATMEL公司的最新系列单片机产品AT89S52。该单片机除了拥有MCS-51系列单片机的所有优点外,内部还具有8KB的在系统可编程FLASH存储器,低功耗的空闲和掉电模式,极大的降低了电路的功耗。另外,还具有一个看门狗电路,为电路的可靠工作提供了更大的保证。 2. 3数码管显示电路

- 32 -

安徽大学毕业设计(论文)

显示电路采用具有高亮度、使用寿命长、价格低廉等特点的LED数码管。整个显示电路由LED数码管和显示驱动电路和译码电路构成。由于本系统中显示的内容较多,共需要16个数码管,分别用八位显示年、月、日,四位显示时间,二二位显示星期,二位显示温度。为了节省控制器的资源,在控制器和显示器之间加入一个译码电路使本来需要16根控制线的电路变成只需四根控制线,极大的节省了系统资源。该译码器由两个3-8译码器构成。 2. 4实时钟芯片

本设计采用美国Dallas公司的DS12C887A,该芯片能够自动产生世纪、年、月、日、时、分、秒等时间信息。利用内部的世纪寄存器,配合软件就能解决’千年’,的问题。该芯片内部自带有铿电池,外部掉电时,其内部的时间信息还能够保持10年之久。对于一天内的时间记录有 12小时制和24小时制两种模式。时间的表示方法也有两种,一种用二进制数表示,另一种用BCD码表示。该芯片内部带有128字节的RAM,其中11字节用来存储时间信息,4字节用来存储芯片的控制信息,称为控制寄存器,113字节通用RAM可供用户存储临时信息。此外,用户还可以对芯片进行编程控制输出各种方波,并可对其内部的三路中断通过软件进行屏蔽。 2. 5按键与温度测且电路

本系统为了使电路更简单,按键电路只设计了三个按键,分别是’设置’、’+’、’-’,三个键用来调整日历以及时钟。本系统为了提高电路的实用性,增加了一个温度显示功能。该系统的温度测量电路采用Dallas公司的DS1280。该器件由于其具有价格低廉、电路简单、测量精确等优点。 2. 6音频信号产生及驱动电路

本电路的功能是接收控制电路发送来的整点报时及定时信号,根据系统设定产生不同频率的音频信号,由驱动电路加以放大驱动扬声器发出声音,从而实现整点报时及闹钟的功能。 3系统的软件设计

本系统程序由主程序、中断服务函数和多个子函数构成。主函数主要完成各子函数和中断函数的初始化。定时中断函数主要完成时钟芯片的定时扫描及键盘扫描。时钟芯片的读写函数主要是将时间、日历信息读出来,并把要修改的具体值写入时钟芯片内部。 主要源程序代码如下:

- 33 -

基于单片机的多功能数字万年历的设计

附录C:

[1] 李广弟 朱月秀 王秀山.单片机基础[M] 北京:北京航空航天大学出版社,2001 摘要:本书以简明的语言比较系统地阐述了Intel公司MCS-51单片机的基本结构、原理、指令系统、软件、接口和应用系统设计等知识,并对ATMEL公司生产的89系列及MCS-96系列单片机作了简要介绍。本书深入浅出,层次分明;实例丰富,通俗易懂;突出实用,可操作性强,特别适合高职高专计算机专业类、电子类和电气自动化及机械专业的学生使用,也可以作为高等学校相应专业的教材,还可作为单片机原理及应用的培训班教材。同时亦可供从事微机应用、智能仪器仪表领域的工程技术人员阅读和参考。

[2] 求是科技,靳达编著.单片机应用系统开发实例导航. [M]北京:人民邮电出版社,2004 摘要:本书以单片机及外围器件、相关电路设计的实际应用为内容,以“实例导航”的方式向读者介绍如何合理选择单片机硬件、程序和外围器件应用实施到实际项目开发中。本书所选实例基本覆盖了单片机的主要应用技术。

[3] 何立民.MCS-51系列单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学出版社,1999

摘要:本书较系统、全面地介绍了MCS-51系列单片机应用系统的构成和设计方法。详细地阐述了应用系统的前向通道(传感器通道接口)、后向通道(伺服驱动、控制通道接口)、人机对话通道和相互通道(单片机应用系统之间的通信接口)的结构设计、电路配置及接口技术;单片机应用系统软件的模块化设计方法以及典型应用程序实例;为保证应用系统的可靠性,还专列一章介绍微机系统的干扰和抗干扰设计。

本书编写过程中大量地参考了近年来单片机开发应用的最新成果,力求实用性强、系统性好、论述面宽、材料新颖,以满足当前国内从事单片机开发,应用工程技术人员的急需。为了节省篇幅,书中只简略地介绍单片机的结构与基本原理。

[4] 胡汉才.单片机原理及其接口技术(第2版)[M].北京:清华大学出版社,2004

摘要:本书系统地论述了MCS-51单片机的组成原理、指令系统和汇编语言程序设计、中断系统和接口技术等问题,并在此基础上讨论了单片机应用系统的设计,书继承和发扬了第1版的风格和特色,并增加了MCS-51对LCD的接口、MCS-51的多机通信以及单片机硬件和软件的抗干扰设计等新内容。

[5] 沈红卫. 基于单片机的智能系统设计与实现[M].北京:电子工业出版社,2005.1 摘要:所有系统均以51系列单片机为基础,主要涉及ATMEL 89系列和Philips 89LPC两个主流系列。介绍的实例,从单片机结构来说,既有单CPU系统,又有双CPU系统;从通信总线来说,既有RS-232串行总线,又有CAN现场总线;从开发语言来说,所有系统均以ASM 51和C51两种语言分别实现,并提供了完整的源程序。

[6]黄继昌.检测专用集成电路及其应用[M].北京: 人民邮电出版社,2006

摘要:主要内容包括集成传感器、电压检测专用集成电路、电流检测专用集成电路、集成运算放大器、仪表专用集成电路及数字测量专用集成电路等。对于每种类型的集成电路,在介绍其特性、工作参数、引脚功能的基础上,着重介绍其应用问题,并给出了具体应用电路。

[7]张克彦.AVR单片机实用程序设计[M].北京: 北京航空航天大学出版社,2004.2

摘要:本书在介绍AVR单片机系统结构﹑运行原理和指令系统的基础上,给出众多实用程序的设计和使用方法并提供详细程序清单。它们有的结合AVR单片机的先进性和特点,如脉宽调制(PWM)输出,看门狗定时器,休眠模式(低功耗)的应用,片内A/D转换器(8535)的使用,异、同步串口通信,软件DAA等;有的属于对传统程序

- 34 -

本文来源:https://www.bwwdw.com/article/fn57.html

Top