文档库 最新最全的文档下载
当前位置:文档库 › DS1302使用手册

DS1302使用手册

DS1302使用手册
DS1302使用手册

S O

DS1302 涓流充电时钟保持芯片的原理与应用

摘要 本文概括介绍了 DS1302 时钟芯片的特点和基本组成 通过实例详细说明了有关功能的应用

软件 关于 DS1302 各寄存器的详细位控功能请参考 D ALLAS 达拉斯公司的相应产品资料

概述

DS 1302 是 D ALLAS 公司推出的涓流充电时钟芯片 内含有一个实时时钟/日历和

31 字节静态 R AM 通过简 单的串行接口与单片机进行通信 实时时钟/日历电路提供秒 分 时 日 日期 月 年的信息 每月的天 数和闰年的天数可自动调整 时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式 DS1302 与单片机之 间能简单地采用同步串行的方式进

行通信 仅需用到三个口线 1 RE

复位 2

I/ 数据线 3 SCLK

串行时钟时钟

/RAM 的读/写数据以一个字节或多达 31 个字节的字符组方式通信 DS1302 工作时功耗很 低 保持数据和时钟信息时功率小于 1mW DS1302 是由 DS1202 改进而来 增加了以下的特性 双电源管脚用于主电源和备份电源供应 Vcc1

为可 编程涓流充电电源 附加七个字节存储器 它广泛应用于电话 传真 便携式仪器以及电池供电的仪器仪表等 产品领域 下面将主要的性能指标作一综合 z 实时时钟具有能计算 2100 年之前的秒 分 时 日 日期 星期 月 年的能力 还有闰年调整的能力 z 31 8 位暂存数据存储 R AM z 串行

I /O 口方式使得管脚数量最少 z 宽范围工作电压 2.0 5.5V z 工作电流 2.0V 时,小于 300nA z

读/写时钟或 R AM 数据时 有两种传送方式

单字节传送和多字节传送

字符组方式

z 8 脚 D IP 封装或可选的 8 脚 S OIC

封装

根据表面装配

z 简单 3 线接口

z 与 T TL 兼容Vcc=5V z 可选工业级温度范围

-40

+85 z 与 D S1202 兼容 z

在 D S1202 基础上增加的特性 对 V cc1 有可选的涓流充电能力 双电源管用于主电源和备份电源供应 备份电源管脚可由电池或大容量电容输入 附加的 7 字节暂存存储器

1 DS130

2 的基本组成和工作原理 D S 1302 的管脚排列及描述如下图及表所示

管脚描述

X1 X2 32.768KHz 晶振管脚

GND 地

RST 复位脚

I/O 数据输入/输出引脚

SCLK 串行时钟

Vcc1,Vcc2 电源供电管脚

订单信息

部分# 描述

DS1302 串行时钟芯片8 脚D IP

DS1302S 串行时钟芯片8 脚S OIC200mil

DS1302Z 串行时钟芯片8 脚S OIC150mil

管脚配置

2.DS1302 内部寄存器

CH: 时钟停止位寄存器2的第7位12/24 小时标志CH=0 振荡器工作允许bit7=1,12 小时模式

CH=1 振荡器停止bit7=0,24 小时模式

WP: 写保护位寄存器2的第5位:AM/PM 定义

WP=0 寄存器数据能够写入AP=1 下午模式

WP=1 寄存器数据不能写入AP=0 上午模式

TCS: 涓流充电选择DS: 二极管选择位

TCS=1010 使能涓流充电DS=01 选择一个二极管

TCS=其它禁止涓流充电DS=10 选择两个二极管

DS=00 或11, 即使T CS=1010, 充电功能也被禁止

MO V Com man d,#8Eh ;命令字节为 8E MO V Byt eCn t,#1 ;单字节传送模式

MO V R0,#Xm tDa t 数据地址覆给 R 0 MO V

XmtDat,#00h

数据内容为

0写入允许

DS 1302 与微控制器的接口软件及功能应用举例

下面首先给出基本的接口软件 然后举例说明各种功能的应用

1 写保护寄存器操作

当写保护寄存器的最高位为 0 时 允许数据写入寄存器 写保护寄存器可以通过命令字节 8E 8F 来 规定禁止写入/读出 写保护位不能在多字节传送模式下写入

Wri te_Ena ble :

MOV C omm and ,#0BEh ;命令字节为 B Eh MOV B yte Cnt ,#8 ;多字节写入模式 此模块为 8 个 MOV R 0,#XmtD at 数据地址覆给 R 0 MOV

X mtD at,#59h

秒单元内容为 59h

AC ALL Sen d_B yte

调用写入数据子程序 RE T

返回调用本子程序处

当写保护寄存器的最高位为 1 时 禁止数据写入寄存器 W rit e_D isa ble :

MO V Com man d,#8Eh ;命令字节为 8E MO V Byt eCn t,#1 ;单字节传送模式

MO V R0,#Xm tDa t 数据地址覆给 R 0 MO V XmtDat,#80h 数据内容为 80h 禁止写入 AC ALL Sen d_B yte

调用写入数据子程序

RE T

返回调用本子程序处

以上程序调用了基本数据发送(Send_By te)模块及一些内存单元定义, 其源程序清单在附录中给出 下面 的程序亦使用了这个模块

2 时钟停止位操作 当把秒寄存器的第 7 位时钟停止位设置为 0 时 起动时钟开始 Osc_Ena ble:

MOV C omma nd,#80h

; 命令字节为 80 MOV B yteC nt,#1 ; 单字节传送模式

MOV R 0,#X mtDa t 数据地址覆给 R 0 MOV X mtDa t,#00h 数据内容为

振荡器工作允许 ACALL

Send_Byte

调用写入数据子程序 RET

返回调用本子程序处

当把秒寄存器的第 7 位时钟停止位设置为 1 时 时钟振荡器停止 HT 1380 进入低功耗方式 Osc _Dis able :

M OV C omma nd,#80h

;命令字节为 80

M OV B yteC nt,#1 ;单字节传送模式

M OV R 0,#X mtDa t 数据地址覆给 R 0 M OV X mtDa t,#80h 数据内容为 8

0h 振荡器停止 A CALL S end_Byte

调用写入数据子程序 R ET

返回调用本子程序处

3. 多字节传送方式

当命令字节为 B E 或 B F 时 DS1302 工作在多字节传送模式 8 个时钟/日历寄存器从寄存器 0 地址

开 始连续读写从 0 位开始的数据

当命令字节为 FE 或 FF 时 DS1302 工作在多字节 RAM 传送模式 31 个 RAM 寄存器从 0 地址开始连续读写从 0 位开始的数据 例如 写入 00 年 6 月 21日 星期三 13 时 59 分 59 秒 程序设置如下

W rit

e_M ultipl ebyt e:

M OV Co mma nd,#85h ; 命令字节为 85h M OV By teC nt,#1 ; 单字节传送模式

M OV R 1,#R cvD at 数据地址覆给 R 1 A CAL L Re cei ve_Byt e

调用读出数据子程序 R ET

返回调用本子程序处

MOV X mtD at+1,#59h 分单元内容为 59h MOV X mtD at+2,#13h 时单元内容为 13h MOV X mtD at+3,#21h 日期单元内容为 21h MOV X mtD at+4,#06h 月单元内容为 06h MOV X mtD at+5,#03h 星期单元内容为 03h MOV X mtD at+6,#0 年单元内容为 00h MOV X mtD at+7,#0 写保护单元内容为 00h ACA LL S end _By te

调用写入数据子程序 RET

返回调用本子程序处

读出寄存器 0-7 的内容 程序设置如下 Rea d_M ultipl eby te: MOV C omm and ,#0BFh ;命令字节为 B Fh

MOV B yte Cnt ,#8 ;多字节读出模式此模块为 8

MOV R 1,#Rcv Dat 数据地址覆给 R 1 ACALL R ece ive _By te 调用读出数据子程序 RET 返回调用本子程序处 以上程序调用了基本数据接收(Recei ve_Byt e)模块及一些内存单元定义, 其源程序清单在附录中给 出 下面的程 序亦使用了这个模块

4. 单字节传送方式

例如 写入 8 时12

小时模式程序设置如下

Wri te_

Sin gle byt e: M OV Co mma nd,#84h ; 命令字节为 84h

M OV By teC nt,#1 ; 单字节传送模式 M OV R0,#X mtD at 数据地址覆给 R 0 M OV Xm tDa t,#88h 数据内容为 88h A CAL L Send_Byte 调用写入数据子程序

RET

返回调用本子程序处

上面所列出的程序模块 Write_Enab le

W rit e_Di sabl e

Osc_Enable

Osc _D isab le

与单字节写入模块 Write_Singlebyte 的程序架构完全相同 仅只是几个入口参数不同 本文是为了强调功 能使用的不同才将其分为不同模块 另外,与涓流充电相关的设定也是单字节操作方式,这里就不再单独列出, 用户在使用中可灵活简略 下面模块举例说明如何单字节读出 小时 单元的内容.

Read _Si ngl eby te:

DS 1302

应用电路原理图

P87LPC764 单片机选取内部振荡及内部复位电路

附录 数据发送与接收模块源程序清单

; CPU 工作频率最大不超过 20MHz

;******************************************************************************************** ; P87LPC 762/4 主控器发送接受数据程序 ; 说明 本程序是利用 P hilips 公司的 P 87LPC764 单片机任何具有 51 内核或其它合适的单片机都可在此

作为主控器的普通 I /O 口(如 P 1.2/P 1.3/P 1.4)实现总线的功能 对总线 上的器件 本程序采用 D S 1

302 进行读写操作 命令字节在 C ommand 传送字节数在 B yteCnt 中 所发送的数据在 X mtDat 中 所接

的数据在 R cvDat 中 ;********************************************************************************************

;P87LPC 762/4 主控器总线发送接受数据程序头文件

;内存数据定义

BitCnt data 30h ; 数据位计数器 Byt eCn t data 31h ; 数据字节计数器 Command data 32h ; 命令字节地址 RcvDat D ATA 40H ; 接收数据缓冲区 XmtDat D ATA

50H

;

发送数据缓冲

;端口位定义 IO_DAT A b it P 1.3 ; 数据传送总线 SCLK b it P 1.4 ; 时钟控制总线 RST

bi t P 1.2 ; 复位总线

;******************************************************************************************** ;发送数据程序 ;名称:S end _By te

;描述:发送Byte

Cnt 个字节给被控器 D S 1302 ;命令字节地址在 C ommand 中 ;所发送数据的字节数在 B yteCnt 中 发送的数据在 X mtDat 缓冲区中 ;********************************************************************************************

Send_Byt e:

CLR RST ;复位引脚为低电平 所有数据传送终止 NO P

CLR SC LK

清时钟总线 NO P

NO P

S ETB RST ;复位引脚为高电平 逻辑控制有效

M OV

A,Com man d

准备发送命令字节

SETB RST

;复位引脚为高电平 逻辑控制有效 NO P M OV A,Command

准备发送命令字节 M OV

Bi tCn t,#08h 传送位数为 8 S_By te0:

RRC A

将最低位传送给进位位 C M OV

IO _DA TA,C 位传送至数据总线

NO P SETB SC LK

时钟上升沿 发送数据有效 NO P CLR SC LK

清时钟总线 D JNZ Bi tCn t,S _By te0

位传送未完毕则继续 NO P

S_By te 1:

准备发送数据 M OV A,@R0

传送数据 过程与传送命令相同 M OV

Bi tCn t,#08h S_By te2:

RRC A

M OV IO _DA TA,C

NO P

S ETB SC LK

NO P

C LR SC LK

D JNZ Bi tCn t,S_By te2 I NC R0

发送数据的内存地址加 1 D JNZ By teC nt,S_B yte 1

字节传送未完毕则继续 NO P

C LR RST

逻辑操作完毕 清 R ST R ET

;***************************************************************************************

;接收数据程序;

;名称:Rece ive _By te

;描述:从被控器 D S 1302 接收Byte

Cnt 个字节数据 ;命令字节地址在 C ommand 中 ;所接收数据的字节数在 B yteCnt 中 接收的数据在 R cvDat 缓冲区中 ;***********************************************************************************

Rece ive _By te:

CLR RST ;复位引脚为低电平 所有数据传送终止 NO P

CLR

SC LK

清时钟总线

R_By te0:M OV Bi tCn t,#08h传送位数为8

RRC A将最低位传送给进位位C

M OV IO_DA TA,C位传送至数据总线

NO P

SETB SC LK时钟上升沿发送数据有效NO P

CLR SC LK清时钟总线

D JNZ BitCnt,R_Byte0 位传送未完毕则继续

NO P

R_By te1:准备接收数据

CLR A清类加器C LR

C清进位位C

M OV Bi tCn t,#08h接收位数为8

R_By te2:

NO P

M OV C,IO_DAT A数据总线上的数据传送给C

RRC A从最低位接收数据

SETB SC LK时钟总线置高

NO P

CLR SC LK时钟下降沿接收数据有效

D JNZ BitCnt,R_Byte2 位接收未完毕则继续

M OV@R1,A 接收到的完整数据字节放入接收内存缓冲区

I NC R1 接收数据的内存地址加1

D JNZ By teC nt,R_B yte1 字节接收未完毕则继续

NO P

CLR RST 逻辑操作完毕清R ST

R ET

;============================================================================== =============== E ND

DS1302读写程序

随笔/mcu51 发表于2007-06-17, 21:53 /*---------------------------------------------- DS1302读写一体化C51源程序 HotPower@https://www.wendangku.net/doc/4915742465.html, ------------------------------------------------*/ //打开DS1302 void TimeSpiOpen(void) { TIMECLK = 0; TIMERST = 0;//禁止DS1302 TIMEIO = 1;//释放数据总线 TIMERST = 1;//使能DS1302 } //关闭DS1302 void TimeSpiClose(void) { TIMERST = 0;//禁止DS1302 TIMEIO = 1;//释放数据总线 TIMECLK = 1; } //读写DS1302 unsigned char TimeSpiReadWrite(unsigned char val) { unsigned char i; ACC = val;//取8位数据 for (i = 8;i > 0; i--) { TIMECLK = 0;//时钟下降沿输入数据(DS1302读) _nop_();//延时

CY = TIMEIO;//接收串行数据到CY _rrca_();//右移一位数据到CY(先存后取) TIMEIO = CY;//发送串行数据 TIMECLK = 1;//时钟上升沿打入数据(DS1302写) TIMEIO = 1;//释放数据总线 } val = ACC; return val; } //读DS1302字节 unsigned char TimeByteRead(unsigned char address) { TimeSpiOpen();//打开DS1302 TimeSpiReadWrite(address);//写入DS1302命令 address = TimeSpiReadWrite(0xff);//读入DS1302数据 TimeSpiClose();//关闭DS1302 return address;//返回数据 } //读DS1302RAM字节 unsigned char TimeRamByteRead(unsigned char address) { TimeSpiOpen();//打开DS1302 TimeSpiReadWrite((address << 1) | 0xc1);//写入DS1302命令 address = TimeSpiReadWrite(0xff);//读入DS1302数据 TimeSpiClose();//关闭DS1302 return address;//返回数据 }

DS1302时钟芯片读写详解

DS1302时钟芯片读写详解 2008-09-26 13:07 /*DS1302读写程序(C51)*/ sbit DS13CLK =P1^5; /*DS1302的SCLK脚脉冲*/ sbit DS13IO =P1^6; /*DS1302的IO脚数据*/ sbit DS13CS =P1^7; /*DS1302的RST脚片选*/ /*向DS1302写一个字节*/ void _wds13byte(uchar _code) { uchar i; DS13CLK =0; DS13CLK =0; for(i=0;i<8;i++) { if(_code&0x01) DS13IO =1; else DS13IO =0; DS13CLK =1; DS13CLK =1; DS13CLK =0; DS13CLK =0; _code =_code >> 1; } } /*从DS1302读一个字节*/ uchar _rds13byte(void) { uchar i,_code; _code=0; DS13CLK =0; DS13CLK =0; DS13IO =1; for(i=0;i<8;i++) { _code =_code >>1; if(DS13IO) _code =_code|0x80; DS13CLK =1; DS13CLK =1; DS13CLK =0; DS13CLK =0; } return _code; } /*读功能_code读功能命令*/ uchar readds1302(uchar _code)

{ DS13CS =0; /*关闭DS1302*/ DS13CLK =0; DS13CLK =0; DS13CS =1; /*使能DS1302*/ _wds13byte(_code); /*读代码*/ _code=_rds13byte(); /*返回读取数字*/ DS13CLK =1; DS13CS =0; /*关闭DS1302*/ return _code; } /*写功能fp写的地址,_code写的内容*/ void writeds1302(uchar fp,uchar _code) { DS13CS =0; /*关闭DS1302*/ DS13CLK =0; DS13CLK =0; DS13CS =1; /*使能DS1302*/ _wds13byte(fp); /*写控制命令*/ _wds13byte(_code); /*写入数据*/ DS13CLK=1; DS13CS =0; /*关闭DS1302*/ } /*******DS1302设置快速充电***************/ void ds13_charg(void) { writeds1302(0x8e,0x00); /*解除写保护*/ writeds1302(0x90,0xa5); /*单二极管2K电阻充电*/ writeds1302(0x8e,0x80); /*置位写保护*/ } ;;;DS1302读写程序(汇编);;; ;******************************************************************* **/ T_CLK Bit P1.5 ;实时时钟时钟线引脚 T_IO Bit P1.6 ;实时时钟数据线引脚 T_RST Bit P1.7 ;实时时钟复位线引脚 ;********************************************************** ;子程序名:Set1302 ;功能:设置DS1302 初始时间,并启动计时。 ;说明: ;调用:RTInputByte ;入口参数:初始时间在:Second,Minute,Hour,Day,Month,Week.YearL(地址连续) ;出口参数:无 ;影响资源:A B R0 R1 R4 R7

ds1302时钟程序详解-ds1302程序流程图(C程序)

ds1302时钟程序详解,ds1302程序流程图(C程序) ds1302时钟程序详解 DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始 输出。 2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从 低位0位到高位7。 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日 历、时间寄存器及其控制字见表1。 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RA M的31个字节,命令控制字为FEH(写)、FFH(读)。

ds1302程序流程图 3.2 DS1302实时时间流程 图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基 本操作进行编程:

8 功能模块测试方法

手把手教你学51单片机C语言教程第8课 (HJ-1G功能模块测试) 本课请直接看配套的视频学习 图1HJ-1G开发板 “工欲善其事,必先利其器”,有一套实用好用的51单片机实验装置对于初学者来说是十分重要的,有了51单片机实验装置,您就可以多动手、多实践,跨入单片机的大门就不是什么遥不可及的事了。 下面,先介绍一下我们后面实验中要用到的51单片机实验装置,它集USB下载程序、USB仿真,单片机实验、单片机开发等功能于一身,因此我们把它称为51单片机综合学习系统。 《手把手教你学51单片机》视频教程--配套御用指定开发板,相信您有了专业的单片机开发板和通过对《手把手教你学51单片机》视频教程的学习,会迅速掌握好单片机技术,配套的视频教程,入门视频独家创作,七八年的实际项目开发经验为基础,入门视频不是从网上随便下载来忽悠大众的。视频教程全部开源免费提供,大家可以随意下载学习。 HJ-1G51单片机配套入门视频下载复制下面的网址到IE上可以进入下载https://www.wendangku.net/doc/4915742465.html,/HL/HJ/3.htm 可以通过以下电驴地址来下载视频教程: 也可以通过以下优酷视频在线观看地址在线观看或者下载 同时页面左上有最新QQ群号,欢迎大家加入讨论学习,无论是否购买我们的板

子都可以加入,这是一个讨论的平台,非常欢迎大家进入学习讨论。 课程目录:☆☆☆后续课程强劲更新中☆☆☆ 0简单了解一下慧净 1K52开发板功能简介 2K52开发板接线方法与驱动安装 3烧写软件的安装 4烧写软件的使用方法 5K软件安装 6K编译软件使用方法 7超级快速创建第一个多文件工程 8K52功能模块测试方法 9STC最新1T单片机简介 10蜂鸣器发声 118X8LED点阵管 12动态数码管 13按健按制 14按制步电机 15LCD1602液晶显示 16DS18B20数字温度计 17DS1302数字时钟 18遥控器控制 19LCD12864液晶屏显示 20SD卡演示 21PC健盘演示 22AD模数转换 23DAC数模转换 24光电开关测量 25TFT真彩屏液晶 26售后及问题解决方法。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 什么样的开发板才是好开发板? 首先,好的开发板应该从实际出发,实际项目应用什么,板子就该怎么做。板子是由多年专业项目开发经验的工程师根据当前实际单片机应用产品情况以及学生学习的角度定制,绝对专业。彩屏时代已经来临,彩屏当然应用是挺多,应用在ARM实际系统,现在慧净已在8位单片机产品对彩屏的应用进行了改良,大家看到彩屏上漂亮的图片就动心,还可以做个动态图片看看,我们买板子是回去学习的,要学到更多的知识,所以一定实用的,才是最好的。 您为什么要买单片机开发板? 很简单,我们要学会它。OK,可是纵观单片机开发板市场,很少有板子能让您达到这个目的。为什么这么说呢?因为很多开发板设计人员自身都不是专业工程师,仅仅是自己学了单片机而已,设计的板子都是以单一功能为目的,如开发板运行跑马灯,数码管就不能显示了,显示了数码管,液晶就不能工作了,必须

ds1302时钟程序详解经典

dsl302时钟程序详解经典 dsl302时钟程序详解 DS1302的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始 2.3数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0 位到高位7o 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位 为BCD码形式,其日历、 时间寄存器及其控制字见表1。

? I日历?別间襦存祁及凡担制孑 fir* 野擅"itwtr 収他总cn - T ?fsy网 移 e S』3 2 1 0 林斶 son8!ll00-59 f.H IUSVX SIX X2H S3II oum(1Mh、 MH K4H851101 \2A12 24? 10 IIH HK MhH M7II01 -2S.2V, W-Jl ?o imiAre 8SH WII03 - !2(11) 0 IUM MOYI1I AAII8HH ni(i II ? 0 0h\V 8LH Mill OQ ? 9910YLAH 此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器 及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为COH, FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 dsl302程序流程图

DS1302时钟芯片的原理与应用

DS1302 时钟芯片的原理与应用 1 写保护寄存器操作 当写保护寄存器的最高位为0 时,允许数据写入寄存器,写保护寄存器可以通过命令字节8E 8F 来规定禁止写入/读出。写保护位不能在多字节传送模式下写入Write_Enable: MOV Command,#8Eh ;命令字节为8E MOV ByteCnt,#1 ;单字节传送模式 MOV R0,#XmtDat 数据地址覆给R0 MOV XmtDat,#00h 数据内容为0 写入允许 ACALL Send_Byte 调用写入数据子程序 RET 返回调用本子程序处 当写保护寄存器的最高位为1 时禁止数据写入寄存器 Write_Disable: MOV Command,#8Eh ;命令字节为8E MOV ByteCnt,#1 ;单字节传送模式 MOV R0,#XmtDat 数据地址覆给R0 MOV XmtDat,#80h 数据内容为80h 禁止写入 ACALL Send_Byte 调用写入数据子程序 RET 返回调用本子程序处 以上程序调用了基本数据发送(Send_Byte)模块及一些内存单元定义, 其源程序清单在附录中给出下面 的程序亦使用了这个模块 2 时钟停止位操作 当把秒寄存器的第7 位时钟停止位设置为0 时起动时钟开始 Osc_Enable: MOV Command,#80h ; 命令字节为80 MOV ByteCnt,#1 ; 单字节传送模式 MOV R0,#XmtDat 数据地址覆给R0 MOV XmtDat,#00h 数据内容为0 振荡器工作允许 ACALL Send_Byte 调用写入数据子程序 RET 返回调用本子程序处 当把秒寄存器的第7 位时钟停止位设置为1 时,时钟振荡器停止DS1320 进入低功耗方式 Osc_Disable: MOV Command,#80h ;命令字节为80 MOV ByteCnt,#1 ;单字节传送模式 MOV R0,#XmtDat 数据地址覆给R0 MOV XmtDat,#80h 数据内容为80h 振荡器停止 ACALL Send_Byte 调用写入数据子程序 RET 返回调用本子程序处 3. 多字节传送方式

基于单片机和DS1302电子万年历的设计

1 DS1302实时时钟 (1) 时钟芯片DS1302的工作原理: DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST 端置“1”,最后才给予SCLK脉冲;读/写时序如下图所示。为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。 (2) DS1302的控制字节 DS1302的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出 表-1 DS1302的控制字格式 RAM RD 1 A4 A3 A 2 A1 A0 / CK /WR (3) 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图1所示

单片机ds1302程序

#include #include #define uchar unsigned char #define uint unsigned int sbit LCD1602_E=P3^6; sbit LCD1602_RW=P3^5; sbit LCD1602_RS=P3^4; sbit DSIO=P0^7; sbit RST=P0^5; sbit SCLK=P0^6; extern uchar TIME[7]; void Ds1302Write(uchar addr, uchar dat); uchar Ds1302Read(uchar addr); void Ds1302Init(); void Ds1302ReadTime(); void Lcd1602_Delay1ms(uint c); //误差0us void LcdWriteCom(uchar com); void LcdWriteData(uchar dat) ; void LcdInit(); void LcdDisplay(); uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13}; void main() { LcdInit(); Ds1302Init(); while(1) { Ds1302ReadTime(); LcdDisplay(); } } void Ds1302Write(uchar addr, uchar dat) { uchar n; RST = 0; _nop_(); SCLK = 0;//先将SCLK置低电平。

最新ds1302时钟程序详解 含电路图 源程序 注释资料

以下资料摘自电子发烧友网感谢作者,版权归网站所有,资料仅供参考 ds1302时钟程序详解 DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。

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

3.2 DS1302实时时间流程 图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基本操作进行编程:

51单片机DS1302日历时钟程序

51 单片机ds1302 时钟芯片 #define uint unsigned int #define uchar unsigned char sbit lcdrs = P1^0; sbit lcdrw = P1^1; sbit lcden = P1^2; sbit key0 = P2^0;//功能键,选择时分秒 sbit key1 = P2^1;//加1键 sbit key2 = P2^2;//减1键 sbit key4 = P2^4; sbit clk_1302 = P1^5; //1302芯片位定义sbit io_1302 = P1^6; sbit rst_1302 = P1^7; uchar bdata dat; sbit dat0 = dat^0; sbit dat7 = dat^7; uchar key0_count;//按键0被按的次数(0~3) uchar flag; char hour,minute,second; uchar table_date[] = "2009-4-12 Mon"; uchar table_time[] = "00:00:00"; /****** 函数申明********/ void write_cmd_1602(uchar cmd); void write_data_1602(uchar dat); void write_add(uchar add,uchar dat); void init1602(); void delay(uint z); uchar reverse(uchar c); void keyscan(); void init(); void RTC_initial (); void wr_1302(uchar wr_data); uchar rd_1302(void); uchar uc_R1302(uchar ucAddr); void v_W1302(uchar ucAddr, uchar ucDa); 主程序 #include

本科毕业设计-单片机课程设计简易电子时钟

单片机课程设计报告 题目:简易电子时钟 专业:自动化 班级:12 级自动化1班 日期:2014年3月

、设计目的 随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用STC89C51单片机作为核心, 功耗小,能在5V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。本电路为实 现电子万年历的功能,采用单片机STC89C51,辅助以必要的外围电路,用C语言编写程序,并进行模块化设计而成的电子万年历系统?它通过LCD能正确显示阳历星期和时分秒,温度等,可以进行整点提醒,具有功能稳定,精确度高和可调的特点。 1、通过《单片机原理及应用》教程了解单片微型计算机的发展; 2、根据课程设计的要求,学会设计程序的过程,学会应用程序设计调试软件、学会根据要求运用PCB设计电路板硬件部分; 3、通过调试程序设计模块,掌握单片微型计算机的结构原理,了解程序设计的编程思想; 4、通过软件调试熟悉使用单片机指令系统,掌握C语言程序设计方法及编程技巧,掌握子程序的设计与使用,熟悉定时器中断服务程序的设计及调用过程。 5、综合课程设计更全方面了解单片机的硬件和软件知识。 、设计要求和方案选择 设计要求: 1、显示出基本时间:时、分、秒;(基础部分) 2、显示年、月、日、周具体时间(拓展部分) 3、断电保护时间功能(拓展部分) 4、环境温度感应功能显示(拓展部分) 5、整点报时功能(拓展部分)方案选择: 根据题目基本要求以及外拓展功能,本次单片机课程设计打算以AT89S52单片机系统为基础实现以上的设计要求,并在此分为软硬件模块结合实现所要求的功能,各重要模块如下: 1、AT89S52单片机最小系统 最小系统包括晶体振荡电路、复位开关和电源部分。图2为STC89C52RC 单片机的最小系统。

DS1302程序

#include #include #define uchar unsigned char #define uint unsigned int uchar count_10ms; //定义10ms计数器 sbit K1 = P3^2; //定义K1键 sbit K2 = P3^3; //定义K2键 sbit K3 = P3^4; //定义K3键 sbit K4 = P3^5; //定义K4键 sbit BEEP=P3^7; //定义蜂鸣器 sbit reset = P1^2; sbit sclk = P1^0; sbit io = P1^1; sbit LCD_RS=P2^0; sbit LCD_RW=P2^1 ; sbit LCD_EN=P2^2; bit K1_FLAG=0; //定义按键标志位,当按下K1键时,该位置1,K1键未按下时,该位为0。 uchar code line1_data[] = {"---LCD Clcok---"}; //定义第1行显示的字符 uchar code line2_data[] = {"****"}; //定义第2行显示的字符 uchar disp_buf[8] ={0x00}; //定义显示缓冲区 uchar time_buf[7] ={0,0,0x12,0,0,0,0}; //DS1302时间缓冲区,存放秒、分、时、日、月、星期、年 uchar temp [2]={0}; //用来存放设置时的小时、分钟的中间值 /********以下是函数声明********/ void Delay_ms(uint xms) ; bit lcd_busy(); void lcd_wcmd(uchar cmd); void lcd_wdat(uchar dat) ; void lcd_clr() ; void lcd_init() ; void write_byte(uchar inbyte); //写一字节数据函数声明 uchar read_byte(); //读一字节数据函数声明 void write_ds1302(uchar cmd,uchar indata); //写DS1302函数声明 uchar read_ds1302(uchar addr); //读DS1302函数声明 void set_ds1302(uchar addr,uchar *p,uchar n); //设置DS1302初始时间函数声明 void get_ds1302(uchar addr,uchar *p,uchar n); //读当前时间函数声明 void init_ds1302(); //DS1302初始化函数声明 /********以下是延时函数********/ void Delay_ms(uint xms) { uint i,j;

DS1302通俗易懂的教程

晨辉教你轻松学51--------外围芯片之ds1302和ds18b20 对于市面上的大多数51单片机开发板来说。ds1302和ds18b20应该是比较常见的两种外围芯片。ds1302是具有SPI总线接口的时钟芯片。ds18b20则是具有单总线接口的数字温度传感器。下面让我们分别来认识并学会应用这两种芯片。 首先依旧是看DS1302的datasheet中的相关介绍。 上面是它的一些基本的应用介绍。 下面是它的引脚的描述。 下面是DS1302的时钟寄存器。我们要读取的时间数据就是从下面这些数据寄存器中读取出来的。当我们要想调整时间时,可以把时间数据写入到相应的寄存器中就可以了。

这是DS1302内部的31个RAM寄存器。在某些应用场合我们可以应用到。如我们想要做一个带定时功能的闹钟。则可以把闹钟的时间写入到31个RAM寄存器中的任意几个。当单片机掉电时,只要我们的DS1302的备用电池还能工作,那么保存在其中的闹钟数据就不会丢失~~ 由于对于这些器件的操作基本上按照数据手册上面提供的时序图和相关命令字来进行操作就可以了。因此在我们应用这些器件的时候一定要对照着手册上面的要求来进行操作。如果觉得还不够放心的话。可以到网上下载一些参考程序。对着手册看别人的程序,看别人的思路是怎么样的。 DS1302和单片机的连接很简单。只需一根复位线,一根时钟线,一根数据线即可。同时它本身还需要接一个32.768KHz的晶振来提供时钟源。对于晶振的两端可以分别接一个6PF

左右的电容以提高晶振的精确度。同时可以在第8脚接上一个3.6V的可充电的电池。当系统正常工作时可以对电池进行涓流充电。当系统掉电时,DS1302由这个电池提供的能量继续工作。 下面让我们来驱动它。 sbit io_DS1302_RST = P2^0 ; sbit io_DS1302_IO = P2^1 ; sbit io_DS1302_SCLK = P2^2 ; //-------------------------------------常数宏---------------------------------// #define DS1302_SECOND_WRITE 0x80 //写时钟芯片的寄存器位置 #define DS1302_MINUTE_WRITE 0x82 #define DS1302_HOUR_WRITE 0x84 #define DS1302_WEEK_WRITE 0x8A #define DS1302_DAY_WRITE 0x86 #define DS1302_MONTH_WRITE 0x88 #define DS1302_YEAR_WRITE 0x8C #define DS1302_SECOND_READ 0x81 //读时钟芯片的寄存器位置 #define DS1302_MINUTE_READ 0x83 #define DS1302_HOUR_READ 0x85 #define DS1302_WEEK_READ 0x8B #define DS1302_DAY_READ 0x87 #define DS1302_MONTH_READ 0x89 #define DS1302_YEAR_READ 0x8D //-----------------------------------操作宏----------------------------------// #define DS1302_SCLK_HIGH io_DS1302_SCLK = 1 ; #define DS1302_SCLK_LOW io_DS1302_SCLK = 0 ; #define DS1302_IO_HIGH io_DS1302_IO = 1 ; #define DS1302_IO_LOW io_DS1302_IO = 0 ; #define DS1302_IO_READ io_DS1302_IO #define DS1302_RST_HIGH io_DS1302_RST = 1 ; #define DS1302_RST_LOW io_DS1302_RST = 0 ; /****************************************************** * 保存时间数据的结构体 * ******************************************************/ struct { uint8 Second ;

DS1302数码管显示程序

/************************************************************************/ // huaqinMCU DS1302 实验程序数码管显示时钟设置说明 // "8键"为时钟设置、时分切换、保存"0键"为加"4键"为减 /************************************************************************/ #include #define uchar unsigned char #define uint unsigned int //===以下IO定义请根据您硬件的连接修改=== sbit T_RST=P3^5;//ds1302-5 sbit T_IO=P3^4;//ds1302-6 sbit T_CLK=P3^6;//ds1302-7 sbit ACC0=ACC^0; sbit ACC7=ACC^7;//累加器A 51单片机原理中有介绍 sbit up=P3^1; sbit down=P3^2; sbit set=P3^0; uchar a,b,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg; int hour,mie,sei; uchar clk_time[3]; //秒,分,时寄存器初始值 code uchar ledmap[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40}; //数码管段码 /******************DS1302:写入操作(上升沿)*********************/ void write_byte(uchar da) { uchar i; ACC=da; for(i=8;i>0;i--) { T_IO=ACC0; T_CLK=0; T_CLK=1; ACC=ACC>>1; } } /******************DS1302:读取操作(下降沿)*****************/ uchar read_byte(void) { uchar i;

基于DS1302设计的数字钟原理图与PCB教程

基于DS1302设计的数字钟 任务一电路原理图的设计 1、最小系统电路 步骤一:新建设计。双击桌面PROTEUS软件图标,打开软件,单击工具栏“File”,出现如下图所示下拉菜单。 单击“New Design”菜单,弹出如下对话框。 选择绘图模板,我们选择DEFAULT模板,单击DEFAULT图标,单击“OK”按钮。进入原理图编辑界面,如下图所示。

存。单击保存图标,弹出对话框,选择文件存储路径。如下图所示: 我们把文件保存在桌面的“电路原理图”这个文件夹内。单击“保存”按钮弹出对话框,在“文件名”编辑框中填写电路原理图名称,“基于DS1302设计的数字钟”。 如下图所示。

路原理图标,如下图所示。 步骤三:选择主控元器件。在编辑框最左边的工具栏中选择图标,进入器件 模式,然后单击图标,弹出“Pick Device”对话框,如下图所示:

AT89C51单片机,如下图所示: 单击OK按钮,单片机芯片选择完成,这时在对象选择器和预览窗口中均出现了所选择的芯片AT89C52,在对象选择器单击芯片名称,如AT89C52,再把鼠标移至编辑窗口区(工作区),右击鼠标,主控芯片AT89C52就拖入了工作区。 单片机芯片选择完毕。如下图所示:

步骤四:时钟振荡电路的设计。51单片机的18和19引脚外接2个皮法级的电容和晶振就可以构成时钟振荡电路。按照上一步骤选择AT89C52芯片的方法一 一从元器件库中选择2个30pf的电容、12M的晶振,还有一个地。如下图所示: 个电阻R1、R2和电容组成,具体电路结构如下图所示:

此外,还有电源电路,单片机的20引脚、40引脚分别接电源的地和电。另外单片机31引脚直接接地,表示单片机的CPU直接从片内的ROM中读取指令。 2、DS1302时钟电路 DS1302时钟电路主要由时钟芯片DS1302和单片的P1口相连,DS1302有8个引脚,1引脚直接接电,2、3引脚跨接一个32768HZ的晶振,4引脚接地,5、6、7引脚分别连接单片机P1口的P1^2、P1^0、P1^1。8引脚外接备用电源,具体连接如下图所示。 3、LCD1602显示电路模块 显示电路由LCD1602和单片机的P0口和P2口组成。LCD1602有14个引脚,1、2引脚分别接地和电;3引脚连接一个变阻器的划片端,可改变进入LCD1602液晶显示器3引脚的电压,调节显示对比度;4、5、6引脚分别连接单片机P2口的P2^0、P2^1、P2^2 ;D0-D7引脚直接和单片机的P0口连接。当单片机的P0口作为数据输出时使用,要外接上拉电阻。具体连接如下图所示:

基于DS1302芯片的电子时钟的设计_毕业设计论文

本科毕业设计论文题目基于DS1302芯片的电子时钟的设计 系别名称电子信息工程0 专业名称电子信息工程0 毕业时间2013年6月0

毕业 任务书 一、题目 基于DS1302芯片的电子时钟的设计 二、基本内容及重点 此系统主要由1个DS1302数字时钟芯片、1个AT89S52单片机、AT24C02掉电数据存储单元、LCD12864液晶进行显示,完成显示日期和计时的功能。研究内容主要包括: (1)时钟电路的设计:采用DS1302数字时钟芯片对年、月、日、周、日、时、分、秒进行计时,工作电压宽达2.5~5.5V 。与单片机的接口使同步串行通信,仅用3条线与之相连接。该电路不但能准确地计时、附加其它功能,而且,其三线接口可以节省接口资源,在断电后不丢失时间和数据信息。 (2)显示部分的设计:采用led12864进行显示,它具有功耗低,体积小,重量轻,大规模显示的优点。 (3)按键的设计:通过按键进行调时。 实验设计 选用时钟芯片对年月日时分秒进行计时,并与单片机通过三线接口进行同步通信构成数字时钟电路。 系统总体框图 总体框架设计图 设计 论文 At89s52单片机 闹钟功能模块 Lcd 显示模块 Ds1302时钟模块 电源模块

三、预期达到的成果 1、电路设计无差错,lcd12864上完整显示电子钟的年月日时分秒,准确的显示 在预订的位置。 2、按键准确控制,并且在系统掉电后不丢失时间信息。 3、电路能按照给定信息提供闹铃服务。 四、存在的问题及拟采取的解决措施 1、怎样从DS1302得到时间数据? 思路:要从DS1302里得到系统时间,所以要按照ds1302的时序图进行编程,以便得到准确的数据。 2、怎样将读取的数据显示在lcd12864上? 思路:利用程序对lcd12864进行初始化驱动,然后将得到的数据显示在适 当的位置,以便清晰,准确的目测数据。 3、如何运用键盘对时间进行调整? 思路:根据设计要求,需要对时间进行加、减,以及时分秒的定义,需要设 定三个按键,分别为加、减、确认按钮,然后通过程序对相应的端口进行控制, 达到对时间调整的目的。 五、进度安排 第一周:搜索资料,对设计思路进行明确分析,以及确定方案。 第二周:按照设计方案,初步拟写开题报告。 第三、四周:上交开题报告,通过审核,购买材料,准备着手实体。 第五、六周:设计硬件电路及其软件程序的编写。 第七周:对电路进行调试,以便达到预期目的。 第八、九周:撰写设计论文,准备答辩。 六、参考文献和书目 [1]王明顺,赵德平。可涓流充电的串行实时时钟芯片DS1302的设计及应用。国外电 子元器件,1997。 [2]黄明强。DS1302在单片机系统中的应用与设计。保定师范专科学校学报。2004,17 (2)。 [3]赵海兰,朱剑,赵祥伟。DS1302实时显示时间原理及应用。电子技术出版社。2002-1 [4]邓红,张越。单片机实验与应用设计教程。冶金工业出版社,2004-5。

电子日历设计与总结报告

电子日历设计与总结报告 队名:********************* 队员:*********************** 学院:*********************** 学号:*********************** 手机:*********************** 邮箱:***********************

目录 摘要 (1) 1方案设计与论证 (1) 2硬件电路设计 (3) 2.1硬件框图 (3) 2.2主要硬件电路 (4) 3软件设计 (6) 3.1基本原理 (6) 3.2流程图 (7) 3.3源程序 (8) 4附录 (54)

摘要 公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。中国从辛亥革命后即自民国元年采用阳历,故又名曰“国历”。为与中国旧有之历相对称,故又名曰“新历”。1949年正式规定公元纪年。 农历是中国长期采用的一种传统历法,它以朔望的周期来定月,用置闰的办法使年平均长度接近太阳回归年,因这种历法安排了二十四节气以指导农业生产活动,故称农历,又叫中历、夏历,俗称阴历。农历是中国目前与格里历(即公历)并行使用的一种历法,人们习称“阴历”,但其实是阴阳历的一种,即夏历,并非真正的“阴历”。 农历,又称夏历、阴历、旧历、汉历,是东亚传统历法之一。农历属于一种阴阳历,平均历月等于一个朔望月,但设置闰月以使平均历年为一个回归年,设置二十四节气以反映季节(太阳直射点的周年运动)的变化特征,所以又有阳历的成分。至今几乎全世界所有华人及朝鲜、韩国和越南及早期的日本等国家,仍使用农历来推算传统节日如春节、中秋节、端午节等节日。因为这种历法相传创始于夏代,完善于汉代,加之主要是汉族人使用,所以中国其他民族包括清朝刚建立时都把此历称为汉历。到辛亥义举后,因使用西历,此历称为旧历或夏历。现在应恢复称呼汉历。 汉历既符合了月(朔望月),又符合了年(回归年),可以说是人类历史上最科学的历法之一。但是由于单个公历历年(365或366日)比汉历历年(平年354或355日,闰年383或384日)更接近于回归(365.2422日),所以从具体日期反映季节的角度看,则公历比汉历更加准确。 历法的复杂程度本质上是由其参照物的选择决定的。农历选取阴阳二体为时间参照,由此决定了其内容相对地复杂又丰富,符合我国传统的哲学观。 一:方案设计与论证 方案一:采用STC89C52芯片作为硬件核心,1602液晶作为显示部分,同时采用DS1302时钟芯片实现时钟 方案二:采用STC89C52芯片作为硬件核心,1602液晶作为显示部分,同时采用DS12C887时钟芯片实现时钟 方案论证: DS1302概述 DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路.提供秒分时日日期.月年的信息,每月的天数和闰年的天数可自动调整时钟操作. 1

相关文档
相关文档 最新文档