电子日历设计.docx
《电子日历设计.docx》由会员分享,可在线阅读,更多相关《电子日历设计.docx(35页珍藏版)》请在冰豆网上搜索。
电子日历设计
济源职业技术学院
毕业设计
题目
电子日历设计
系别
机电系
专业
电气自动化技术
班级
电气0601
孙浩杰
学号
06040111
指导教师
孟慧霞
日期
2008年11月
设计任务书
设计题目:
电子日历设计
设计要求:
通过在图书馆和网上查找资料,整理和总结内容,独立的完成自己的设计内容。
并且对所设计内容了解原理,能够发现在设计中出现的问题并一一解决。
并完成以下几点要求:
能够显示年、月、日和时间;
电子日历的设计主芯片用单片机、走时用时钟芯片实现;
用按键实现省电和正常显示之间切换。
设计进度要求:
第一周:
选定毕业设计题目;
第二周:
收集和查找相关资料;
第三周:
硬件的分析和设计;
第四周:
软件的分析和编译程序;
第五周:
上机调试并验证结果;
第六周:
撰写毕业设计论文;
第七周:
定稿毕业设计论文;
第八周:
准备毕业答辩。
指导教师〔签名〕:
摘要
日历的功能可实现年、月、日、时、分、秒的显示。
随着社会的发展日历的功能越来越强大,精确度越来越高。
本次设计的日历采用DS12C887时钟芯片,该芯片精确度高,性能可靠。
本设计总体分为硬件部分和软件部分。
硬件部分可分为:
时钟芯片DS12C887、AT89C51等。
根据论文要求显示需要用到16个数码管,而且采用动态显示,需要对位码进行扩展。
经过考虑采用74LS154作位码选择器。
74LS154是一个4入16出的译码器,只需用单片机的I/O口就可以控制16个数码管的位码。
为了到达省电的目的可采用一个按键来控制数码管的亮灭。
当按键按下后,数码管正常显示时间,不按的情况下数码管自动进入省电模式。
本设计非常适合家庭使用。
电源采用+5V电压供电。
走时精确,是现代家庭必备的设备之一。
关键词:
单片机,日历,DS12C887,时钟芯片,AT89C51。
目 录
1单片机的发展及应用
1.1单片机的发展
单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。
作为微型电脑的一个重要分支,应用面很广,发展很快。
自单片机诞生至今,已发展为上百种系列的近千个机种。
目前,单片机正朝着高性能和多品种方向发展,其趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
自1976年9月Intel公司推出MCS-48单片机以来,有关公司都争相推出各自的单片机。
如GI公司推出PIC1650系列单片机,Rockwell公司推出了与6502微处理器兼容的R6500系列单片机。
1978年下半年Motorola公司推出M6800系列单片机,1980年Intel公司在MCS-48系列基础上又推出了高性能的MCS-51系列单片机。
这类单片机均带有串行I/O口,定时器/计数器为16位,片内存储容量〔RAM,ROM〕都相应增大,并有优先级中断处理功能,单片机的功能、寻址范围都比早期的扩大了,它们是当时单片机应用的主流产品。
1982年Mostek公司和Intel公司先后又推出了性能更高的16位单片机MK68200和MCS-96系列,NS公司和NEC公司也分别在原有8位单片机的基础上推出了16位单片机HPC16040和μPD783××系列。
1987年Intel公司又宣布了性能比8096高两倍的CMOS型80C196,1988年推出带EPROM的87C196单片机。
由于16位单片机推出的时间较迟、价格昂贵、开发设备有限等多种原因,至今还未得到广泛应用。
而8位单片机已能满足大部分应用的需要,因此,在推出16位单片机的同时,高性能的新型8位单片机也不断问世。
如:
Motorola公司推出了带A/D和多功能I/O的68MC11系列。
目前国际市场上8位、16位单片机系列已有很多,但是,在国内使用较多的系列是Intel公司的产品,其中又以MCS-51系列单片机应用尤为广泛,二十几年经久不衰,而且还在更进一步发展完善,价格越来越低,性能越来越好。
1.2单片机的应用领域
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
1.在智能仪器仪表上的应用;
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。
例如精密的测量设备〔功率计,示波器,各种分析仪〕。
2.在工业控制中的应用;
用单片机可以构成形式多样的控制系统、数据采集系统。
例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与电脑联网构成二级控制系统等。
3.在家用电器中的应用;
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
4.在电脑网络和通信领域中的应用;
现代的单片机普遍具备通信接口,可以很方便地与电脑进行数据通信,为在电脑网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从,机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动,集群移动通信,无线电对讲机等。
5.单片机在医用设备领域中的应用。
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的。
比方说本次设计的电子万年历可用于千家万户,现已是每个家庭和个人不可缺少的一部分。
2设计思路及总体框图
2.1设计思路
处理器程序用作非易失内存,在更新周期也可访问。
RTC实时时钟加RAM向处理器提供三个独立的,自动的中断源。
定闹中断的发生率可编程,从每秒一次到每天一次,周期性中断的发生率可从500ms到122s选择。
更新结束中断于向程序指示一个更新周期完成。
中断控制和状态位在寄存器B和C中,本文的其它部分将详细描述每个中断发生条设计的题目是电子万年历,根据设计要求所设计的日历要实现年、月、日、时、分、秒的正常显示。
要想显示年、月、日、时、分、秒的正常显示必须有硬件和软件的结合。
硬件主要涉及到:
AT89C51、DS12C887等。
软件通过框图编写出程序。
AT89C51主要功能是存储程序、根据程序的内容对各个端口进行判断并做出相应的处理。
DS12C887主要的功能是实现年、月、日、时、分、秒的显示效果。
根据设计的要求日历要显示年、月、日、时、分、秒的显示就需要16个显示数码管。
如〔2005年01月01日即显示为20050101、12点30分30秒即显示为12-30-30〕,数码管采用7段共阴极数码管。
因为数码管数量较多,需要采用动态显示。
在本设计中主要是实现时钟日历的正常显示。
DS12C887时钟芯片具备年、月、日、时、分、秒计时功能,将DS12C887记忆的时间送给AT89C51单片机进行存储经过处理之后从P0口把段码送给LED数码管显示;AT89C51的P1.0~P1.3做位码输出给74LS154译码器,单片机每个端口有8根线,而要控制16个数码管的显示就需要单片机的16根线来做位码端口,所以用4-16译码器来扩展位码输出端口,这样只需要单片机的4根线就可以控制16个数码管。
当送出第一个段码时,单片机输出的位码是0001,而经过4-16译码器后就是1111111111111110,这时就选中了第一个数码管显示;当送出第十六个段码时,单片机输出的位码是1111,4-16译码器输出0111111111111111,这时就选中了第十六个数码管显示。
因为发光二极管从导通到发光有一定的延时。
导通时间太小,发光太弱人眼无法看清,所以在段码和位码每送出一次后,应保持2ms左右,这个时间也不能太大,如果太大数码管就会闪烁,而且占用CPU时间也越多。
根据设计要求,用按键来实现省电和正常显示的切换。
当按键按下时进入正常显示模式,否则进入省电模式。
2.2系统总体框图
设计电路采用ATMEL的AT89C51芯片来做CPU,用AT89C51的内部EPROM作为程序存储器。
显示部分位码的扩展采用74LS154,七段数码管的驱动采用ULN2003A,控制部分采用普通独立按键。
在确定系统的大体形式之后,画出本系统的总框图如图2.1所示。
图2.1系统总框图
系统总框图包括:
单片机、复位电路、控制电路、显示电路、电源部分
单片机即AT89C51芯片的主要功能是:
存储程序、对存储程序进行相应的处理从I/O口输出。
复位电路:
在单片机上有一输入复位引脚RST,在单片机外部用电容和电阻控制RST。
控制电路:
是用一个按键控制日历的省电和正常显示。
显示电路:
主要用以实现日历的显示结果。
电源部分:
采用+5V的电源供电。
3硬件的选择
本次设计的万年历中其硬件电路主要包括:
时钟芯片、单片机、显示电路、译码器以及电源等几部分。
1.时钟芯片选择:
选用DS12C887实时芯片。
2.单片机的选择:
选用AT89C8051单片机,配备11.0592MHz晶振。
P1.0-P1.4作数码管的位选口,P0.0-P0.6作数码管的段选口。
3.显示电路选择:
采用软件译码动态显示,共阴极LED数码管。
4.电源选择:
采用直流5V电源供电。
5.译码器的选择:
采用4线——16线译码器74LS154。
3.1时钟电路
本次设计采用实时时钟芯片是DS12C887,这种实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。
此外,事实上时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。
LED数码管电子时钟电路采用24小时记时方式,日期和时间用6位数码管显示,采用AT89C51单片机,5V电池供电,只要使用一个按键开关即可以进入省电〔显示LED数码管〕和正常显示两种状态。
显示范围:
年份可走99年,如2001-2099;日、月正常显示,能识别闰年闰月;时间采用24小时制。
显示格式:
日期按照年、月、日排列,如2005年12月20日显示为:
051220;时间按时、分、秒排列,如12点30分55秒显示为12-30-55。
显示位数:
6位七段LED数码管作正常和节电显示。
时钟误差:
24小时误差3~5秒。
DS12C887时钟芯片采用CMOS技术制成,该芯片带有内部晶体振荡器并内置有锂电池,因此断电后仍可运行十年以上且不丧失数据。
时间、日历和定闹具有二进制码和BCD码两种形式,并可设定12小时或24小时制式以及Motorola和Intel总线时序。
DS12C887内含128字节RAM,其中有10个时钟寄存器、4个控制寄存器和114字节通用RAM,所有RAM单元都具有掉电保护功能,因此可被用作非易失性RAM。
DS12C887内部具有定闹中断、周期性中断、时钟更新周期、结束中断等,且三个中断源可分别由软件屏蔽。
3.1.1DS12C887主要功能简介
〔1〕内含一个锂电池,断电后运行十年以上不丧失数据。
〔2〕计秒、分、时、天、星期、日、月、年、并有闰年补尝功能。
〔3〕二进制数码或BCD码表示时间,日历和定闹。
〔4〕12小时或24小时制,12小时时钟模式带有PM和AM指示,有夏令时功能。
〔5〕Motorola和Intel总线时序选择。
〔6〕有128个字节RAM单元与软件接口,其中14个字节作为时钟和控制寄存器,114字节为通用RAM,所有RAM单元数据都具有掉电保护功能。
〔7〕可编程方波信号输出。
〔8〕中断信号输出〔IRQ〕和总线兼容、定闹中断、周期性中断、时钟更新周期、结束中断可分别由软件屏蔽,也可分别进行测试。
3.1.2DS12C887引脚说明及原理
DS12C887管脚图如图3.1所示:
图3.1DS12C887管脚排列图
VCC:
直流电源+5V电压。
当5V电压在正常范围内时数据可读写;当VCC低于4.25V,读写被禁止,计时功能仍继续;当VCC下降到3V以下时,RAM和计时器被切换到内部锂电池。
MOT(模式选择):
MOT管脚接到VCC时,选择MOTOROLA时序;当接到GFND时,选择INTEL时序。
SQW(方波信号同):
SQW管脚能从实时时钟内部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。
AD0~AD7(双向地址/数据复用线):
总线接口即MOTOROLA微机系列和INTEL微机系列接口。
AS(地址选通输入):
用于实现信号别离,在AD/ALE的下降沿把地址锁入DS12C887。
DS(数据选通或读输入):
DS/RD客脚有两种操作模式,取决于MOT管脚的电平,当使用MOTOROLA时序时,DS是一正脉冲,出现在总线周期的后段称为数据选通;在读周期DS指示DS12C887驱动双向总的时刻,在写周期DS的后沿使DS12C887锁存写数据。
选择INTEL时序时DS称作(RD),RD与典型存储器的允许信号(OE)的定义相同。
R/W(读/写输入):
R/W管脚也有两种操作模式。
选MOTOROLA时序时,R/W是一电平信号,指示当前周期是读或写周期;DSO为高电平时,R/W高电平指示读周期,R/W低电平指示写周期;选INTEL时序,R/W信号是一低电平信号,称为WR。
在此模式下,R/W管脚与通用RAM的写允许信号(WE)的含义相同。
CS(片选输入):
在访问DS12C887的总线周期内,片选信号必须保持为低。
IRQ(中断申请输入):
低电平有效,可作微处理的中断输入。
没有中断条件满足时,IRQ处于高阻态。
IRQ线是漏极开路输入,要求外接上接电阻。
RESET(复位输出):
当该脚保持低电平时间大于200ms,保证DS12C887有效复位。
DS12C887内部由振荡电路、分频电路、周期中断/方波选择电路,14字节时钟和控制单元,114字节用户非易失RAM,十进制/二进制累加器,总线接口电路,电源开关写保护单元和内部锂电池等部分组成。
Vcc:
直流电源+5V电压。
当5V电压在正常范围内时,数据可读写;当Vcc低于4.25V,读写被禁止,计时功能仍继续;当Vcc下降到3V以下时,RAM和计时器供电被切换到内部锂电池。
3.1.3地址分配
DS12C887的地址由114字节的用户RAM存放。
10字节的存放实时时钟时间、日历和定闹RAM及用于控制和状态的4字节特殊寄存器组成,几乎所有的128个字节直接读写。
3.1.4时间、日历和定闹单元
时间和日历信息通过读相应的内存字节来获取时间、日历和定闹通过写相应的内存字节设置或初始化,其字节内容可以是二进制或BCD形式。
时间可选择12小时制或24小时制,当选择12小时制时,小时字节的高门为逻辑“1”代表PM。
时间、日历和定闹字节是双缓冲的,总是可访问的。
每秒钟这10个字节走时1秒,检查一次定闹条件,如在更新时,读时间和日历可能引起错误,三个字节的定闹字节有两种使用方法。
第一种,当定闹时间写入相应时、分、秒、定闹单元,在定允许闹位置高的条件下,定闹中断每天准时起动一次。
第二种,在三个定闹字节中插入一个或多个不关心码。
不关心码是任意从O0到FF的16进制数。
当小时字节的不关心码位置位时,定闹为小时发生一次;同样,当小时和分钟定闹字节置不关心位时,每分钟定闹一次;当三个字节都置不关心位时,每秒中断一次。
〔1〕非易失RAM
在DS12C887中,114字节通用非易失RAM不专用一任何特殊功能。
〔2〕晶振控制位
DS12C887出厂时,其内部晶振被关掉,以防止锂电池在芯片装入系统前被消耗。
寄存器A的BIT4-BIT6的其它组合都是使晶振关闭。
〔3〕方波输出选择
15级分频抽头中的13个可用于15选1选择器,选择分频器抽头的目的是在SQW引脚产生一个方波信号,其频率由寄存器A的RS0-RS3位设置。
SQW频率选择器与周期中断发生器共有15选1选择器,一旦频率选择好,通过用程序控制方波输出允许位SQWE来控制SQW引脚输出的开关。
〔4〕周期中断选择
周期中断可在IRQ脚产生500ms一次到每122μs一次的中断,中断步率同样由寄存A确定,它的控制位为寄存器B中的PIE位。
〔5〕更新周期
DS12C887每一秒执行一次更新周期,保证时间、日历的准确。
更新周期还比较每一定闹字节与相应的时间字节,如果匹配或三个字节都是不关心码,则产生一次定闹中断。
〔6〕状态控制寄存器
DS12C887有4个控制寄存器,它们在任何时间都可访问,即使更新周期也不例外。
〔7〕寄存器A
UIP:
更新周期正在进行位。
当UIP为1,更新转换将很快发生,当UIP为0,更新转换至少在244s内不会发生。
DV0、DV1、DV2:
用于开关晶振和复位分频链。
这些位的010唯一组合将打开晶振并充许RTC计时。
RS3、RS2、RS1、RS0:
频率选择位,从15级频率器13个抽头中选一个,或禁止分频器输入。
选择好的抽头用于产生方波〔SQW引脚〕输出和周期中断,使用时可以:
用PIE位允许中断;用SQWE位允许并用相同的频率。
寄存器的功能和作用如下:
DS12C887内部RAM和专用寄存器地址功能如表3.1所示,地址00H~03H单元取值范围是00H~3BH〔10进制为0~59〕;04H~05H单元按12小时制取值范围是上午〔AM〕01H~0CH〔1~12〕,下午〔PM〕81H~8CH〔81~92〕按24小时制取值范围是00H~17H〔1~23〕;06H单元取值范围是00H~07H〔0~7〕;07H单元取值范围01H~1FH〔1~31〕;08H单元取值范围是01H~0CH〔1~12〕;09H单元的取值范围是00H~63H〔0~99〕。
DS12C887的RAM和各专用寄存器的访问如下实现,假设片选地址DS=#0DDXXH,则芯片内部RAM和寄存器和地址为#0DD00H~#0DD7FH。
应指出的是,尽管DS12C887的专用时标年寄存器只有一个,但通过软件编程可利用其内部的不掉电的RAM区的一个字节实现年度的高两位显示。
表3.1DS12C887内部RAM和各专用寄存器地址
地址单元
用途
地址单元
用途
地址00H
秒
地址01H
秒闹
地址02H
分
地址03H
分闹
地址04H
时
地址05H
时闹
地址06H
星期
地址07H
日〔两位数〕
地址08H
月〔两位数〕
地址09H
年〔两位数〕
地址0AH
寄存器A
地址0BH
寄存器B
地址0CH
寄存器C
地址0CH
寄存器D
0EH~7EH
不掉电RAM区,共114字节
寄存器A各位不受复位的影响,UIP位为只读位,其它各位均可读写,寄存器的控制字的格式如表3.2所示。
表3.2DS12C887控制寄存器A各布尔位定义
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
UIP
DV2
DV1
DV0
RS3
RS2
RS1
RS0
A、UIP位:
更新周期标志位。
该位为“1”时,表示芯片正处于或将开始更新周期,此时程序不准读写时标寄存器;该位为“0”时,表示至少在244us后才开始更新周期,此时程序可读芯片内时标寄存器。
该位是只读位。
B、DV0、DV1、DV2:
芯片内部振荡器RTC控制位。
当芯片解除复位状态,并将010写入DV0、DV1、DV2后,另一个更新周期将在500ms后开始。
因此,在程序初始化时可用这三位精确地使芯片在设定的时间开始工作。
这与MC146818不同的是,DS12C887固定使用32768Hz的内部晶体,所以,DV0=“0”,DV1=“1”,DV2=“0”,即可启动RTC。
表3.3DS12C887控制寄存器A输出速率选择定位
寄存器A输出速率选择位
32768Hz时基
RS3
RS2
RS1
RS0
中断周期
SQWF输出频率
0
0
0
0
无
无
0
0
0
1
3.96625ms
256Hz
0
0
1
0
7.8125ms
128Hz
0
0
1
1
122.07us
8.192kHz
0
1
0
0
244.141us
4.096kHz
0
1
0
1
488.281us
2.048kHz
0
1
1
0
976.562us
1.024kHz
0
1
1
1
1.953125ms
512Hz
1
0
0
0
3.90625ms
256Hz
1
0
0
1
7.812ms
128Hz
1
0
1
0
15.625ms
64Hz
1
0
1
1
31.25ms
32Hz
1
1
0
0
62.5ms
16Hz
1
1
0
1
125ms
8Hz
1
1
1
0
250ms
4Hz
1
1
1
1
500ms
2Hz
C、RS3、RS2、RS1、RS0:
周期中断可编程方波输出速率选择位。
各种不同的组合可以产生不同的输出。
程序可以通过设置寄存器B的SQWF和PIE位控制是否允许周期中断方波输出。
其寄存器A输出速率选择位如表3.3所示。
3.1.5DS12C887的中断和更新周期
DS12C887处于正常工作状态时,每秒钟将产生一个更新周期,芯片处于更新周期的标志是寄存器A中的UIP位为“1”。
在更新周期内,芯片内部时标寄存器数据处于更新阶段,故在该周期内,微处理器不能读芯片时标寄存器的内容,否则将得到不确定数据。
更新周期的基本功能主要是刷新各个时标寄存器中的内容,同时秒时标寄存器内容加1,并检查其他时标寄存器内容是否有溢出。
如果有溢出则相应进位日、月、年。
另外一个功能是检查三个时、分、秒报警时标寄存器的内容是否与对应时标寄存器的内容相符,如果相符则寄存器C中的AF位置“1”。
如果报警时标寄存器的内容为C0H到FFH之间的数据,则为不关闭状态。
为了采样时标寄存器中的数据,DS12C887提供了两样种避开更新周期内访问时标寄存器的方案:
第一种是利用更新周期结束发出的中断。
它可以编程允许在每次更新周期结束后发生中断申请,提醒CPU将有998ms左右的时间去获取有效的数据,在中断之后的998ms时间内,程序可先将时标数据读支芯片内部的不掉电静态RAM中。
因为芯片内部的静态RAM和状态寄存器是可随时读写的,在离开中断服务子程序前应清除寄存器C中的IRQF位。
另一种是:
利用寄存器A中的UIP位来指示芯片是否处于更新周期。
在UIP位从低变高244us后,芯片将进行更新周期,所以检测到UIP位为低电平时,则利用224us的间隔时间去读取时标信息。
如检测到UIP位为“1”,则可暂缓读数据,等到UIP变成低电平再去读数据。
3.1.6DS12C887初始化方法
DS12C887采取连续工作制,一般无须每次都初始化,即使是系统复位时也如此。
但初始化时,首先应禁止芯片内部的更新周期操作,所以先将DS12C887状态寄存器B中的SET位置“1”,然后初始化00H~09H时标参数寄存器和状态寄存器A,此后再通过读状态