华中科技大学单片机课设报告-DS1302电子钟设计

更新时间:2024-05-14 22:16:01 阅读量: 综合文库 文档下载

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

单片机课设报告

题目 基于DS1302的电子钟设计

学生姓名 学号 学生姓名 学号

专业 电气工程及其自动化

班号 1010

1

一、设计任务及主要技术指标和要求……………………………………….3

1.1 设计任务………………………………………………………………...……3 1.2 主要技术指标和要求…………………………………………………..…….3

二、电子钟设计原理…………………………………………………………….………3

2.1 DS1302介绍…………………………………………… …………………… 3 2.1.1 DS1302引脚功能……………………………………………………………3 2.1.2 DS1302内部结构……………………………………………………………4 2.1.3 DS1302的寄存器…………………………………………………………….5 2.2 8051单片机介绍……………………………………………………………….8

三、软硬件设计………………………….….……………………......……………...…...9

3.1硬件电路设计………………………….….……………………......…………...9 3.2软件程序设计………………………….….……………………......…………...10

四、系统调试及结果………………………….. ………………….....…………….….21

五、课设总结与体会………………………….. ………………….....…………….….21

六、参考文献………………………….. ………………….....…………………….….21

2

一、设计任务及主要技术指标和要求

1.1 设计任务:

用DS1302时钟芯片设计实时时钟。

1.2 主要技术指标和要求:

1 、自行设计DS1302和MCS51之间的连接电路,并搭接实现; 2 、按所设计的电路自行编程实现对 DS1302的读写操作;

3 、自行设计、搭接电路,采用用液晶显示时间(日期)的电子日历时钟,并编程实现利用按键设定、修改时间(日期)。

二.电子钟设计原理

2.1 DS1302介绍

DS1302是DALLAS 公司推出的具有充电控制功能的时钟芯片,内含一个实时时钟/ 日历和31字节静态RAM,通过串行接口与单片机进行通讯。实时时钟/ 日历电路提供秒、分、时、日、星期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM控制采用24或12小时格式。DS1302工作时功率消耗很低,保持数据和时钟信息时功率小于 1mW。由于具有内部静态RAM,DS1302既具有日历时钟功能,又可以用于少量关键数据的掉电保持。

2.1.1 DS1302的引脚功能

DS1302的引脚排列如图 4.1.1 所示。各引脚功能说明如下:

图2.1.1 DS1302 引脚

① VCC1 和 VCC2

VCC1 为后备电源,VCC2 为主电源。DS1302 由 VCC1 或 VCC2 两者中的较大者供电。当 VCC2 大于VCC1+0.2V 时,VCC2 给 DS1302 供电。当 VCC2 小于 VCC1 时,DS1302 由 VCC1 供电。这样就可以保证在主电源关闭

3

的情况下,也能保持时钟的连续运行。备用电源通常采用小型可充电电池或大容量电容。

②X1和X2

X1 和 X2 是振荡源,外接 32.768kHz 晶振。 ③RST

RST 是复位/片选线,通过把RST 置高电平来启动所有的数据传送。RST 引脚有两种功能:

第一,RST 接通控制逻辑,允许地址/命令序列送入内部移位寄存器;第二,RST 可用于终止单字节或多字节数据的传送操作。当RST 为高电平时,所有的数据传送被初始化,允许对 DS1302 进行操作。如果在传送过程中 RST 置为低电平,则会终止此次数据传送,I/O 引脚变为高阻态。上电运行时,RST 必须保持一定时间的低电平状态,以完成器件内部的电路复位。

④I/O

串行数据输入输出引脚。既可作为输出,又可作为输入。 ⑤SCLK

串行数据传送时钟。 ⑥GND 接地引脚。

2.1.2 DS1302 的内部结构

DS1302 的内部结构如图 2.1.2 所示。其中与用户应用有关的主要包括三个部分:

4

图 2.1.2 DS1302 的内部结构

① 命令字

DS1302 内部有一个 8 位的命令字(字节)寄存器,每次传送数据时,都以命令字开始,命令字的内容,决定了后续操作的目标和方式。无论是向 DS1302 传送命令还是数据,都是最低位(LSB)在前。命令字的格式如图 2.1.3 所示:

图 2.1.3 DS1302 命令字

8 位命令字各位的作用如下:

位0 :读写控制,为 1 时表示进行读操作,为 0 时表示写操作; 位1~位5 :需操作的数据地址;

位6 :控制对内部 RAM还是对内部寄存器操作。为1 时,对内部 RAM操作,前面位 1~位5

反映的地址是指内部RAM地址。为0 时,对内部寄存器操作,前面位 1~位5 反映的地址是指内部寄存器地址;

位7 :始终为 1 ,表征命令字标记。

DS1302 可以对数据进行连续读、写,作为特殊命令字, 当向DS1302 写入命令字的地址位(A0~A4 )都为 1 时,表示连续读、写数据操作。由于 DS1302

5

内部只有 31 个RAM,地址为 0~30,当地址为31(即各位都为1 )时,就可以用来表征数据连续读、写操作。

2.1.3 内部寄存器

DS1302 共有 9 个内部寄存器。各寄存器的名称、对应的操作命令字及寄存器各位的含义如表2.1.1 所示:

表 2.1.1 内部寄存器名称、操作命令字及位定义

表 2.1.1 中,读、写命令字的区别,由图 2.1.3 中的命令字的相应位决定。有关寄存器各位的

补充说明如下:

秒寄存器的位 7(CH 位)为计时启动或停止控制位,CH 为 1,停止计时,CH 为 0,允许计时。

小时寄存器的位 7 为 0 时,表示 24 小时格式计时,位 7 为 1 时,表示 12 小时格式计时。当以24 小时格式计时时,位 5 和位 4 共同构成小时的十位数;当以 12 小时格式计时时,位 5 为 1 表示PM(下午),为 0 表示 AM(上午),这种格式只有位 4 一位作为小时的十位数。

控制寄存器用于对内部寄存器单元的写保护。位 7(WP 位)为 0 时,寄存器数据能够写入,为1 时数据不能写入寄存器。

充电寄存器用于对备用电池充电模式的控制。四位 TCS 位用于控制涓流充电,当这四位的值为1010B 时,使能涓流充电,为其它值时,禁止涓流充电;两位 DS 用于选择内部充电二极管,值为 01B时选择一个二极管,为 10B 时选择两个二极管,为其它值时,禁止充电功能(即使 TCS 为 1010B 也禁止);两个 RS 位用于控制充电限流电阻的连接方式,其值为 00B 时,电阻值为 0,为 01B 时,电阻值为 2kΩ,为 10B 时,电阻值为 4kΩ,为 11B 时,电阻值

6

为 8kΩ。充电管理部分电路的原理如图 2.1.4 所示。

图 2.1.4 程控充电电路原理

③ 内部 RAM

内部RAM共有 31 个字节,可用于存放一些希望掉电后仍能保存的数据。只要按图7.16 输入内部RAM的地址,就可以对内部 RAM进行读、写操作。

3 、数据的读、写操作

对DS1302进行数据的读、写操作,首先必须是以RST 引脚的上升沿开始。在RST 的上升沿之后向 DS1302 写入命令字,然后根据命令字的内容写入或读出数据。

①单字节数据读、写操作

单字节数据读、写操作,每次读、写一个字节数据,其读、写数据的时序如图 2.1.5 所示。

图 2.1.5 单字节数据读、写操作时序

如果是读操作,在命令字之后,I/O 引脚输出信号,每个时钟脉冲输出一位数据;如果是写操作,在命令字之后,I/O 引脚输入信号,每个时钟脉冲接收一位数据。

②多字节数据读、写操作

特殊地,当命令字中的地址位(A0~A4)都为 1 时,为数据连续读、写命令。如果是对内部寄存器操作,则从秒寄存器开始操作,最多可连续读、写 9 个

7

字节数据(因为实际只有 9 个寄存器),地址从 00H~08H;如果是对内部 RAM 进行操作,则最多可连续读、写 31 个字节数据,地址从 00H~30H。数据连续读、写操作的时序如图 2.1.6 所示:

图 2.1.6 多字节数据连续读、写操作时序

在数据连续读、写操作中,命令字后超出实际可读、写数据的时钟无效(内部寄存器最多 72 个时钟,内部 RAM 最多 248 个时钟),也可以通过将 RST 引脚置为低电平,直接结束数据连续读、写操作。

必须注意,RST 置为高电平之前,SCLK 引脚必须为低电平(0),RST 置为低电平之前,SCLK引脚必须为高电平。

2.2 8051单片机介绍

8051是一种8位元的单芯片微控制器,属于MCS-51单芯片的一种,由英特尔公司于1981年制造。到现在,有更多的IC设计商,如爱特梅尔、飞利浦、华邦等公司,相继开发了功能更多、更强大的兼容产品。

8051单芯片是同步式的顺序逻辑系统,整个系统的工作完全是依赖系统内部的时脉信号,用以来产生各种动作周期及同步信号。在8051单片机中已内建时钟产生器,在使用时只需接上石英晶体谐振器(或其它振荡子)及电容,就可以让系统产生正确的时钟信号。

8

AT89S51提供以下标准功能:40个引脚、4K Bytes Flash片内程序存储器、128

Bytes的随机存取数据存储器(RAM)、32个外部双向输入/输出(I/O)口、5个中断优先级2层中断嵌套中断、2个数据指针、2个16位可编程定时/计数器、2个全双工串行通信口、看门狗(WDT)电路、片内振荡器及时钟电路。

三.软硬件设计

3.1 硬件电路设计

本实验用串行动态显示电子钟程序,由于,实验电路板上只有六位LED数码管显示,所以需要再加一个按键程序,用以切换时间和日期。 串行显示电路如下图所示

图3.1串行显示电路

8051单片机与DS1302用下图的电路图相连

P2.0 P2.1 P2.2

MCS51

单片机

SIO CLK RST DS1302 9

图3.2 单片机与DS1302连接电路

其中串行动态显示电路已经在单片机内部接好了,实验中只要接图3.2中3

条线可以了。

3.2 软件程序设计 程序框图

显示程序框图

按键程序框图

10

汇编程序如下: SEC_0 EQU 50H SEC_1 EQU SEC_0+1

MIN_0 EQU SEC_1+1 MIN_1 EQU MIN_0+1

HOUR_0 EQU MIN_1+1 HOUR_1 EQU HOUR_0+1

DATE EQU HOUR_1+1

DAY_0 EQU DATE+1 DAY_1 EQU DAY_0+1

MON_0 EQU DAY_1+1 MON_1 EQU MON_0+1

YEAR_0 EQU MON_1+1 YEAR_1 EQU YEAR_0+1

DS_SIO EQU P2.0 DS_CLK EQU P2.1 DS_RST EQU P2.2 ORG 0000H AJMP START ORG 0030H

11

START: MOV SP,#30H CLR DS_RST

;在此处给有关变量单元赋初值,设定时间为10/1/1 0:0:0 星期5 MOV SEC_0,#1 MOV SEC_1,#2 MOV MIN_0,#3 MOV MIN_1,#4 MOV HOUR_0,#2 MOV HOUR_1,#1 MOV DATE,#5 MOV DAY_0,#1 MOV DAY_1,#2 MOV MON_0,#1 MOV MON_1,#1 MOV YEAR_0,#2 MOV YEAR_1,#1 MOV P0,#0

CLR P1.1 ;初始化有关I/O口 CLR P1.2

MOV R0,#HOUR_1 ;初始化显示指针寄存器 ;R0指向第一位显示数字 MOV R3,#01H ;初始化需点亮数码管位置代码 NOP

MOV R1,#YEAR_1 ;初始化显示指针寄存器 ;R0指向第一位显示数字 MOV R4,#01H ;初始化需点亮数码管位置代码 LCALL WR_1302

LOOP: LCALL RD_1302 JUMP KEY

JUMP2: LCALL DISPA ;调用数码管循环点亮子程序A AJMP LOOP

JUMP3: LCALL DISPB ;调用数码管循环点亮子程序B AJMP LOOP KEY: JB P1.7 JUMP2 LCALL JUMP3

;按键程序,用以切换日期和时间的显示 WR_1302: CLR DS_RST NOP NOP CLR DS_CLK

12

NOP NOP

SETB DS_RST MOV A,#8EH LCALL W_BYTE MOV A,#00H

LCALL W_BYTE

SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#90H LCALL W_BYTE MOV A,#04H

LCALL W_BYTE SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#80H LCALL W_BYTE MOV A,SEC_1 SWAP A

ORL A,SEC_0 ANL A,#7FH LCALL W_BYTE SETB DS_CLK NOP NOP

;写控制寄存器,允许写入

;写充电寄存器,禁止充电

;写秒寄存器,启动计时

13

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#82H LCALL W_BYTE MOV A,MIN_1 SWAP A

ORL A,MIN_0 LCALL W_BYTE SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#84H LCALL W_BYTE

MOV A,HOUR_1 SWAP A

ORL A,HOUR_0 LCALL W_BYTE SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#86H LCALL W_BYTE MOV A,DAY_1

;写分寄存器;写时寄存器14

SWAP A

ORL A,DAY_0 LCALL W_BYTE SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#88H LCALL W_BYTE MOV A,MON_1 SWAP A

ORL A,MON_0 LCALL W_BYTE SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#8AH LCALL W_BYTE MOV A,DATE LCALL W_BYTE SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#8CH

;写日寄存器

;写月寄存器

;写星期寄存器15

LCALL W_BYTE MOV A,YEAR_1 SWAP A ORL A,YEAR_0 LCALL W_BYTE SETB DS_CLK NOP NOP CLR DS_RST NOP NOP CLR DS_CLK NOP NOP SETB DS_RST MOV A,#8EH LCALL W_BYTE MOV A,#80H LCALL W_BYTE SETB DS_CLK NOP NOP CLR DS_RST RET

RD_1302: CLR DS_CLK NOP NOP SETB DS_RST MOV A,#81H LCALL W_BYTE LCALL R_BYTE PUSH ACC ANL A,#0FH MOV SEC_0,A POP ACC ANL A,#0F0H SWAP A MOV SEC_1,A SETB DS_CLK NOP NOP CLR DS_RST

;写年寄存器

;写控制寄存器,禁止写入;读秒寄存器

16

NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#83H LCALL W_BYTE LCALL R_BYTE PUSH ACC ANL A,#0FH MOV MIN_0,A POP ACC ANL A,#70H SWAP A

MOV MIN_1,A ;读分寄存器SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#85H LCALL W_BYTE LCALL R_BYTE PUSH ACC ANL A,#0FH MOV HOUR_0,A POP ACC ANL A,#0F0H SWAP A

MOV HOUR_1,A ;读时寄存器 SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP

17

NOP

SETB DS_RST MOV A,#87H LCALL W_BYTE LCALL R_BYTE PUSH ACC ANL A,#0FH MOV DAY_0,A POP ACC ANL A,#0F0H SWAP A

MOV DAY_1,A SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#89H LCALL W_BYTE LCALL R_BYTE PUSH ACC ANL A,#0FH MOV MON_0,A POP ACC ANL A,#70H SWAP A

MOV MON_1,A SETB DS_CLK NOP NOP

CLR DS_RST NOP NOP

CLR DS_CLK NOP NOP

SETB DS_RST MOV A,#8BH LCALL W_BYTE

;读日寄存器;读月寄存器18

LCALL R_BYTE MOV DATE,A SETB DS_CLK NOP NOP CLR DS_RST NOP NOP CLR DS_CLK NOP NOP SETB DS_RST MOV A,#8DH LCALL W_BYTE LCALL R_BYTE PUSH ACC ANL A,#0FH MOV YEAR_0,A POP ACC ANL A,#0F0H SWAP A MOV YEAR_1,A SETB DS_CLK NOP NOP CLR DS_RST RET

W_BYTE: MOV R2,#8 CLR DS_CLK WR_L: RRC A MOV DS_SIO,C SETB DS_CLK NOP NOP CLR DS_CLK DJNZ R2,WR_L RET R_BYTE: MOV R2,#8

;读星期寄存器 ;读年寄存器 19

CLR DS_CLK RD_L: MOV C,DS_SIO RRC A SETB DS_CLK NOP NOP CLR DS_CLK DJNZ R2,RD_L RET

DISPA: MOV A,R3 ;取位代码 MOV P0,A ;位代码送P0口 SETB P1.2 NOP

CLR P1.2 ;产生一个锁存脉冲,锁存位代码 MOV A,@R0 ;取需显示的数字

MOV DPTR,#DISPD ;装载笔画编码表首地址 MOVC A,@A+DPTR ;取需显示数字笔画代码 MOV P0,A ;笔画代码送到P0口 SETB P1.1 NOP

CLR P1.1 ;产生一个锁存脉冲,锁存笔画代码 DEC R0 ;R0增1指向下一个需显示数字 MOV A,R3 CLR C RLC A

MOV R3,A ;R3中的值左移1位,指向下一位数码管 CJNE R0,#49H,DISP1 ;R0中不为49H则继续 MOV R0,#HOUR_1 ;R0中为49H,循环完一轮 ;重新赋初值 MOV R3,#1 ;位置代码初值 DISP1: NOP RET

;显示时间程序

DISPB: MOV A,R4 ;取位代码 MOV P0,A ;位代码送P0口 SETB P1.2 NOP

CLR P1.2 ;产生一个锁存脉冲,锁存位代码 MOV A,@R1 ;取需显示的数字

MOV DPTR,#DISPD ;装载笔画编码表首地址 MOVC A,@A+DPTR ;取需显示数字笔画代码 MOV P0,A ;笔画代码送到P0口 SETB P1.1

20

NOP

CLR P1.1 ;产生一个锁存脉冲,锁存笔画代码 DEC R1 ;R1增1指向下一个需显示数字 MOV A,R4 CLR C RLC A

MOV R4,A ;R4中的值左移1位,指向下一位数码管 CJNE R1,#56H,DISP1 ;R1中不为56H则继续 MOV R1,#YEAR_1 ;R1中为56H,循环完一轮 ;重新赋初值 MOV R4,#1 ;位置代码初值 DISP1: NOP RET

;显示日期的程序 ;数字笔画代码表

; 0 1 2 3 4 5 6 7 8 9 熄 DISPD: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0

END

四.系统调试及结果

先把实验箱上的线路连接,然后把自己编的程序由电脑导入单片机中,调试

程序。检查线路以及程序没有出错,且程序已成功导入单片机后,运行程序,观察LED显示屏的变化。

实验结果:LED显示正常,显示时间初始值124321,且时间能自行走动。按下按键P1.7后,显示切换为日期121121,松开后继续显示时间,与日常生活中所戴的普通电子表功能吻合。

五.课设总结与体会

通过此次课设可以说进一步加深了对于单片机的认识,对于本校实验室的实验箱也有了更加细致的了解,同时还掌握了DS1302这个曾经学习单片机的时候从未接触过的芯片,LED的显示功能也掌握地更加娴熟,最重要的是在这次课设中,我们从网络上搜寻原始资料,理解DS1302芯片的电路连接以及在程序代码中的作用,接着对照实验室中的实验箱入手,根据网上的代码片段以及自己曾经做过的实验和学过的单片机知识创造出属于自己的电子钟代码,可谓很好地锻炼了动手创新的能力,收获不菲。

六.参考文献

[1].汪建主编,单片机原理及应用技术,北京,华中科技大小和出版社,2012.05. [2].电工教学基地,MCS-51系列单片机原理及应用实验指导书,华中科技大学出版社,

21

[3].www.http://www.wodefanwen.com/——百度一下,你就知道

22

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

Top