电子钟的设计与实现0.docx

上传人:b****5 文档编号:6659787 上传时间:2023-01-08 格式:DOCX 页数:41 大小:541.49KB
下载 相关 举报
电子钟的设计与实现0.docx_第1页
第1页 / 共41页
电子钟的设计与实现0.docx_第2页
第2页 / 共41页
电子钟的设计与实现0.docx_第3页
第3页 / 共41页
电子钟的设计与实现0.docx_第4页
第4页 / 共41页
电子钟的设计与实现0.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

电子钟的设计与实现0.docx

《电子钟的设计与实现0.docx》由会员分享,可在线阅读,更多相关《电子钟的设计与实现0.docx(41页珍藏版)》请在冰豆网上搜索。

电子钟的设计与实现0.docx

电子钟的设计与实现0

实时电子时钟钟的设计与实现

(4个按键功能与作用简介)(程序流程图)

实时电子时钟的设计与实现是通过用单片机AT89S52与实时时钟芯片DS1302设计电路制作成用数码管显示实时时间与日期的电子钟。

一:

实时电子时钟功能特点:

·采用2个4位数码管作为显示时间与日期,显示亮度高,无视角,按钮k调节时间与日期交换显示。

·采用专业的时钟芯片DS1302和充电电容使时钟断电依然走时。

·去功能菜单操作,4个按键操作,可加减调时,操作方便。

(4个按键功能与作用简介)

二:

实时电子时钟制作元件清单:

品名

型号

数量

品名

型号

数量

共阳数码管

FJ5461BH

2

电阻

4.7k

8

电阻

470

7

单片机

AT89S52

1

晶振

12M

1

晶振

23.768KHZ

1

微动开关

5*5*6mm

4

极性电容

220uF

1

极性电容

10uF

1

电容

30PF

1

三极管

8550

8

时钟IC

DS1302

1

三:

主要元器件芯片简介

3.1)单片机AT89S52功能介绍:

AT89S52是一种低功耗、高性能COMS8位微控制器,具有8K在系统可编程Flash存储器。

使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:

8K可编程Flash存储器,256KRAM,32位I/O可编程口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

AT89S52可降至0HZ静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保护,振荡器被冻结,单片机一切工作停止,直至下一个中断或硬件复位为止。

AT89S52引脚图如下如所示:

AT89S52内部方框图如下:

AT89S52各引脚功能介绍:

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.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。

在flash编程和校验时,P1口接收低8位地址字节。

引脚号

第二功能

P1.0

T2(定时器/计数器的外部计数输入),时钟输出

P1.1

T2EX(定时器/计数器的捕捉/重载触发信号和方向控制)

P1.5

MOSI(在系统编程用)

P1.6

MISO(在系统编程用)

P1.7

SCK(在系统编程用)

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位地址字节和一些控制信号。

P3口:

P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。

对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。

在flash编程和校验时,P3口也接收一些控制信号。

引脚号

第二功能

P3.0

RXD(串行输入)

P3.1

TXD(串行输出)

P3.2

INT0(外部中断0)

P3.3

INT1(外部中断1)

P3.4

T0(定时器0外部输入)

P3.5

T1(定时器1外部输入)

P3.6

WR(外部数据存储器写选通)

P3.7

RD(外部数据存储器读选通)

RST:

复位输入。

晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。

看门狗计时完成后,RST脚输出96个晶振周期的高电平。

ALE/PROG:

地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

在flash编程时,此引脚(PROG)也用作编程输入脉冲。

在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。

PSEN:

外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

EA/VPP:

访问外部程序存储器控制信号。

为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。

为了执行内部程序指令,EA应该接VCC。

在flash编程期间,EA也接收12伏VPP电压。

XTAL1:

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

XTAL2:

振荡器反相放大器的输出端。

特殊功能寄存器

AT89S52特殊寄存器映象及复位值

表一:

AT89S52特殊寄存器映像及复位值表

定时器2寄存器:

寄存器T2CON和T2MOD包含定时器2的控制位和状态位(如表二和表三所示),寄存器对RCAP2H和RCAP2L是定时器2的捕捉/自动重载寄存器。

中断寄存器:

各中断允许位在IE寄存器中,六个中断源的两个优先级也可在IE中设置。

双数据指针寄存器:

为了更有利于访问内部和外部数据存储器,系统提供了两路16位数据指针寄存器:

位于SFR中82H~83H和位于DP0中84H~85。

特殊寄存器AUXR1中DPS=0选择DP0;DPS=1选择DP1。

用户应该在访问数据指针寄存器前先初始化DSP至合理的值。

掉电标志位:

掉电标志位(POF)位于特殊寄存器PCON的第四位(PCON.4)。

上电期间POF置“1”。

POF可以软件控制使用与否,但不受复位影响。

看门狗定时器

WDT是一种需要软件控制的复位方式。

WDT由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(WDTRST)构成。

WDT在默认情况下无法工作;为了激活WDT,必须往WDTRST寄存器(地址:

0A6H)中依次写入01EH和0E1H。

当WDT激活后,晶振工作,WDT在每个机器周期都会增加。

WDT计时周期依赖于外部时钟频率。

除了复位(硬件复位或WDT溢出复位),没有办法停止WDT工作。

当WDT溢出,它将驱动RSR引脚一个高个电平输出。

WDT的使用

为了激活WDT,必须向WDTRST寄存器(地址为0A6H的SFR)依次写入0E1H和0E1H。

当WDT激活后,必须向WDTRST写入01EH和0E1H喂狗来避免WDT溢出。

当计数达到8191(1FFFH)时,13位计数器将会溢出,这将会复位器件。

晶振正常工作、WDT激活后,每一个机器周期WDT都会增加。

为了复位WDT,必须向WDTRST写入01EH和0E1H(WDTRST是只读寄存器)。

WDT计数器不能读或写。

当WDT计数器溢出时,将给RST引脚产生一个复位脉冲输出,这个复位脉冲持续96个晶振周期(TOSC),其中TOSC=1/FOSC。

为了很好地使用WDT,应该在一定时间内周期性写入那部分代码,以避免WDT复位。

3.2)时钟芯片DS1302功能介绍:

DS1302时钟芯片主要组成部分包括实时时钟/日历、31字节的静态RAM、移位寄存器、控制逻辑和振荡器,它经过一个简单的串行接口与微处理器通信。

实时时钟/日历提供秒、分、时、日、周、月和年等信息,对于小于31天的月,月末的日期自动进行调整,包括了闰年校正的功能,可以采用24小时或带AM/PM的12小时格式。

使用同步串行通信,简化与微处理器的通信。

数据可以以每次一个字节或多达31字节的多字节形式传送至时钟/RAM或从其中送出。

DS1302能在非常低的功耗下工作,消耗小于1微瓦的功率便能保持数据和时钟信息。

DS1302的命令字

命令字节如图所示:

每一数据传送由命令字节初始化。

最高有效位MSB(位7)必须为逻辑1,如果它是零,禁止写DS1302。

位6为逻辑0指定时钟/日历数据;逻辑1指定RAM数据。

位1至5指定进行输入或输出的特定寄存器。

最低有效位LSB(位0)为逻辑0指定进行写操作;逻辑1指定进行读操作。

DS1302引脚图如下如所示

引脚说明

引脚

名称

功能

2/3

X1/X2

32.768KHZ晶振引脚

1/8

VCC2/VCC1

电源引脚

4

GND

5

RST

复位

6

I/O

数据输入/输出

7

SCLK

串行时钟

DS1302时钟芯片时序图如下:

3.3):

4位7段数码管

4位7段数码管各引脚对应关系如下图所示:

四:

实时时钟设计电路图

运用Protel99se搭建好实时电子时钟电路图如下

五:

实时电子时钟程序实现:

(程序流程图)

;4位7段数码管显示

;P0为段码口、P2为位码口

;晶振12M

;时钟芯片:

DS1302

;**************DS1302端口位定义**************

IO_DATABITP1.1;数据传送总线

SCLKBITP1.0;时钟控制总线

RSTBITP1.2;复位总线

K1EQUP1.4;独立键

K2EQUP1.5

K3EQUP1.6

K4EQUP1.7

BEEPEQUP3.7;蜂鸣器

RELAYEQUP1.3;继电器

T_CONUEQU22H;中断计数

TIME_LEQU23H;定时初值

TIME_HEQU24H

TIME_DATAEQU50H;显示时间单元首地址

DATE_DATAEQU60H;显示日期单元首地址

DS_DATAEQU58H;显示定时时间单元首地址

;------------------------------------------------

ORG0000H

AJMPMAIN

ORG000BH

AJMPINT_T0

ORG0100H

;------------------------------------------------

MAIN:

MOVTMOD,#01H;T0,方式1

MOVTIME_L,#00H;50MS定时值

MOVTIME_H,#4CH

MOVT_CONU,#00H;中断次数

MOVIE,#82H;EA=1,ET0=1

MOVA,#00H

MOVR0,#40H;从40H单元开始

MOVR1,#40H;清64个单元

M_CLEAR:

MOV@R0,A

INCR0

DJNZR1,M_CLEAR

MOV7FH,#0AH;送熄灭符

SETBBEEP

LCALLTIME_DELAY;调显示延时

LCALLPROSET;DS1302初始化

MAIN1:

LCALLGET_TIME;从DS1302读数据程序

LCALLCHULI;实时时间数据处理

MOVR0,#TIME_DATA;显示时、分、秒

LCALLDISP

MOVR0,#TIME_DATA

LCALLTIME_DISPLAY

LCALLSET_KEY;键功能程序

LCALLCOMP;实时时间与定时时间比较

JBK1,MAIN1

CALLBEEP_BL

MAIN2:

LCALLCHULI;日期数据处理

MOVR0,#DATE_DATA

LCALLDISP;显示年、月、日

MOVR0,#DATE_DATA

LCALLTIME_DISPLAY

JBK1,MAIN2

CALLBEEP_BL

MAIN3:

LCALLDS_CHULI;定时时间数据处理

MOVR0,#DS_DATA

LCALLDS_SP;显示定时时间

MOVR0,#DS_DATA

LCALLDS_DISPLAY

JBK1,MAIN3

CALLBEEP_BL

AJMPMAIN1

;--------------------------------------------

;中断服务子程序

;300MS对闪动标记取反一次

;--------------------------------------------

INT_T0:

PUSHACC

PUSHPSW

MOVTL0,TIME_L

MOVTH0,TIME_H

INCT_CONU

MOVA,T_CONU

CJNEA,#06H,INT_END

MOVT_CONU,#00H

CPL0AH

INT_END:

POPPSW

POPACC

RETI

;--------------------------------------------

;DS1302初始化子程序

;(R0)=数据(R1)=地址

;--------------------------------------------

PROSET:

CLRRST;DS1302复位

CLRSCLK

NOP

NOP

SETBRST

;MOVR1,#80H;写秒寄存器

;MOVR0,#00H;启动振荡器

;LCALLWRITE

;MOVR1,#82H;写分寄存器

;MOVR0,#58H

;LCALLWRITE

;MOVR1,#84H;写时寄存器

;MOVR0,#80H

;LCALLWRITE

MOVR1,#90H;写充电寄存器

MOVR0,#0ABH

LCALLWRITE

RET

;===============================================

;读时间、日期数据子程序

;存放单元40H-46H

;===============================================

GET_TIME:

MOVR1,#81H;读秒

LCALLREAD

MOV40H,R0

MOVR1,#83H;读分

LCALLREAD

MOV41H,R0

MOVR1,#85H;读时

LCALLREAD

MOV42H,R0

MOVR1,#87H;读出日期

LCALLREAD

MOV43H,R0

MOVR1,#89H;读出月份

LCALLREAD

MOV44H,R0

MOVR1,#8BH;读出星期

LCALLREAD

MOV46H,R0

MOVR1,#8DH;读出年

LCALLREAD

MOV45H,R0

RET

;================================================

;写DS1302子程序

;================================================

WRITE:

CLRSCLK

NOP

NOP

SETBRST

NOP

MOVA,R1

MOVR2,#08H

WRI_01:

RRCA;传输地址到DS1302

NOP

NOP

CLRSCLK

NOP

NOP

MOVIO_DATA,C

NOP

NOP

SETBSCLK

NOP

NOP

DJNZR2,WRI_01

CLRSCLK

NOP

NOP

MOVA,R0

MOVR2,#08H

WRI_02:

RRCA;传输数据到DS1302

NOP

CLRSCLK

NOP

NOP

MOVIO_DATA,C

NOP

NOP

SETBSCLK

NOP

NOP

DJNZR2,WRI_02

CLRSCLK

NOP

NOP

CLRRST

NOP

NOP

RET

;=================================================

;读DS1302子程序

;=================================================

READ:

CLRSCLK

NOP

NOP

SETBRST

NOP

NOP

MOVA,R1

MOVR2,#08H

READ_01:

RRCA

NOP;先传输地址到DS1302

MOVIO_DATA,C

NOP

NOP

SETBSCLK

NOP

NOP

CLRSCLK

NOP

NOP

DJNZR2,READ_01

NOP

NOP

SETBIO_DATA

CLRA

CLRC

MOVR2,#08H

READ_02:

CLRSCLK

NOP

NOP

MOVC,IO_DATA

NOP

NOP

RRCA;再从DS1302接收数据

NOP

NOP

SETBSCLK

NOP

NOP

DJNZR2,READ_02

MOVR0,A

CLRRST

RET

;==============================================

;实时时间、日期数据处理子程序

;==============================================

CHULI:

MOVA,40H;处理秒数据

ANLA,#0FH

MOV50H,A

MOV70H,A

MOVA,40H

ANLA,#11110000B

SWAPA

MOV51H,A

MOV71H,A

;---------------------------------------------

MOVA,41H;处理分数据

ANLA,#0FH

MOV52H,A

MOV72H,A

MOVA,41H

ANLA,#11110000B

SWAPA

MOV53H,A

MOV73H,A

;---------------------------------------------

MOVA,42H;处理时数据

ANLA,#0FH

MOV54H,A

MOV74H,A

MOVA,42H

ANLA,#11110000B

SWAPA

MOV55H,A

MOV75H,A

;----------------------------------------------

MOVA,43H;处理日数据

ANLA,#0FH

MOV60H,A

MOV76H,A

MOVA,43H

ANLA,#11110000B

SWAPA

MOV61H,A

MOV77H,A

;---------------------------------------------

MOVA,44H;处理月数据

ANLA,#0FH

MOV62H,A

MOV78H,A

MOVA,44H

ANLA,#11110000B

SWAPA

MOV63H,A

MOV79H,A

;---------------------------------------------

MOVA,45H;处理年数据

ANLA,#0FH

MOV64H,A

MOV7AH,A

MOVA,45H

ANLA,#11110000B

SWAPA

MOV65H,A

MOV7BH,A

;----------------------------------------------

MOVA,46H;处理周数据

MOV66H,A

MOV7CH,A

RET

;=============================================

;实时时间、日期查表取数子程序

;=============================================

DISP:

;MOVR0,#TIME_DATA

MOVR3,#06H

DISP1:

MOVA,@R0

MOVDPTR,#TAB_NU

MOVCA,@A+DPTR

MOV@R0,A

INCR0

DJNZR3,DISP1

RET

;====================================================

;时间、日期显示子程序

;====================================================

TIME_DISPLAY:

;MOVR0,#TIME_DATA;取得显示单元首地址

MOVR1,#07FH;从第一个数码管开始

MOVR2,#08H;共8个数码管

DISLP:

MOVP0,@R0;获得当前单元数据

MOVA,R1

MOVP2,A;数码显示

JBACC.5,DISLP1;第三位数码管显示-

MOVP0,#0BFH

JMPDISLP3

DISLP1:

JBACC.2,DISLP2;第六位数码管显示-

MOVP0,#0BFH

JMPDISLP3

DISLP2:

INCR0

DISLP3:

MOVA,R1;为下一个数准备

RRA;下一个单元

MOVR1,A;保存

LCALLDELAY;为了保证数码管亮度,延时

DJNZR2,DISLP;重复显示,直到全部数据刷新过

RET;返回

DELAY:

MOVR4,#0AH

L15:

MOVR5,#64H

L16:

DJNZR5,L16

DJNZR4,L15

RET

;**********

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1