ds1302设计axure日历元件电子钟需要哪些元件物料

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
基于时钟日历芯片DS1302的万年历设计
下载积分:800
内容提示:基于时钟日历芯片DS1302的万年历设计
文档格式:DOC|
浏览次数:44|
上传日期: 08:46:13|
文档星级:
全文阅读已结束,如果下载本文需要使用
 800 积分
下载此文档
该用户还上传了这些文档
基于时钟日历芯片DS1302的万年历设计
官方公共微信当前位置:
文件名称:ex98
所属分类:
资源属性:
Linux,gcc,C/C++,源码
上传时间:
文件大小:
浏览/下载:
214次 / 0次
提 供 者:
相关连接:
下载说明:
别用迅雷下载,失败请重下,重下不扣分!
基于DS1302的日历时钟,单片机的开发与应用,经过编译-Calendar clock based on the DS1302, microcontroller development and application, compiled
(系统自动生成,下载前可以参看下载内容)下载文件列表
暂无评论内容.
*快速评论:
和说明不符
不是源码或资料
纯粹是垃圾
*内  容:
*验 证 码:
搜珍网是交换下载平台,下载的内容请自行研究使用或咨询上传人.
资源属性分别代表:系统平台,开发平台,开发语言,文件格式四部分.
本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用进行解压.
如果您发现此软件无法下载,请稍后再次尝试;或者.
本站提供下载的内容为网上收集或会员上传提供,若无意中侵犯了您的版权,.
如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
如下载后发现下载的内容跟说明不相乎,可以联系本站的客服,经确认可以退回消费了的积分.
联系我们网站
·电话:(0)
All Rights Reserved.51单片机学习笔记:使用DS1302芯片制作电子钟 - 嘎子的博客 - ITeye技术网站
博客分类:
百度ds1302 写道
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据传送的方法。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc&2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。 下图为DS1302的引脚功能图 .....................................................................................
我在淘宝上花了几块钱买了个山寨的1302模块,凑合着可以用,
但是模块上的sclk,io,RST这3个脚没有上拉电阻,自己加上去了,汗!
不加上拉电阻,显示的时钟很容易发生错误
好了不多说,贴代码
本程序只显示时间,没有年份和月份...
#include "my51.h"
#include "smg.h"
#include "ds1302.h"
void main()
//ds1302显示时钟
ds1302_initSet();//初始化
//ds1302_stop();
停掉1302,进入省电模式
ds1302_readRTC();_nop_(); //读取时钟数据
displaySMG(ds1302_processTimeData());//处理数据并送数码管显示
#ifndef _DS1302_H
#define _DS1302_H
#include "my51.h"
sbit rst=P3^4;
//片选总线
sbit sda=P3^5; //数据总线
sbit scl=P3^6;
extern u8 data smgWela[7];
//数码管显示参数
extern u8 data timeData[7];
//年,周,月,日,时,分,秒的初值
//void ds1302_setUnCharger()
//充电控制,禁止充电
//void ds1302_stop() ;
//暂停ds1302,进入超低功耗模式
u8* ds1302_processTimeData();
//处理时钟数据,送给数码管显示
void ds1302_readRTC();
//读取所有时钟数据的BCD码
void ds1302_initSet() ;
//设置初始化数据
u8 ds1302_readData(u8 addr); //从ds1302读一个字节,读的时候会先写地址
void ds1302_writeByte(u8 dat);
//写一个字节
void ds1302_writeData(u8 addr,u8 dat); //向指定地址寄存器写数据
#include "ds1302.h"
data u8 timeData[7]={10,6,4,17,11,20,55};
code u8 writeAddr[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//写年周月日时分秒寄存器地址指令
code u8 readAddr[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//读的指令地址
void ds1302_writeData(u8 addr,u8 dat) //向指定地址寄存器写数据
rst=0; _nop_();
scl=0; _nop_();
rst=1; _nop_();
ds1302_writeByte(addr); //先写入地址
ds1302_writeByte(dat);
rst=0;_nop_(); //关闭
void ds1302_writeByte(u8 dat)
//写一个字节
for(i=0;i&8;i++)
//时钟线拉低
sda=dat&0x01;
//数据从最低位开始赋值
scl=1;_nop_();
//上升沿写入一位
u8 ds1302_readData(u8 addr) //从ds1302读一个字节,读的时候会先写地址
u8 i,value=0;
rst=0;_nop_();
scl=0;_nop_();
sda=1;_nop_();
rst=1;_nop_();
ds1302_writeByte(addr); //先写入要读的地址
sda=1;_nop_();
for(i=0;i&8;i++)
value&&=1;
scl=0;_nop_();
//下降沿开始后提取有效数据
value|=0x80;//高电平手动置位保存数据,
//低电平数据value最高位默认已经是0
//为下一次读取数据做准备
void ds1302_initSet()
//设置初始化数据
for(i=0;i&7;i++)//将初始化数据处理成BCD码
j = timeData[i] / 10;
timeData[i]=timeData[i]%10;
timeData[i]=timeData[i]+j*16;
ds1302_writeData(0x8e,0x00);
//清除写保护
for(i=0;i&7;i++)
//将时钟日历数据经过转换后的BCD码写到7个时钟日历寄存器中
ds1302_writeData(writeAddr[i],timeData[i]);
ds1302_writeData(0x90,0x5c); //禁止充电,降低功耗,针对不可充电电池
//ds1302_writeData(0x90, 0xa6);//开启充电,用一个二极管,用4k电阻
ds1302_writeData(0x8e,0x80); //使能写保护
void ds1302_readRTC()
//读取所有时钟数据的BCD码
for(i=0;i&7;i++)
//读取的时候会把时钟日历的7个寄存器中的数据全部读取,并保存到timeData[]
timeData[i]=ds1302_readData(readAddr[i]);
u8* ds1302_processTimeData()
//显示时钟,暂时只显示时间
smgWela[5]=timeData[6] & 0x0f;//提取低4位
smgWela[4]=timeData[6] && 4;//提取高4位
smgWela[3]=timeData[5]& 0x0f;
smgWela[2]=timeData[5]&& 4;
smgWela[1]=timeData[4]& 0x0f;
smgWela[0]=timeData[4]&& 4;
smgWela[6]=0xf5; //0xf5是小数点的位置
return smgW
void ds1302_stop()
//暂停ds1302
ds1302_writeData(0x8e,0x00); //清除写保护
ds1302_writeData(writeAddr[6],0x80); //暂停ds1302,进入超低功耗模式
ds1302_writeData(0x8e,0x80); //使能写保护
void ds1302_setUnCharger()
//充电控制,禁止充电
ds1302_writeData(0x8e,0x00); //清除写保护
ds1302_writeData(0x90,0x5c); //禁止充电,降低功耗
ds1302_writeData(0x8e,0x80); //使能写保护
#ifndef _51SMG_H_
#define _51SMG_H_
#include "my51.h"
sbit dula =P2^6;
//段选锁存器控制
sbit wela =P2^7;
//位选锁存器控制
extern u8 data smgWela[7]; //第一位到第六位,最后一个是小数点位置控制
#define dark 0x11//在段中,0x11是第17号元素,0x00是低电平,数码管不亮,即table[17]
#define dotDark 0xff//小数点全暗
void displaySMG(u8* pWela); //数码管显示函数,参数是数组指针
#include "smg.h"
#include "my51.h"
static u8 code table[]= {
//0~F外加小数点和空输出的数码管编码
0x3f , 0x06 , 0x5b , 0x4f , // 0 1 2 3
0x66 , 0x6d , 0x7d , 0x07 , // 4 5 6 7
0x7f , 0x6f , 0x77 , 0x7c , // 8 9 A B
0x39 , 0x5e , 0x79 , 0x71 , // C D E F
0x80 , 0x00 ,0x40
// . 空 负号
空为第17号元素
由于此表只能一次显示一个小数点,故已注释掉,仅供查询
例如想要第一个和第六个数码管小数点同时点亮,
则执行 pWela-&dot = 0xfe & 0xdf
u8 code dotTable[]={
//小数点位置,某一位置0时,小数点亮
0xfe , 0xfd , 0xfb ,
0xf7 , 0xef , 0xdf
u8 data smgWela[7]={0,0,0,0,0,0,0}; //第一位到第六位,最后一个是小数点位置控制
//P0口的数码管位选控制锁存器只用了低6位,我们保留高2位的数据,留作它用
void displaySMG(u8* pWela)
//控制6位数码管显示函数,不显示的位用参数dark
u8 preState=P0|0x3f;
//保存高2位状态,其中最高位是ADC0804的片选信号
wela=0;dula=0;_nop_();//先锁定数据,防止吴亮及位选锁存器高2位数据被改变
//由于数码管是共阴极的,阳极送低电平,灯不亮
dula=1;_nop_();
//段选数据清空并锁定
//共阴极数码管是阴极置高不亮,低6位置1,高2位保留
wela=1;_nop_();
//注:wela和dula上电默认为1
//位选锁定,初始保留高2位的数据,低6位置高不亮
for(i=0;i&6;i++)
//显示6位数码管
P0=table[pWela[i]]|(((1&&i) & pWela[6])?0x00:0x80);
dula=1;_nop_();
//送段数据,叠加小数点的显示,0x00点亮小数点
P0=preState&~(1&&i); //不影响高2位数据,低6位是数码管位选,低电平有效
wela=1; _nop_();
//送位选号
delayms(1);
//稍作延时,让灯管亮起来
//消除叠影及误亮,阴极置1不亮,低6位置1,高2位保留并锁定
wela=1; _nop_();
xouou_53320
浏览: 318139 次
&div class=&quote_title ...
前辈,是不是在工作以后连System.out.println( ...
chuanwang66 写道不过改了iconv.exe路径也不 ...
正在学习,多谢分享
不过改了iconv.exe路径也不能用。。。。基于单片机的多功能电子万年历设计-嵌入式新闻
&&&&&|&&|&&&|&&|&&|&&|&&|&&|&&|&
作者: 发布时间: 来源: 
引言随着生活节奏的日益加快,人们的时间观也越来越重,同时对电子钟表、日历的需求也随之提高。因此,研究实用电子时钟及其扩展应用,有着非常现实的意义,具有很大的实用价值。本系统程序由主程序、中断服务函数和多个子函数
引言随着生活节奏的日益加快,人们的时间观也越来越重,同时对电子钟表、日历的需求也随之提高。因此,研究实用电子时钟及其扩展应用,有着非常现实的意义,具有很大的实用价值。本系统程序由主程序、中断服务函数和多个子函数构成。主函数主要完成各子函数和中断函数的初始化。定时中断函数主要完成时钟芯片的定时扫描及键盘扫描。时钟芯片的读写函数主要是将时间、日历信息读出来,并把要修改具体值写入时钟芯片内部。系统的硬件设计与电路原理电路设计框图系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能、低功耗、能在3V的超低压工作。时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31&8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长、精度高和低功耗等特点,同时具有掉电自动保存功能。主控制模块单片机主控制模块的设计AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。时钟电路模块时钟电路模块的设计DS1302的引脚排列如图3所示,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电;当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。&&图1 整体电路框图&&图2 主控制系统&&图3 时钟控制系统时钟电路模块工作原理DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置&0&,接着把RST端置&1&,最后才给予SCLK脉冲;读/写时序如图4所示。表1为DS1302的控制字,此控制字的位7必须置1,若为0则不能对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表2为DS1302的日历、时间寄存器内容:&CH&是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。&WP&是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当&WP&为1时,写保护位防止对任一寄存器的写操作。DS1302的控制字节DS1302的控制字如表1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如图4所示。表1 DS1302的控制字格式&&&&图4 DS1302读/写时序图DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表2。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。时钟模块实现功能该模块为系统提供精准的秒、分、时、日、月、年等实时时间信息,星期则由编程计算得到。温度采集模块温度采集模块设计如图5所示。采用数字式温度传感器DS18B20,它具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P1.7与DS18B20的I/O口连接加一个上拉电阻,Vcc1接电源,Vcc2接地。
【】【】【
※ 相关信息
无相关信息
※ 其他信息
访问数:&|&
数据加载中..

我要回帖

更多关于 电子钟 的文章

 

随机推荐