电子万年历 - 图文

更新时间:2024-05-15 07:12:01 阅读量: 综合文库 文档下载

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

电子万年历设计

摘 要

随着现代生活节奏的不断加快,时间对于我们每个人来说也越来越重要,我们都需要有工具来度量时间。电子万年历作为一种应用广泛的日常计时工具,由于它具有读取方便、显示直观、价格低廉等诸多优点,在当代社会中的应用也越来越广泛,大大方便了人们的生活和工作。

本设计是基于单片机技术原理,采用AT89S52单片机芯片作为主控制器,并采用时钟芯片DS1302来实现时钟,通过硬件电路的制作及软件程序的编制,利用单片机的控制作用通过共阳极数码管显示时间,实现显示阳历的年、月、日、星期、时、分、秒以及阴历的月、日的功能,还具有掉电继续计时的功能。

本设计主要由按键模块、显示模块、DS1302时钟模块、AT89S52主控制系统组成,其中按键电路采用3个按键构成独立连接式键盘,显示电路采用19个共阳极数码管构成,并利用74LS164译码器将二进制代码转化为对应的高低电平信号,并利用74LS138芯片来实现数码管的动态选择。时钟模块采用DS1302芯片,它的使用寿命长、误差小,满足电子万年历需要精确计时的要求。

关键词:AT89S52,DS1302,数码管,译码器

I

THE DESIGN OF ELECTRONIC CALENDAR

ABSTRACT

As the pace of modern life continues to increase,time is becoming more and more important for us. We all need the tools to measure time. As a widely used timing tool, Electronic calendar has many advantages, such as easy to read, direct display and low cost. In modern society, it is becoming more and more extensive and makes our life and work easier.

This design is based on principles of single-chip computer, using chip AT89S52 as the core controller and clock chip DS1302 as the clock. By combining the hardware circuits and software programs preparation, using common anode LED to display time under the control of single-chip computer. It can display the date of solar calendar and lunar calendar. It can continue to measure time after power lost.

This design consists of four main parts, including key module, display module, DS1302 clock module and AT89S52 master control system. Buttons circuit uses three buttons to make up the independent keyboard. Display circuit consists of 19 common anodes LED. It uses 74LS164 to translate binary code into the corresponding high level signal and uses 74ls138 to choose the corresponding digital tube. The clock module uses clock chip DS1302, DS1302 meets the requirement of accurate timekeeping because of its long service life and small error.

KEY WORDS:AT89S52,DS1302,Digital tube,Decoder

II

目 录

前 言 ................................................. 1 第1章 系统设计方案的选择 .............................. 3

§1.1 电子万年历的设计意义 ...................................................................3 §1.2 国内外同类设计的发展概况 ..........................................................3 §1.3 设计要求 .............................................................................................4 §1.4 设计方案的选择与论证 ...................................................................5 §1.4.1 单片机芯片的选择 .....................................................................5 §1.4.2 时钟芯片的选择 .........................................................................5 §1.4.3 显示模块的选择 .........................................................................6 §1.4.4 键盘模块的选择 .........................................................................6 §1.5 本设计的最终方案 ............................................................................6

第2章 系统的硬件设计与实现 ............................ 7

§2.1 电路设计总框图 ................................................................................7 §2.2 系统的硬件概述 ................................................................................7 §2.3 主要单元电路的设计 .......................................................................8 §2.3.1 AT89S52主控制系统设计 ........................................................8 §2.3.2 键盘模块设计 ........................................................................... 13 §2.3.3 时钟模块设计 ........................................................................... 14 §2.3.4 显示模块的设计 ...................................................................... 18

第3章 系统的软件设计 ................................. 23

§3.1 主程序流程图 .................................................................................. 23 §3.2 阳历程序设计 .................................................................................. 24 §3.2.1 DS1302初始化 ......................................................................... 24 §3.2.2 BCD码转化为十进制子程序 ................................................ 27 §3.3 时间调整程序的设计 .................................................................... 27 §3.4 阴历程序的设计 ............................................................................. 29

III

§3.4.1 计算阳历天数的程序设计 ..................................................... 29 §3.4.2 阳历转阴历程序 ....................................................................... 32

结 论 ................................................ 33 参考文献 .............................................. 34 致 谢 ................................................ 36 附 录 ................................................ 37

IV

前 言

在当代繁忙的工作与生活中,时间与我们每个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已。

万年历是采用数字电路实现对时、分、秒的数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。电子万年历采用直观的数字显示,可以同时显示年、月、日、周、时、分、秒等信息,还具有时间校准功能。

综上所述,万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

国内外电子万年历的设计已经比较成熟了,它可以采用很多种设计方案,每种方案各有自己的优缺点。国内外电子万年历的设计主要有以下几种设计方案。

第一种设计方案是采用可编程逻辑器件设计。这种方案采用PLD器件,设计起来结构清晰,各个模块从硬件上设计起来相对简单,控制与显示模块间的连接也比较方便,但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也会相对多些,从成本上来讲,用可编程逻辑器件来设计并没什么优势可言。

第二种设计方案是采用ARM来设计。ARM微处理器的功能特别强大,

1

与MC51单片机相比,它更适合做中高端数字系统的微处理器。它体积小、低功耗、低成本、高性能,但是这要求设计者有较高的设计水平,设计起来有点难度,特别是对于我们这种对嵌入式系统不太熟悉的。

第三种设计方案是采用51系列单片机来设计,我也是基于51系列单片机来设计电子万年历的。51系列单片机是基础入门的一类单片机,也是应用最广泛的单片机之一,虽然它的运行速度较慢,功耗较大,不过由于51系列单片机比较易学,所以开发者比较容易入门,在本次设计中采用的是AT89S52单片机,它具有在线编程,低功耗,能在超低压工作的特点,完全符合电子万年历的设计要求,所以采用基于AT89S52来设计电子万年历。

虽然近些年我国也开始重视对电子万年历的开发与设计,让更多的电子时钟能够走进人民生活,更多人能够应用到功能强大,精度高的电子时钟,但是仍然存在很多问题。

中国电子万年历产业发展出现的问题中,许多情况不容乐观,如产业结构不合理、产业集中于劳动力密集型产品;技术密集型产品明显落后于发达工业国家;生产要素决定性作用正在削弱;产业能源消耗大、产出率低、环境污染严重、对自然资源破坏力大;企业总体规模偏小、技术创新能力薄弱、管理水平落后等。

不过由于电子万年历具有诸多优点,它的市场前景很广泛。

2

第1章 系统设计方案的选择

§1.1 电子万年历的设计意义

电子万年历作为电子类小设计不仅是市场上的宠儿,也是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历无论作为比赛题目还是练习题目都是很有价值。

电子万年历作为人们生活中的小小必需品,对其内部结构等控制,芯片运用等等,涉及到单片机的运用,尤其对计时器芯片的控制,都是对作者能力的体验,因为其良好的开放性和可发挥性,都是考察作者能力的好的课题,现在市面上琳琅满目的各种电子时钟也应有俱全,功能也各有特色。对硬件的阅读能力,对编程的应用能力,都能在这个题目上面随意发挥,本次设计应用已经挑选好的单片机和计时芯片来设计,实现诸多功能,其中包括掉电功能,显示年月日、显示时分秒、显示星期、时间设置。

§1.2 国内外同类设计的发展概况

从现代电子技术发展历程来看,大致可以分为三个典型阶段:

一、20世纪70年代,在集成电路制作方面,MOS工艺得到广泛的应用。可编程逻辑技术及其器件已经问世,计算机作为一种运算工具已经在科研领域得到广泛应用。在70年代后期,CAD的概念已现雏形,这一阶段人们开始利用计算机辅助进行集成电路版图编辑、PCB布局布线等工作。

二、20世纪80年代,集成电路设计进入了CMOS(互补场效应管)时代,复杂可编程逻辑器件已经进入商业应用,相应的辅助设计软件也已投入使用,而在80年代末期,出现了FPGA(Field Programmable Gate Array),CAE和CAD技术的应用更为广泛,它们在PCB设计方面的原理图输入、自动布局布线及PCB分析,以及逻辑设计、逻辑仿真、布尔方程综合和化简等

3

方面担任了重要角色。特别是各种硬件描述语言HDL(Hardware Description Language)的出现、应用和标准化方面的重大进步,为EDA(Electronic Design Automation,电子设计自动化)技术必须解决的电路建模、标准文档及仿真测试奠定了基础。

三、进入20世纪90年代,随着硬件描述语言的标准化得到进一步的确立,计算机辅助工程、辅助分析和辅助设计在电子技术领域获得了更加广泛的应用,与此同时,电子技术在通信、计算机及家电产品生产中的市场需求和技术需求,也极大地推动了全新的电子设计自动化技术的应用和发展。特别是集成电路设计工艺步入了超深亚微米阶段,百万门以上的大规模可编程逻辑器件的陆续面世,以及基于计算机技术的面向用户的低成本大规模ASIC设计技术的应用,促进了EDA技术的形成。

20世纪末期以来,电子设计技术获得了飞速的发展。现代电子技术产品几乎渗透到社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高。

多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。基于单片机的数字钟的设计,采用灵活的编程,可以轻松的完成对数字钟的功能扩展。另外是以基于数字电路的多功能数字钟。数字钟的时钟显示则由最初的单个数码管显示,随着科技的发展,数码管则逐渐被液晶显示所替代。在不断满足人们日益需求的同时,其功能更是再不断扩展。数字钟的发展同样进入了新的阶段,更直观,更易于操作,功能更多,更实用的电子钟将不断的进入人们的生活。市场的强烈需求极大地推动了现代电子技术的发展,产品的集成化程度越来越高,同时产品更新换代的节奏也变得越来越快。

§1.3 设计要求

1.能显示阳历的年、月、日、星期、时、分、秒以及阴历的月、日; 2.阳历与阴历能自动关联; 3.具有掉电计时功能;

4

4.具备年、月、日、星期、时、分、秒校准功能。

§1.4 设计方案的选择与论证

§1.4.1 单片机芯片的选择

方案一:

采用89C51芯片作为主控制系统,89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器。89C51是一种高效的微控制器,可以为很多系统提供廉价且灵活性高的方案,但是它不支持在线更新程序功能,当在对电路进行调试时,由于对程序的错误修改或对程序的新增功能需要烧录程序时,多次插拔会对芯片造成一定的损坏,所以不选择89C51。

方案二:

采用ATMEL公司生产的89S52,与89C51相比,它支持ISP在线可编程写入技术,串行写入、速度更快、稳定性更好,烧录电压也仅仅需要4~5V。它的使用寿命更长,抗干扰性好,兼容性高。所以本次设计采用AT89S52芯片作为主控制系统。

§1.4.2 时钟芯片的选择

方案一:

直接采用AT89S52芯片的内部时钟提供时钟信号,只需在外部加一个晶体振荡器和两个电容即可,然后利用程序来实现年、月、日、星期、时、分、秒计数。这种方法实现容易,没有用到时钟芯片,节约了成本。不过由此产生的计时误差较大,作为一个电子万年历,首要的技术要求就是要能准确计时,因此不选择此种方法来提供时钟。

方案二:

采用DALLAS公司生产的DS1302时钟芯片来实现时钟,DS1302芯片是一种高性能的时钟芯片,它可以对年、月、日、星期、时、分、秒进行计数,并具有闰年自动补偿功能。它的精度高,使用寿命长,能在低电压下工作,而且它可以利用双电源供电,当主电源掉电时芯片能继续工作,满足本

5

设计所要求的掉电继续计时功能,所以选择DS1302来实现时钟。 §1.4.3 显示模块的选择

方案一:

采用LED液晶显示屏,LED液晶显示屏显示功能强大,能清晰地显示大量文字、数字、图片,功耗很低,能满足显示本设计所要求的年、月、日、星期、时、分、秒等信息的要求,不过LED液晶显示屏价格较贵,需要的接口线较多,且编程时要求较高,由于本次设计经费有限,为了节约成本,就不采用LED液晶显示屏。

方案二:

采用LED数码管动态扫描,由于本设计只要求显示数字信息,用LED数码管完全可以胜任,基于电子万年历的特点,LED显示的数字较大,方便观看时间,而且数码管的价格适中,所以选择LED数码管。

§1.4.4 键盘模块的选择

方案一:

采用矩阵式键盘设计,这种方式的按键接口由行线和列线组成,按键位于行、列的交叉点上,这种方式可以节省很多I/O资源,特别是当需要按键较多时它的优势明显,但是本设计只需要用到3个按键,且采用这种方式需要用软件处理消抖、重键等问题,故本设计不采用。

方案二:

采用独立式按键接口设计,它的优点是电路配置灵活,软件实现简单,它的缺点是每个按键需要占用一根I/O口线,浪费资源,不过考虑到本设计只需要3个按键,故可以采用独立式按键接口设计。

§1.5 本设计的最终方案

通过对本设计各个模块的选择,最终采用以AT89S52为主控制系统,采用DS1302时钟芯片来实现时钟,并利用独立式按键来进行时间的调整,通过LED数码管来显示时间。

6

第2章 系统的硬件设计与实现

§2.1 电路设计总框图

LED 数码管 显示模块

AT89S52 主控制系统 键盘模块 DS1302 时钟模块 图2-1 电路设计总框图

§2.2 系统的硬件概述

本设计是基于单片机技术原理,采用美国ATMEL生产的低功耗、高性能的单片机芯片AT89S52为主控制系统,它具有在线编程功能,能在3V的低压下工作,通过硬件电路的设计制作以及软件程序的编制,利用单片机的控制作用通过LED显示数码管来显示年、月、日、星期、时、分、秒,并具有掉电继续计时功能。时钟电路采用DALLAS公司生产的涓流充电时钟芯片DS1302,它具有计算2100年以前的年、月、日、星期、时、分、秒的功能,并具有闰年补偿功能,DS1302与单片机之间能简单地采用同步串行的方式进行通行,仅需用到三个口线:1)RES;2)I/O;3)SCLK。并可采用突发方式一次传送多个字节的时钟信号或RAM数据,DS1302芯片使用寿命长、低功耗、精度高。显示电路采用19个八段数码管来分别显示年、月、日、星期、时、分、秒,利用74LS164将BCD码转化为数码管中的数字,采用74LS138译码器来选通相应的数码管,利用8550三极管来放大选通电流。显示电路工

7

作方式是采用动态扫描方式。

§2.3 主要单元电路的设计

§2.3.1 AT89S52主控制系统设计

单片机主控制系统是以AT89S52芯片为核心,芯片外部接上时钟电路、复位电路、电源电路构成的,其中20引脚接地,40引脚接5V电源,如图2-2所示。

1. AT89S52芯片介绍

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在线可编程Flash存储器。使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在线可编程,

图2-2 单片机主控制系统

8

亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在线可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。在Flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。

P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。在Flash编程和校验时,P1口接收低8位地址字节。

P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @ DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX @ RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在Flash编程和校验时,P2口接收高8位地址字节和一些控制信号。

9

P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在Flash编程和校验时,P3口也接收一些控制信号。

RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲()。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存端状态。如端为高电平(接VCC端),CPU则执行内部程序存储器的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VPP。

XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。

它的DIP封装引脚如图2-3所示,QFP封装引脚如图2-4所示。

10

图2-3 DIP 封装引脚图 2. 主控制系统的复位电路

图2-4 QFP 封装引脚图

单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电自动复位。

上电自动复位是通过外部复位电路的电容充电来实现的,只要电源VCC的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就完成了系统的复位初始化。

本设计中采用的是手动按钮复位。手动按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源VCC之间接一个按钮。当人为按下按钮时,则VCC的+5V电平就会直接加到RST端。手动按钮复位的电路如图2-5所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。

11

3. 主控制系统的时钟电路

时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按照时序工作。

由于AT89S52单片机内部带有时钟电路,只需要在片外通过XTAL1和XTAL2引脚接入定时控制元件(晶体振荡器和电容),即可构成一个稳定的自激振荡电路。在AT89S52芯片内部有一个高增益反相放大器,而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容。时钟电路由振荡器及定时控制元件、时钟发生器及地址锁存允许信号ALE组成。

在AT89S52芯片内部有一个高增益反相放大器,其输入端为引脚XTAL1,输出端为引脚XTAL2。自激振荡电路可以由12MHZ的晶体振荡器和两个30PF的电容连接而成,如图2-6所示。在设计电路板时,晶振、电容等均应尽可能靠近芯片,以减少分布电容,保证振荡器的稳定性。

图2-5 复位电路 12

图2-6 自激振荡电路 §2.3.2 键盘模块设计

在大量的嵌入式系统中,键盘可用来输入数字型数据或者选择控制设备的操作模式。可以说,键盘是绝大多数微控制器应用系统中不可缺少的输入类外部设备。

键盘的基本电路是由一个个接触开关组成的,一般是常开开关,通、断两种状态分别表示0和1,微处理器可以容易的检测到开关的闭合。当开关打开时,提供逻辑“1”;当开关闭合时,提供逻辑“0”。

键盘接口按照不同的标准有不同的分类方法: (1)按键盘排布的方式:分成独立方式和矩阵方式; (2)按读入键值的方式:分为直读方式和扫描方式;

(3)按是否进行硬件编码:分成非编码方式和硬件编码方式; (4)按微处理器响应方式:分为中断方式和查询方式。

本毕业设计采用的是独立式键盘,每个独立按键按一对一的方式直接接

13

到I/O输入线上。读入键值时直接读I/O口,每一个键的状态通过读入键值来反映,所以也称这种方式为一维直读方式,按习惯称为独立式。这种方式查键实现简单,但占用I/O资源较多,一般在键的数量较少时采用。本设计的键盘模块如图2-7。

§2.3.3 时钟模块设计

由于本设计对时钟的要求比较高,所以本设计中不采用单片机内部的时钟,而是采用美国DALLAS公司生产的时钟芯片DS1302来实现时钟,DS1302时钟芯片误差小,使用方便,寿命长,完全满足本设计要求,时钟模块如图2-8所示。

图2-7 按键电路模块 14

图2-8 时钟电路模块 1. DS1302芯片引脚说明

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。它的引脚功能图如图2-9所示。

15

图2-9 DS1302的引脚 VCC1可提供单电源控制也可作为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由VCC1或VCC2两者中的较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电。当VCC2小于VCC1时,DS1302由VCC1供电。

X1和X2是振荡源,一个32.768kHz晶体振荡器可以直接接在X1和X2之间,并可以设定规定载荷电容为6PF。

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在VCC>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK为时钟输入端。

2. DS1302的控制字节

DS1302的控制字如表2-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

16

表2-1 DS1302的控制字

3. 数据的输入输出

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302的读/写时序图如2-10所示。

4. DS1302的寄存器

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

此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发

图2-10 DS1302读/写时序图 17

寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

表2-2 DS1302的日历、时间寄存器

§2.3.4 显示模块的设计

本设计的显示电路部分由19个共阳极数码管、3个74LS164译码器、1个74LS138译码器以及8个PNP型8550三极管组成,显示电路部分如图2-11所示。设计时19个数码管分3排同时扫描。第一排4个数码管分别为阴历的月十位、月个位、日十位、日个位,第二排8个数码管分别为年千位、年百位、年十位、年个位、阳历月十位、月个位、日十位、日个位,第三排7位数码管分别为星期、时十位、时个位、分十位、分个位、秒十位、秒个位。3个74LS164译码器分别将二进制转化为相应的高、低电平,从而对数码管进行段选,并利用一个74LS138对数码管进行动态选择。

18

图2-11 显示电路模块 1. 共阳极数码管的结构及工作原理

8段LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示设备,可以显示0~9等10个数字和小数点,使用非常广泛。

这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点)。

本设计采用的是共阳极数码管,它的引脚图如2-12所示,共阳极数码管内部电路连接如图2-13所示。其中引脚图的两个COM端连在一起,是公共端,共阳极数码管将其接正5伏电源。一个八段数码管称为一位,多个数码

19

管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。

图2-12 数码管引脚图

图2-13 数码管引脚排列 2. 74LS164结构及工作原理

74LS164是高速硅门CMOS器件,与低功耗肖特基型TTL器件的引脚兼容。74LS164是8位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA或DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。时钟(CP)每次由低变高时,数据右移一位,输入到Q0,Q0是两个数据输入端(DSA和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。主复位(MR)输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。它的引脚如图2-14所示。

引脚 图2-14 74LS164其工作原理如下:74LSl64内部为8个D触发器,用以实现数据的串行20

移位,单片机以串行口方式O(移位寄存器方式)输出数据,3片74LSl64作为3排共阳极数码管的串/并转换显示接El。74LSl64为TTL单向8位移位寄存器,可实现串行输入,并行输出。其中A、B(第1、2脚)为串行数据输入端,2个引脚按逻辑“与”运算规律输入信号,共一个输入信号时可并接,共同作为输入脚。CP(第8脚)为时钟输入端,可连接到串行口的TXD端。每一个时钟信号的上升沿加到CP端时,移位寄存器移一位。8个时钟脉冲过后,8位二进制数全部移入74LSl64中。MR脚(第9脚)为复位端,当该脚为低电平时,移位寄存器各位复0;只有当它为高电平时,时钟脉冲才起作用。Q1~Q8(第3~6和10~13引脚)并行输出端分别接数码管的h~a(因为串行口从低位开始传送)各段对应的引脚上。在给出了8个脉冲后,最先进入74LSl64的第1个字节数据到达了最高位。再来1个脉冲,第1个脉冲就会从最高位移出,进入下个74LSl64的第1位。3片74LSl64首尾相串,而时钟端则接在一起。这样,当输入8个脉冲时,从单片机RXD端输出的第1字节数据就进入了第1片74LSl64中,而当第2个8个脉冲到来后,第1字节数据就进入了第2片74LSl64,而随后的第2字节的数据则进入了第1片74LSl64。这样,当第3个8个脉冲完成后,首次送出的数据被送到了最下面的164(第3片)中,其它数据依次出现在第二和第一片74LSl64中,实现了数据在74LSl64中的串行输入、并行输出。

3. 74ls138的结构与工作原理

74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式。它的引脚如图2-15所示。

图2-15 74ls138引脚 21

其工作原理如下:当一个选通端(E1)为高电平,另两个选通端(E2)和(E3)为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。比如:A0A1A2=110时,则Y6输出端输出低电平信号。

4. 8550三极管结构及功能

三极管8550是一种常用的普通三极管。它是一种低电压、大电流、小信号的PNP型硅三极管。8550三极管(TO-92封装)管脚图如图2-16所示,其中1为发射极,2为基极,3为集电极。

它在本设计中主要用于放大信号。

图2-16 8550三极管管脚图 22

第3章 系统的软件设计

§3.1 主程序流程图

图3-1 主程序流程图 开始 初始化 读写设定的日期和时间 分离设定的日期和时间显示值 显示子程序 调整日期和时间子程序 调整阴历日期和时间子程序 返回 23

§3.2 阳历程序设计

由于本设计采用了DS1302时钟芯片,因此阳历程序只需从DS1302各个寄存器中读出年、月、日、星期、时、分、秒等数据再处理即可。阳历程序流程图如图3-2所示。

§3.2.1 DS1302初始化

在首次对DSl302进行操作之前,必须对它进行初始化,然后从DSl302

图3-2 阳历程序流程图 开始 DS1302初始化 DS1302开始振荡 从DS1302中读出年、月、日、星期、时、分、秒 读出的数据为BCD码,将其高低位分离,送给显示缓冲单元 24

中读出数据,再经过处理后,送给显示缓冲单元。

DS1302初始化的一般程序设计流程如下:

1、注意对DS1302的读写操作必须在RST为1时才允许操作; 2、确认对DS1302是读操作还是写操作:写操作时必须关闭写保护寄存器的写保护位(0x00);读操作时跟此寄存器无关;

3、确认是否需要对备用电池充电操作; 4、确定采用单字节操作还是突发模式操作; 单字节读写操作:

写操作:先写地址(RW=0,允许写数据的单元地址),然后写数据 读操作:先写地址(RW=1,允许读数据的单元地址),然后读数据 突发模式读写操作:

写操作:先写地址(0xBE(特殊)/0xFE(普通)),然后写多个数据 读操作:先写地址(0xBF(特殊)/0xFF(普通)),然后读多个数据 DS1302的读写程序如下所示:

写DS1302程序 读DS1302程序 WRITE: CLR SCLK READ: CLR SCLK NOP NOP SETB RST NOP NOP SETB RST MOV A,DS1302_ADDR NOP

MOV R4,#8 MOV A,DS1302_ADDR WRITE1: RRC A MOV R4,#8

NOP READ1: RRC A NOP NOP

CLR SCLK MOV IO,C NOP NOP NOP NOP MOV IO,C NOP NOP SETB SCLK

25

NOP NOP NOP NOP SETB SCLK NOP NOP CLR SCLK NOP NOP DJNZ R4,WRITE1 NOP

WRITE2: CLR SCLK NOP MOV A,DS1302_DATA MOV R4,#8 RRC A NOP ;送数据给1302 CLR SCLK NOP NOP MOV IO,C NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE2 CLR RST RET 26

DJNZ R4,READ1 MOV R4,#8 READ2: CLR SCLK NOP NOP NOP MOV C,IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP

DJNZ R4,READ2 MOV DS1302_DATA,A CLR RST RET

§3.2.2 BCD码转化为十进制子程序

在读写DS1302时需要把BCD码转化为10进制,BCD码是用4位二进制数码来表示一位十进制数字,通常采用是采用8421码,例如:1010那么对应的数字就是8021加一起就是十一。BCD码转化为十进制程序如下所示:

BCD_10: MOV A,R0 ANL A,#0FH

MOV R1,A ;高位×10,加低位 MOV A,R0 SWAP A ANL A,#0FH MOV B,#10 MUL AB ADD A,R1 MOV R0,A RET

§3.3 时间调整程序的设计

调整时间用3个调整按钮,1个作为移位、控制用,另外2个作为加和减用,分别定义为控制按钮、加按钮、减按钮。

在调整时间过程中,要调整的位与别的位应该有区别,所以增加了闪烁功能,即凋整的位一直在闪烁,直到调整下一位。闪烁原理就是,让要调整的一位每隔一定时间熄灭一次,比如说50ms。利用定时器计时,当达到50ms溢出时,就送给该位熄灭符,在下一次溢出时,再送正常显示的值,不断交替,直到调整该位结束。此时送正常显示值给该位,再进入下一位调整闪烁程序。程序如图3-3所示。

27

控制键有效,进入年调整程序 开始 控制键有效,进入月份调整程序 等待按键程序 等待按键程序 增加键有效 减少键有效 增加键有效 减少键有效 年加1 控制键有效,进入日调整程序 控制键有效,进入星期调整程序 年减1 月加1 月减1 A A等待按键程序 等待按键程序 减少键有效 增加键有效 减少键有效 星期加1 日 加 1 日 减 1 增加键有效 星期 减 1 28

控制键有效,进入小时调整程序 增加键有效

图3-3 时间调整程序 按键有效,跳出时间调整程序,进入主循环程序 小时加1 小时减1 分钟加1 分钟减1 减少键有效 增加键有效 减少键有效 等待按键程序 等待按键程序 控制键有效,进入分钟调整程序 A A §3.4 阴历程序的设计

§3.4.1 计算阳历天数的程序设计

阴历程序的实现是要靠阳历日期来推算的。要根据阳历来推算阴历日期,首先要设计算法。推算方法是,根据阳历当前日期在一年中的天数来计算阴历日期。阳历一个月不是30天就是31天(2月除外,闰年2月为29天,平年2月为28天)。阴历一年有12个月或13个月(含闰月),一个月为30天或29天。如果把一个只有29天的月称为小月,用1为标志,把30天的月称为大月,用0为标志,那么12位二进制就能表示一年12个月的大小。如

29

果有闰月,则把闰月的月份作为一个字节的高4位,低4位表示闰月大小,大月为0,小月为1,这样一个字节就包含了所有闰月的信息。阴历春节和阳历元旦相差的天数也用一个字节表示。总共用4字节就可以存储一年中任何一天阳历和阴历的对应关系的有关数据,例如2004年的阴历和阳历对应关系如表3-1所示。

表3-1 2004年的阴历和阳历对应关系

2004年的春节和元旦差21天,这样2004年的信息表示为:21,42H,52H,21H。其中表示12个月大小信息的字节,第4位和第7位不用。第1个字节为十进制,其它的都为十六进制。按此方法,50年的阳历和阴历对应关系表总共使用200字节。

有了算法和数据以后,就可设计软件了。先要根据当前阳历的日期,算出阳历为该年中的第几天。它的程序流程图如图3-4所示。

计算出当前阳历日期为该年中的第几天后,再减去阳历该年春节和元旦的日差,如果够减,则相减的结果就是阴历在该年的总第几天了。根据该数据就可以推算出具体的当前阴历日期;如果不够减,则表示当前阴历年为阳历年的前一年。这种情况下,根据实际,当前阴历日期会处于阴历11月或12月,此时春节和元旦的日差减去前面计算出的当前阳历日期在阳历年为第几天的数据,其结果表示当前阴历日期离春节的天数。计算出的阳历天数为该年的第几天,存放在寄存器R2和R3中。计算出天数后,如果大于#FFH,则把#FFH存放在R2中,余值存放在R3中。也就是说在用寄存器R2和R3表示的天数信息中,R2充当主寄存器,数据先存满R2,再存R3。在整个转换程序中,这里面的数据不能被覆盖。

30

总天数加入该月天数 Y 与当前月相同 同

图3-4 计算阳历天数的程序流程图 开始 置阳历天数为零 N 当前月为1月 Y 当前号数为总天数 月数加1 总天数加号数 N 计算阳历天数结束,总天数中的数据为当前日期在阳历中的第几天 31

§3.4.2 阳历转阴历程序

计算出阳历总天数后,就可以根据它来推算阴历日期。推算方法是,先用总天数减去春节和元旦的日差,如果结果为1,则该天正好是春节(因为春节在元旦之后,在计算春节和元旦的日差时,假设元旦为0天,春节为n天,则日差为n。而前面计算的阳历总天数是该天在该年中的第几天,是以元旦为1而得到的,与计算春节和元旦日差的这种方法相比,其数值少了1,所以要在原来本应该以0作为该天就是春节的依据的基础上加1,所以以1作为该天是春节的标志);如果结果小于1,则阴历应该是阳历的前一年;如果结果大于1,说明阳历和阴历为同一年。再根据查表所得的该年的阴历的闰月和大小月的信息,就可以推算出该天的阴历日期,计算阴历程序流程图如图3-5所示。

图3-5 阴历程序流程图

32

结 论

本次毕业设计为期近三个月,前期先通过PROTEL软件进行电子万年历的硬件设计,绘制出原理图,后期利用KeilC来编写电子万年历程序,采用的是汇编语言,编写的程序基本符合要求,能满足各功能模块的控制,经过了软硬件设计后便开始进行实物的制作,实物满足电子万年历的设计要求,能显示阳历的年、月、日、星期、时、分、秒和阴历的月、日,并且能通过按键来进行时间的调整。

本次设计的软件采用汇编语言来编写,汇编语言的长处在于编写高效。由于本设计的软件编写较为复杂,特别是计算阳历转为阴历的子程序那部分,在编写过程中遇到了很大的困难,不过指导老师很负责任,通过向指导老师请教,逐步的解决了这些难题,最后经过对软件的不断调试,基本使软件满足了本设计的基本要求。在进行实物制作时也遇到了不少问题,首先是对焊枪的使用还不够熟,导致在焊电路板的过程中遇到了技术上的难题,通过向实验室的同学请教学习,基本掌握了焊枪的使用,最后也算是完成了电路板的焊接,制作出了实物。

本次毕业设计的电子万年历的功能算是比较简单的,其实电子万年历还可以实现很多功能,比如用传感器显示温度、语音报时、闹铃等,不过实现这些功能要求设计者对软硬件得相当熟悉,由于本人的能力有限以及时间关系,未能实现这些功能,以后一定会好好的学习这方面的相关知识,努力来完善自己。

33

参考文献

[1] 梅丽凤, 王艳秋. 单片机原理与接口技术. 北京: 清华大学出版社, 2004: 229-251

[2] 李光飞, 楼然苗, 胡佳文等.单片机课程设计实例指导. 北京: 北京航空航天大学出版, 2004: 105-125

[3] 李建忠. 单片机原理及应用. 西安: 西安电子科技大学出版社, 2002: 6-67 [4] 赵亮. 单片机应用系统设计与产品开发. 北京: 人民邮电出版社, 2002:102-212

[5] 阎石. 数字电子技术基础. 北京: 高等教育出版社, 2004: 34-43

[6] 周航慈. 单片机应用程序设计技术. 北京: 北京航空航天大学出版社, 2002.11: 40-85

[7] 《中国集成电路大全》编写委员会. TTL/CMOS分册 国防工业出版社,1985:52-57

[8] 童诗白, 华成英.模拟电子技术基础. 北京: 高等教育出版社, 2003: 33-43 [9] 何立民. 单片机应用技术选编(1)-(8). 北京: 北京航空航天大学出版社, 2002: 12-14

[10] 汪德彪. MCS-51单片机原理及接口技术. 北京: 电子工业出版社, 2001: 45-49

[11] 何希才, 邹炳强. 通用电子电路应用400例. 北京: 电子工业出版社2004: 7-78

[12] 丁元杰. 单片微机原理及应用. 北京: 机械工业出版社, 1999.08: 5-65 [13] 赵建领. 51系列单片机开发宝典. 北京: 电子工业出版社, 2007.04: 33-55

[14] 万光毅. 单片机实验与实践教程. 北京航空航天大学出版社, 2005.01 [15] 李建忠. 单片机原理及应用. 西安: 西安电子科技大学出版社, 2002: 6-67

[16] 刑增平. Protel 99 SE 设计指导. 北京: 中国铁道出版社. 2004: 37-90

34

[17] 汪德彪. MCS-51单片机原理及接口技术. 北京: 电子工业出版社, 2001: 45-49

[18] 张俊谟. 《单片机中级教程》. 北京航空航天大学出版, 2006.03 [19] 陈永名. 51单片机课程设计教程. 北京电子工业出版社, 2004.3 [20] 李刚才. 51系列单片机设计技巧. 北京: 北京航空大学出版社, 2003.7 [21] 王守刚. 电路原理图与电路板设计教程. 北京: 北京希望电子出版社, 2000.8

[22] 张剑锋, 陈慕君. 万年历算法研究及实现. 中国水运报, 2007.4

[23] 杨河理, 熊晓东. 电子万年历中公历农历互换算法研究. 长江大学学报,2006.4

[24] 张毅刚. 单片机原理及应用. 北京: 高等教育出版社, 2005:50-55 [25] 李刚. PROTEL DXP电路设计标准教程. 北京: 清华大学出版社, 2005:11-19

[26] DS1302 Trickle-Charge Timekeeping Chip Manual. DALLAS, United States, 2005: 100-120

[27] AT89S52:8bit Microcontroller with 8K Bytes Flash Chip Manual. ATMEL, United states, 2005: 56-67

35

致 谢

这次能够顺利完成设计任务,首先我必须感谢院领导对我们毕业生在毕业设计过程中的支持与关怀!

其次我要感谢的是我的指导老师,本设计是在他的悉心指导下完成的。从开始做毕业设计以来,我们一直在老师的带领下展开学习,整个设计过程他给予我不断的指导与鼓励,我才能顺利地完成我的毕业设计,他那种对待学生和蔼亲切,对待工作一丝不苟的品质和精神值得我们每一个人学习。借此机会,向我的指导老师表示衷心的感谢。

完备的实验设施为我们提供了很好的实验条件,使我们可以把理论和实践随时结合,这样的条件给了我们很大的优势,认真负责和细致耐心给了我极大地信心,从开始的似懂非懂到后来的比较熟悉,在此真的很感谢老师给予的监督和细心地指导。

最后我要感谢我的同学们,在设计和焊接过程遇到困难时,正是由于同学们的帮助我才能顺利的克服困难,我毕业设计的完成离不开同学们的帮助!

36

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

Top