|
Altium Designer画的DS1302时钟模块原理图和PCB图如下:(51hei附件中可下载工程文件)
芯片简介: 介绍美国DALLAS 公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302 的结构、工作原理及其在实时显示时间中的应用。它可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。
单片机源程序如下:
- /********************************************************
- 实现功能:DS1302测试程序
- 使用芯片:AT89S52
- 晶振:11.0592MHZ
- 编译环境:Keil
- 作者:zhangxinchunleo
- 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
- ********************************************************/
- /*********************************包含头文件********************************/
- #include "reg52.h"
- #include <intrins.h>
- /*********************************端口定义**********************************/
- sbit DS1302_CLK = P1^0;
- sbit DS1302_IO = P1^1;
- sbit DS1302_RST = P1^2;
- /*******************************共阳LED段码表*******************************/
- unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char wei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端
- /******************************定义全局变量*********************************/
- unsigned char second,minute,hour,week,day,month,year; //秒、分、时、星期、日、月、年
- unsigned char time[]={0x06,0x03,0x14,0x03,0x12,0x30,0x00}; //初始时间数组
- /****************************************************************************
- 函数功能:数码管扫描延时子程序
- 入口参数:
- 出口参数:
- ****************************************************************************/
- void delay1(void)
- {
- int k;
- for(k=0;k<400;k++);
- }
- /****************************************************************************
- 函数功能:数码管显示子程序
- 入口参数:k
- 出口参数:
- ****************************************************************************/
- void display(void)
- {
- P2=0XFF;
- P0=tab[minute/16];
- P2=wei[0];
- delay1();
- P2=0XFF;
- P0=tab[minute%16];
- P2=wei[1];
- delay1();
- P2=0XFF;
- P0=tab[second/16];
- P2=wei[2];
- delay1();
- P2=0XFF;
- P0=tab[second%16];
- P2=wei[3];
- delay1();
- P2=0XFF;
- }
- /*****************************************************************************
- 函数功能:向DS1302送一字节数据子程序
- 入口参数:
- 出口参数:
- *****************************************************************************/
- void InputByte(unsigned char byte1)
- {
- char i;
- for(i=8;i>0;i--)
- {
- DS1302_IO=(bit)(byte1&0x01);
- DS1302_CLK=1;
- _nop_();
- DS1302_CLK=0;
- byte1>>=1;
- }
- return;
- }
- /*****************************************************************************
- 函数功能:读DS1302一个字节子程序
- 入口参数:
- 出口参数:
- *****************************************************************************/
- unsigned char outputbyte(void)
- {
- unsigned char i;
- unsigned ucdat=0;
- for(i=8;i>0;i--)
- {
- DS1302_IO=1;
- ucdat>>=1;
- if(DS1302_IO)ucdat|=0x80;
- DS1302_CLK=1;
- _nop_();
- DS1302_CLK=0;
- }
- return(ucdat);
- }
- /*****************************************************************************
- 函数功能:向DS1302某地址写一字节数据子程序
- 入口参数:addr,TDat
- 出口参数:
- *****************************************************************************/
- void write_ds1302(unsigned char addr,unsigned char TDat)
- {
- DS1302_RST=0;
- _nop_();
- DS1302_CLK=0;
- _nop_();
- DS1302_RST=1;
- InputByte(addr);
- _nop_();
- InputByte(TDat);
- DS1302_CLK=1;
- _nop_();
- DS1302_RST=0;
- }
- /*****************************************************************************
- 函数功能:读DS1302地址子程序
- 入口参数:add
- 出口参数:timedata
- *****************************************************************************/
- unsigned char read_ds1302(unsigned char addr)
- {
- unsigned char timedata;
- DS1302_RST=0;
- _nop_();
- DS1302_CLK=0;
- _nop_();
- DS1302_RST=1;
- InputByte(addr);
- timedata=OutputByte();
- DS1302_CLK=1;
- _nop_();
- DS1302_RST=0;
- return(timedata);
- }
- /*****************************************************************************
- 函数功能:初始化DS1302子程序
- 入口参数:time[](全局变量)
- 出口参数:
- *****************************************************************************/
- void initial_ds1302()
- {
- write_ds1302(0x8e,0x00); //写保护寄存器,在对时钟或RAM写前WP一定要为0
- write_ds1302(0x8c,time[0]); //年
- write_ds1302(0x88,time[1]); //月
- write_ds1302(0x86,time[2]); //日
- write_ds1302(0x8A,time[3]); //星期
- write_ds1302(0x84,time[4]); //时
- write_ds1302(0x82,time[5]); //分
- write_ds1302(0x80,time[6]); //秒
- write_ds1302(0x8e,0x80); //写保护寄存器
- }
- /*****************************************************************************
- 函数功能:读DS1302时间子程序
- 入口参数:
- 出口参数:全局变量(second,minute,hour,week,day,month,year)
- *****************************************************************************/
- void read_time()
- {
- second=read_ds1302(0x81); //秒寄存器
- minute=read_ds1302(0x83); //分
- hour=read_ds1302(0x85); //时
- week=read_ds1302(0x8B); //星期
- day=read_ds1302(0x87); //日
- month=read_ds1302(0x89); //月
- year=read_ds1302(0x8d); //年
- }
- /*****************************************************************************
- 函数功能:主程序
- 入口参数:
- 出口参数:
- *****************************************************************************/
- void main(void)
- {
- initial_ds1302(); //初始化DS1302
- while(1)
- {
- read_time(); //读取时间
- display(); //显示时间
- }
- }
复制代码
简要说明: 一、尺寸:全长26mm宽23mm高10mm 二、主芯片:DS1302 三、工作电压:直流5V 四、特点:电路简单实用,接线简单,地面有3V电池座,使用32.768khz晶振。
适用场合:单片机学习、电子竞赛、产品开发、毕业设计。。。
所有资料51hei提供下载:
|
-
-
DS1302时钟模块DXP资料.rar
80.82 KB, 下载次数: 112, 下载积分: 黑币 -5
-
-
DS1302测试程序.rar
209.4 KB, 下载次数: 71, 下载积分: 黑币 -5
-
-
DS1302时钟模块产品使用手册.rar
3.23 MB, 下载次数: 37, 下载积分: 黑币 -5
-
-
DS1302时钟模块相关资料.rar
1.69 MB, 下载次数: 49, 下载积分: 黑币 -5
-
-
DS1302时钟模块原理图.doc
26 KB, 下载次数: 52, 下载积分: 黑币 -5
|