时钟日历 课程设计.docx
- 文档编号:2631705
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:27
- 大小:649.65KB
时钟日历 课程设计.docx
《时钟日历 课程设计.docx》由会员分享,可在线阅读,更多相关《时钟日历 课程设计.docx(27页珍藏版)》请在冰点文库上搜索。
时钟日历课程设计
(用数码管显示实时日历时钟的应用设计)
课程设计说明书
系(部):
电气工程及其自动化
班级:
电气082
学生姓名:
孙兵坤学号080819626
指导教师:
杨福广
时间:
2010年11月15日到2010年11月26日
课程设计任务书
题目用数码管显示实时日历时钟的应用设计
系(部)信息工程系
专业电气工程及其自动化
班级电气082
学生姓名孙兵坤
学号080819626
11月15日至11月26日共2周
指导教师(签字)
系主任(签字)
年月日
一、设计内容及要求
利用DS1302实现年月日时分秒,并用数码管显示。
(用proteus实现)
二、设计原始资料
单片机原理及应用教程范立南2006年1月
单片机原理及应用教程刘瑞新2003年07月
三、设计完成后提交的文件和图表
1.计算说明书部分
1)方案论证报告打印版或手写版
2)程序流程图
3)具体程序
2.图纸部分:
具体电路原理图打印版
四、进程安排
教学内容学时地点
资料查阅与学习讨论1天单片机实验室
分散设计5天单片机实验室
编写报告3天单片机实验室
成果验收1天单片机实验室
五、主要参考资料
《电子设计自动化技术基础》马建国、孟宪元编清华大学出版2004年4月
《实用电子系统设计基础》姜威2008年1月
《单片机系统的PROTEUS设计与仿真》张靖武2007年4月
指导老师成绩
答辩小组成绩
总成绩
摘要
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。
本课程设计是基于DS1302实现实时时钟日历的应用设计。
通过对AT89C51写入程序实现对DS1302读写,读写过正确的年月日时分秒,然后通过74LS164串行输出再输入到七段数码管显示出时间日期。
本设计利用外部中断实现分别显示时间和日期,当按键按下的时候数码管显示年月日,松开则显示时分秒。
具体的读写及显示程序将在下文中做详细介绍。
关键字:
DS1302AT89C5174LS164数码管
一、设计目的:
(1)掌握组合逻辑电路、时序逻辑电路及数字逻辑电路系统的设计、测试方法;
(2)进一步巩固所学的理论知识,提高运用所学知识分析和解决实际问题的能力;利用软件设计程序仿真运行
(3)学习使用仿真软件做线路图,提高电路布局﹑布线及检查和排除故障的能力
二、设计内容及要求
利用DS1302实现实时年月日时分秒,用数码管显示,并用proteus实现仿真效果。
三、数码管显示实时时钟日历的基本原理
DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。
数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。
时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下为
8加最多可达248的数据。
DS1302的寄存器和控制命令
对DS1302的操作就是对其内部寄存器的操作,DS1302内部有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。
DS1302内部的RAM分为两类,一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制字为COH~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
我们现在已经知道了控制寄存器和RAM的逻辑地址,接着就需要知道如何通过外部接口来访问这些资源。
单片机是通过简单的同步串行通讯与DS1302通讯的,每次通讯都必须由单片机发起,无论是读还是写操作,单片机都必须先向DS1302写入一个命令帧,这个帧的格式如表1所示,最高位BIT7固定为1,BIT6决定操作是针对RAM还是时钟寄存器,接着的5个BIT是RAM或时钟寄存器在DS1302的内部地址,最后一个BIT表示这次操作是读操作抑或是写操作。
物理上,DS1302的通讯接口由3个口线组成,即RST,SCLK,I/O。
其中RST从低电平变成高电平启动一次数据传输过程,SCLK是时钟线,I/O是数据线。
具体的读写时序参考图5,但是请注意,无论是哪种同步通讯类型的串行接口,都是对时钟信号敏感的,而且一般数据写入有效是在上升沿,读出有效是在下降沿(DS1302正是如此的,但是在芯片手册里没有明确说明),如果不是特别确定,则把程序设计成这样:
平时SCLK保持低电平,在时钟变动前设置数据,在时钟变动后读取数据,即数据操作总是在SCLK保持为低电平的时候,相邻的操作之间间隔有一个上升沿和一个下降沿。
四、元件明细表如下表1
表1
元件民称
数量
AT89C51
1
DS1302
1
74LS164
6
LED显示器
6
晶振
1
电容
2
开关
1
电源
若干
导线
若干
五、主要元件介绍
5.1、AT89C52芯片如图1
图1
AT89C52是51系列单片机的一个型号,有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时\计数器,2个全双工串行通信口,2个读写口线。
主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振;RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路;VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端;P0~P3口为可编程通用I/O脚,其功能用途由软件定义。
本设计中,31脚接高电平VCC,提供电源;D0~D7接74HC573译码器,XTAL1和XTAL2引脚外接晶振,晶振CYS的振荡频率为12MHz。
5.2、DS1302图2
图2
各引脚的功能为:
Vcc1:
主电源;Vcc2:
备份电源。
当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2 SCLK: 串行时钟,输入,控制数据的输入与输出; I/O: 三线接口时的双向数据线; CE: 输入信号,在读、写数据期间,必须为高。 该引脚有两个功能: 第一,CE开始控制字访问移位寄存器的控制逻辑;其次, CE提供结束单字节或多字节数据传输的方法。 DS1302有下列几组寄存器: ①DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器 (读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如下表所示。 ②DS1302有关RAM的地址 DS1302中附加31字节静态RAM的地址如下表所示。 ③DS1302的工作模式寄存器 所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。 突发模式寄存器如下表所示。 5.3、74LS164 C、74LS164 图3 引脚功能: CLOCK: 时钟输入端CLEAR: 同步清除输入端(低电平有效)A,B: 串行数据输入端QA-QH: 输出端 当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。 串行数据输入端(A,B)可控制数据。 当A、B任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下Q0为低电平。 当A、B有一个为高电平,则另一个就允许输入数据,并在CLOCK上升沿作用下决定Q0的状态。 5.4、LED显示器 图3 八段LED数码管显示器由8个发光二极管组成,其中7个长条形的发光管排列成“日”字形,另一个发光管在数码管显示器的右下角作为显示小数点。 8个笔划段hgfedcba对应于一个字节(8位)的D7D6D5D4D3D2D1D0,因此用8位二进制码就能表示欲显示字符的字形代码。 六、流程图 七、程序设计 IOEQUP1.0;实时时钟数据线引脚 SCLKEQUP1.1;实时时钟时钟线引脚 RSTEQUP1.2;实时时钟复位线引脚 SECONDEQU40H MINUTEEQU41H HOUREQU42H DAYEQU43H MONTHEQU44H WEEKEQU45H YEAREQU46H ORG0000H JMPMAIN ORG0003H jmpINT_0 ORG0020H MAIN: CLRIT0 SETBEX0 SETBEA LCALLGET;从DS1302读取时间 DISPALY: MOVa,40H;显示秒 ANLa,#0FH;低位保留 lcallwww lcalldelay mova,40h anla,#0f0h swapa;高位低位互换 lCALLaaa lcalldelay MOVa,41H;显示分 ANLa,#0FH;低位保留 lcallwwwf lcalldelay mova,41h anla,#0f0h swapa;高位低位互换 lCALLaaaf lcalldelay MOVa,42H;显示时 ANLa,#0FH;低位保留 lcallwwws lcalldelay mova,42h anla,#0f0h swapa;高位低位互换 lCALLaaas lcalldelay ljmpmain sjmp$ INT_0: MOVa,43H;显示日 ANLa,#0FH;低位保留 lcallwwwr mova,43h anla,#0f0h swapa;高位低位互换 lCALLaaar lcalldelay MOVa,44H;显示月 ANLa,#0FH;低位保留 lcallwwwy lcalldelay mova,44h anla,#0f0h;高位低位互换 swapa lCALLaaay lcalldelay MOVa,46H;显示年 ANLa,#0FH;低位保留 lcallwwwn lcalldelay mova,46h anla,#0f0h swapa;高位低位互换 lCALLaaan lcalldelay RETI ;把寄存器中的内容传给74ls164的子程序 www: ;给秒的低四位数码管赋值 mov49h,#8h lcallL0 eee: jbacc.7,rrr clrp0.0 jmpttt rrr: setbp0.0 ttt: clrp2.0 setbp2.0 rla djnz49h,eee ret aaa: ;给秒的高四位数码管赋值 mov49h,#8h lcallL0 sss: jbacc.7,ddd clrp0.1 jmpfff ddd: setbp0.1 fff: clrp2.1 setbp2.1 rla djnz49h,sss ret wwwf: ;给分的低四位数码管赋值 mov49h,#8h lcallL0 eeef: jbacc.7,rrrf clrp0.2 jmptttf rrrf: setbp0.2 tttf: clrp2.2 setbp2.2 rla djnz49h,eeef ret aaaf: ;给分的高四位数码管赋值 mov49h,#8h lcallL0 sssf: jbacc.7,dddf clrp0.3 jmpffff dddf: setbp0.3 ffff: clrp2.3 setbp2.3 rla djnz49h,sssf ret wwws: ;给时的低四位数码管赋值 mov49h,#8h lcallL0 eees: jbacc.7,rrrs clrp0.4 jmpttts rrrs: setbp0.4 ttts: clrp2.4 setbp2.4 rla djnz49h,eees ret aaas: ;给时的高四位数码管赋值 mov49h,#8h lcallL0 ssss: jbacc.7,ddds clrp0.5 jmpfffs ddds: setbp0.5 fffs: clrp2.5 setbp2.5 rla djnz49h,ssss ret wwwr: ;给日的低四位数码管赋值 mov49h,#8h lcallL0 eeer: jbacc.7,rrrr clrp0.0 jmptttr rrrr: setbp0.0 tttr: clrp2.0 setbp2.0 rla djnz49h,eeer ret aaar: ;给日的高四位数码管赋值 mov49h,#8h lcallL0 sssr: jbacc.7,dddr clrp0.1 jmpfffr dddr: setbp0.1 fffr: clrp2.1 setbp2.1 rla djnz49h,sssr ret wwwy: ;给月的低四位数码管赋值 mov49h,#8h lcallL0 eeey: jbacc.7,rrry clrp0.2 jmpttty rrry: setbp0.2 ttty: clrp2.2 setbp2.2 rla djnz49h,eeey ret aaay: ;给月的高四位数码管赋值 mov49h,#8h lcallL0 sssy: jbacc.7,dddy clrp0.3 jmpfffy dddy: setbp0.3 fffy: clrp2.3 setbp2.3 rla djnz49h,sssy ret wwwn: ;给年的低四位数码管赋值 mov49h,#8h lcallL0 eeen: jbacc.7,rrrn clrp0.4 jmptttn rrrn: setbp0.4 tttn: clrp2.4 setbp2.4 rla djnz49h,eeen ret aaan: ;给年的高四位数码管赋值 mov49h,#8h lcallL0 sssn: jbacc.7,dddn clrp0.5 jmpfffn dddn: setbp0.5 fffn: clrp2.5 setbp2.5 rla djnz49h,sssn ret delay: ;延时60ms mov47h,#60 lop11: mov48h,#0ffh lop22: nop nop djnz48h,lop22 djnz47h,lop11 ret ;判断时钟每位是几(1,2,3,4,5,6,7,8,,9,) L0: cjnea,#0h,L1 mova,#0c0h ret L1: cjnea,#1h,L2 mova,#0f9h ret L2: cjnea,#2h,L3 mova,#0a4h ret L3: cjnea,#3h,L4 mova,#0b0h ret L4: cjnea,#4h,L5 mova,#99h ret L5: cjnea,#5h,L6 mova,#92h ret L6: cjnea,#6h,L7 mova,#82h ret L7: cjnea,#7h,L8 mova,#0f8h ret L8: cjnea,#8h,L9 mova,#80h ret L9: mova,#90h RET 从DS1302读取时间 GET: MOVR0,#40H MOVR1,#81H;DS1302中读时间的首地址 MOVR7,#7 GETLOOP: CLRRST nop CLRSCLK nop SETBRST nop MOVB,R1 LCALLWRITE;写命令字 LCALLREAD;读时间 MOV@R0,A ;将从DS1302中读取的时间从内存中保存 INCR0;修改地址指针 INCR1 INCR1 SETBSCLK nop CLRRST nop DJNZR7,GETLOOP RET WRITE: MOV30H,#8;写入命令子程序DS1302 LOP1: MOVA,B RRCA MOVB,A MOVP1.0,C SETBP1.1 CLRP1.1 DJNZ30H,LOP1 RET READ: ;读出数据子程序DS1302 MOV30H,#8 LOP2: MOVC,P1.0 RRCA SETBP1.1 CLRP1.1 DJNZ30H,LOP2 RET END 八、电路图及其显示结果 1、电路图的连接如图4 图4 2、时分秒的显示如图5 图5 3、年月日的显示 图5 3、年月日的显示图6 图6 九、心得体会 历经两个周的课程设计很快就结束了,不得不感叹时间的飞逝! 通过这次的课程设计我学到了很多东西: 1、当面对一个毫无头绪的题目时,我学会了如何去着手以及慢慢找到解决的方法! 2、通过这次设计我加强了自己的思考以及动手能力,最主要的就是对一个整天解体,对其每一模块思考理解,进而对整体理解! 3、这次设计也让我对课本的知识进行了巩固,尤其是一条条繁琐的指令,平时背背忘忘,这次的实践使其深深扎根于我脑海中。 同时,对keil以及proteus软件运用的更加熟练,相信在今后的实验设计中操作上不会出现问题了。 4、再次体会到细节问题有多么的重要,这次设计,很多次都是一个小小的错误使得整体运行错误。 而这些错误却是一些字母符号的输错、少输。 除了上述之外,我的耐心及毅力也得到了很大的锻炼,这不仅对我的学业,而且对我的整个人生也会产生巨大的作用。 十、参考文献 1、《电子设计自动化技术基础》马建国、孟宪元编清华大学出版200年4月 2、《实用电子系统设计基础》姜威2008年1月 3、《单片机系统的PROTEUS设计与仿真》张靖武2007年4月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时钟日历 课程设计