DS1302 实时时钟

合集下载

DS1302中文手册

DS1302中文手册

DS1302中文手册DS1302 是一款高性能、低功耗的实时时钟芯片,被广泛应用于各种需要准确计时的电子设备中。

一、DS1302 的基本特性1、实时时钟功能能够精确记录年、月、日、时、分、秒等时间信息。

2、低功耗设计在电池供电的情况下,仍能保持长时间的计时准确性。

3、数据存储具备 31 字节的非易失性静态 RAM,可用于存储一些关键数据。

4、简单的接口通过串行接口与微控制器进行通信,易于集成到系统中。

二、DS1302 的引脚功能1、 Vcc1 和 Vcc2Vcc1 是主电源引脚,Vcc2 是备用电源引脚。

当主电源正常供电时,芯片使用 Vcc1 供电;当主电源断电时,自动切换到 Vcc2(通常为电池)以保持时钟运行。

2、 GND接地引脚。

3、 CLK时钟输入引脚,用于同步数据传输。

4、 I/O数据输入/输出引脚。

5、 RST复位引脚,高电平有效。

三、DS1302 的通信协议DS1302 采用串行通信方式,通信数据以字节为单位进行传输。

1、起始位在每个字节传输开始时,RST 引脚被置为高电平,启动通信过程。

2、控制字节首先发送一个控制字节,用于指定后续操作是读操作还是写操作,以及要操作的寄存器地址。

3、数据字节根据控制字节的指示,接着传输数据字节。

4、停止位在传输完一个字节的数据后,将 RST 引脚置为低电平,结束本次通信。

四、DS1302 的寄存器1、时钟/日历寄存器包括年、月、日、时、分、秒等寄存器,用于存储时间信息。

2、控制寄存器用于设置时钟的工作模式,如是否开启振荡器、是否进行写保护等。

3、充电寄存器用于控制备用电源的充电特性。

4、 31 字节的 RAM 寄存器用于用户自定义数据存储。

五、DS1302 的初始化与设置在使用 DS1302 之前,需要进行初始化设置,包括设置初始时间、开启振荡器、关闭写保护等操作。

1、写入初始时间通过串行通信将准确的初始时间写入到相应的时钟/日历寄存器中。

2、开启振荡器将控制寄存器的相应位设置为 1,使振荡器开始工作。

DS1302实时时钟模块,1602显示

DS1302实时时钟模块,1602显示

/******************* 说明:**************************将实时时钟数据通过LCD1602 显示基于51 单片机**************************************************/#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int uchar dis_time_buf[16]={0};//LCD1602 引脚定义// 采用8 位并行方式,DB0~DB7 连接至LCDDATA0~LCDDATA7sbit RS=P2A0;sbit RW=P2A1;sbit CS=P2A2;#define LCDDATA P0//DS1302 引脚定义sbit RST=P1A3;sbit IO=P1A2;sbit SCK=P1A1;//DS1302 地址定义#define ds1302_sec_add 0x80 // 秒数据地址#define ds1302_min_add 0x82 // 分数据地址#define ds1302_hr_add 0x84 // 时数据地址#define ds1302_date_add 0x86 // 日数据地址#define ds1302_month_add 0x88 // 月数据地址#define ds1302_day_add 0x8a // 星期数据地址#define ds1302_year_add 0x8c // 年数据地址#define ds1302_control_add 0x8e // 控制数据地址#define ds1302_charger_add 0x90#define ds1302_clkburst_add 0xbe// 初始时间定义uchar time_buf[8] = {0x20,0x10,0x06,0x01,0x23,0x59,0x55,0x02};// 初始时间2010年6月1号23 点59 分55 秒星期二// 功能:延时 1 毫秒// 入口参数:x// 出口参数:无//说明:当晶振为12M时,j<112 ;当晶振为11.0592M时,j<122void Delay_xms(uint x){uint i,j;for(i=0;i<x;i++)for(j=0;j<112;j++);// 功能:12us 延时//STC89C52为1T单片机,即1个时钟/机器周期,速度为AT89C52的12倍void Delay_xus(uint t){for(;t>0;t--){_nop_();}}//控制LCD写时序void LCD_en_write(void){CS=1;Delay_xus(20);CS=0;Delay_xus(20);}// 写指令函数void Write_Instruction(uchar command){RS=0;RW=0;CS=1;LCDDATA=command;LCD_en_write();// 写入指令数据}// 写数据函数void Write_Data(uchar Wdata){RS=1;RW=0;CS=1;LCDDATA=Wdata;LCD_en_write();// 写入数据}// 字符显示初始地址设置void LCD_SET_XY(uchar X,uchar Y){uchar address;if(Y==0) address=0x80+X;//Y=0, 表示在第一行显示,地址基数为0x80elseaddress=0xc0+X;//Y 非 0 时,表时在第二行显示,地址基数为 0xC0 Write_Instruction(address);// 写指令,设置显示初始地址}//在第X 行Y 列开始显示 Wdata 所对应的单个字符 void LCD_write_char(uchar X,uchar Y,uchar Wdata){LCD_SET_XY(X,Y)写 地址Write_Data(Wdata);// 写入当前字符并显示}// 清屏函数 void LCD_clear(void){Write_Instruction(0x01); Delay_xms(5);}// 显示屏初始化函数 void LCD_init(void){Write_Instruction(0x38); // 8bit interface,2line,5*7dotsDelay_xms(5);Write_Instruction(0x38); Delay_xms(5);Write_Instruction(0x38);Write_Instruction(0x08); //关显示,不显光标,光标不闪烁 Write_Instruction(0x01); //清屏 Delay_xms(5);//Write_Instruction(0x05); //Write_Instruction(0x06);//Write_Instruction(0x07);Delay_xms(5); // 写一字符,整屏右移 // 写一字符,整屏显示不移动// 写一字符,整屏左移//Write_Instruction(0x0B); Write_Instruction(0x0C);//Write_Instruction(0x0D); //Write_Instruction(0x0E); //Write_Instruction(0x0F); } //DS1302 初始化函数 void ds1302_init(void){Write_Instruction(0x04); // 写一字符,整屏显示不移动 // 关闭显示(不显示字符,只有背光亮) // 开显示,光标、闪烁都关闭// 开显示,不显示光标,但光标闪烁 // 开显示,显示光标,但光标不闪烁}//向DS1302写入一字节数据void ds1302_write_byte(uchar addr, uchar d){uchar i; RST=1;// 启动 DS1302 总线// 写入目标地址: addraddr = addr & 0xFE; // 最低位置零,寄存器 0 位为 0 时写,为 1 时读 for (i = 0; i < 8; i ++) {if (addr & 0x01) {IO=1;}else {IO=0;}SCK=1; //产生时钟 SCK=0;addr = addr >> 1;}// 写入数据: dfor (i = 0; i < 8; i ++) {if (d & 0x01) {IO=1;}else {IO=0;}SCK=1; // 产生时钟 SCK=0; d = d >> 1;}RST=O;〃停止 DS1302 总线}//从DS1302读出一字节数据uchar ds1302_read_byte(uchar addr) {uchar i,temp; RST=1;// 启动 DS1302 总线// 写入目标地址: addr addr = addr | 0x01;// 最低位置高,寄存器 0 位为 0 时写,为 1 时读for (i = 0; i < 8; i ++) {RST=0; SCK=0;//RST 脚置低 //SCK 脚置低if (addr & 0x01) { IO=1;}else { IO=0;}SCK=1;SCK=0;addr = addr >> 1;}// 输出数据:tempfor (i = 0; i < 8; i ++) { temp = temp >> 1; if (IO) {temp |= 0x80;}else {temp &= 0x7F; }SCK=1;SCK=0;}RST=0;//停止DS1302 总线return temp;}//向DS302写入时钟数据void ds1302_write_time(void) {ds1302_write_byte(ds1302_control_add,0x00); // 关闭写保护ds1302_write_byte(ds1302_sec_add,0x80); // 暂停时钟//ds1302_write_byte(ds1302_charger_add,0xa9); // 涓流充电ds1302_write_byte(ds1302_year_add,time_buf[1]); // 年ds1302_write_byte(ds1302_month_add,time_buf[2]); //月ds1302_write_byte(ds1302_date_add,time_buf[3]); // 日ds1302_write_byte(ds1302_hr_add,time_buf[4]); // 时ds1302_write_byte(ds1302_min_add,time_buf[5]); // 分ds1302_write_byte(ds1302_sec_add,time_buf[6]); // 秒ds1302_write_byte(ds1302_day_add,time_buf[7]); // 周ds1302_write_byte(ds1302_control_add,0x80); //打开写保护}//从DS302读出时钟数据void ds1302_read_time(void){time_buf[1]=ds1302_read_byte(ds1302_year_add); // 年time_buf[2]=ds1302_read_byte(ds1302_month_add); // 月time_buf[3]=ds1302_read_byte(ds1302_date_add); // 日time_buf[4]=ds1302_read_byte(ds1302_hr_add); // 时time_buf[5]=ds1302_read_byte(ds1302_min_add); // 分time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7f;// 秒,屏蔽秒的第7 位,避免超出59time_buf[7]=ds1302_read_byte(ds1302_day_add); // 周}void Display(void){LCD_write_char(3,0,dis_time_buf[0]+'0');LCD_write_char(4,0,dis_time_buf[1]+'0');LCD_write_char(5,0,dis_time_buf[2]+'0');LCD_write_char(6,0,dis_time_buf[3]+'0');LCD_write_char(7,0,'/');LCD_write_char(8,0,dis_time_buf[4]+'0');LCD_write_char(9,0,dis_time_buf[5]+'0');LCD_write_char(10,0,'/');LCD_write_char(11,0,dis_time_buf[6]+'0');LCD_write_char(12,0,dis_time_buf[7]+'0');LCD_write_char(15,0,dis_time_buf[14]+'0'); // 第 2 行显示LCD_write_char(3,1,dis_time_buf[8]+'0');LCD_write_char(4,1,dis_time_buf[9]+'0');LCD_write_char(5,1,':');LCD_write_char(6,1,dis_time_buf[10]+'0');LCD_write_char(7,1,dis_time_buf[11]+'0');LCD_write_char(8,1,':');LCD_write_char(9,1,dis_time_buf[12]+'0');LCD_write_char(10,1,dis_time_buf[13]+'0');}// 定时器中断函数void Timer2() interrupt 5// 定时器 2 是 5 号中断{static uchar t;TF2=0;t++;if(t==4) // 间隔200ms(50ms*4) 读取一次时间{t=0;ds1302_read_time(); // 读取时间dis_time_buf[0]=(time_buf[0]>>4); // 年dis_time_buf[1]=(time_buf[0]&0x0f);dis_time_buf[2]=(time_buf[1]>>4);dis_time_buf[3]=(time_buf[1]&0x0f);dis_time_buf[4]=(time_buf[2]>>4); // 月dis_time_buf[5]=(time_buf[2]&0x0f);dis_time_buf[6]=(time_buf[3]>>4); // 日dis_time_buf[7]=(time_buf[3]&0x0f);dis_time_buf[14]=(time_buf[7]&0x07); // 星期// 第 2 行显示dis_time_buf[8]=(time_buf[4]>>4); // 时dis_time_buf[9]=(time_buf[4]&0x0f);dis_time_buf[10]=(time_buf[5]>>4); // 分dis_time_buf[11]=(time_buf[5]&0x0f);dis_time_buf[12]=(time_buf[6]>>4); // 秒dis_time_buf[13]=(time_buf[6]&0x0f);}}// 定时器 2 初始化void Init_timer2(void){RCAP2H=0x3c;〃赋T2初始值0x3cb0,溢出20次为1秒,每次溢出时间为50ms RCAP2L=0xb0;TR2=1; //启动定时器 2ET2=1; // 打开定时器 2 中断EA=1; // 打开总中断}// 主函数void main(void){Delay_xms(50);// 等待系统稳定LCD_init(); //LCD 初始化LCD_clear(); // 清屏ds1302_init(); //DS1302 初始化Delay_xms(10);ds1302_write_time(); // 写入初始值Init_timer2(); // 定时器 2 初始化while(1){Display();}。

ds1302的工作原理

ds1302的工作原理

ds1302的工作原理
DS1302是一款实时时钟芯片,它的工作原理基于振荡器和分频器的结合。

DS1302内置有一个32.768kHz的振荡器,它通过晶体的振荡来提供一个稳定的频率信号。

该频率信号被分频器分频为1Hz 的时间基准脉冲。

在工作时,DS1302通过上电复位电路初始化其内部寄存器。

然后,DS1302使用锁存器将振荡器输出的1Hz脉冲锁存到内部计数寄存器中。

计数寄存器以BCD(二进制编码十进制)的形式存储当前时间,包括年、月、日、小时、分钟和秒。

DS1302还具有一个写保护功能,可通过设置相应的控制寄存器位来使其处于只读模式,防止误操作或恶意更改。

为了确保数据的可靠性,DS1302将计数寄存器中的数据存储在内部的SRAM(静态随机存取存储器)中,并在断电时自动切换到备用电池供电模式,以保持数据的持久存储。

当外部电源重新接入时,DS1302会从SRAM中恢复数据,并通过锁存器将其重新加载到计数寄存器中。

除了主要的时钟功能外,DS1302还提供了定时器功能,可以设置定时器的触发时间和触发动作。

总的来说,DS1302的工作原理是通过内置的振荡器和分频器产生稳定的时钟脉冲,将时间数据以BCD格式存储在计数寄
存器中,并通过写保护和备用电池供电功能确保数据的可靠性和持久性。

关于实时时钟模块DS1302的介绍

关于实时时钟模块DS1302的介绍

关于实时时钟模块DS1302的介绍DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。

它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。

DS1302工作原理DS1302 工作电压为2.0V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个318的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

DS1302主要性能指标DS1302实时时钟芯片广泛应用于电话、传真、便携式仪器等产品领域,他的主要性能指标如下:1、DS1302是一个实时时钟芯片,可以提供秒、分、小时、日期、月、年等信息,并且还有软年自动调整的能力,可以通过配置AM/PM来决定采用24小时格式还是12小时格式。

2、拥有31字节数据存储RAM。

3、串行I/O通信方式,相对并行来说比较节省IO口的使用。

4、DS1302的工作电压比较宽,大概是2.0V~5.5V都可以正常工作。

采用双电源供电,当主电源比备用电源高0.2V时,由主电源供电,否则采用备用电源,一般是一个纽扣电池。

5、DS1302这种时钟芯片功耗一般都很低,它在工作电压2.0V的时候,工作电流小于300nA。

6、DS1302共有8个引脚,有两种封装形式,一种是DIP-8封装,芯片宽度(不含引脚)是300mil,一种是SOP-8封装,有两种宽度,一种是150mil,一种是208mil。

DS1302引脚及定义这是单字节写入的时序图,可见,先拉高使能端,进行使能选择,然后在时钟上升沿写入一个字节。

DS1302在进行读写操作时最少读写两个字节,第一个是控制字节,就是一个命令,说明是读还是写操作,第二个时需要读写的数据。

对于单字节写,只有在SCLK为低电平时才能将CE 置高电平,所以刚开始将SCLK 置低,CE置高,然后把需要写入的字节送入IO口,然后跳变SCLK,在SCLK下降沿时,。

51单片机实战指南-使用DS1302设计数字时钟

51单片机实战指南-使用DS1302设计数字时钟

YEAR
WP
0
0
0 0000
本章内容:
1
DS1302芯片介绍
22 封装的编程思想和结构体类型
3 2
DS1302读写操作的编程实现
4
DS1302读写实战
12.2.1 封装的编程思想
➢ 封装是面向对象编程三大特性(封装、继承、多态)之一 ➢ 核心思想就是尽可能地隐藏内部的细节,只保留一些对外接
口使之与外部发生联系 ➢ 就C语言而言,封装的体现就是函数的编写(小封装)和模
} DS1302_CE = 0;
//传送数据结束
return dat;
}
12.3.2 读写函数的封装-DS1302WriteByte
/* 发送一个字节到DS1302通信总线上 */
void DS1302WriteByte(unsigned char dat)
{
unsigned char i;
for (i=0; i<8; i++)
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
1
RAM/CK A4
A3
A2
A1
A0
R/W
寄存器名
秒寄存器 分钟寄存器 小时寄存器 日期寄存器 月份寄存器 星期寄存器 年份寄存器 控制寄存器
命令字
写操作 读操作
80H
81H
82H
83H
84H
85H
86H
87H
88H
89H
8AH 8BH
8CH 8DH
12.4 DS1302读写实战-ds1302.c
void mai时间后会刷新显示

实时时钟电路DS1302芯片的原理及应用

实时时钟电路DS1302芯片的原理及应用

实时时钟电路DS1302芯片的原理及应用DS1302是一种实时时钟(RTC)电路芯片,由Dallas Semiconductor (现被Maxim Integrated收购)设计和制造。

它提供了一个准确的时间和日期计时功能,适用于许多应用,例如电子设备、仪器仪表、通讯设备和计算机系统等。

DS1302芯片的原理如下:1.时钟发生器:DS1302芯片内部集成了一个时钟发生器电路,它使用外部XTAL晶体和一个频率分频器来产生准确的时钟信号。

晶体的频率通常为32.768kHz,这是由于此频率具有较好的稳定性。

2.电源管理:DS1302芯片可以使用3V到5.5V的电源供电。

它内部具有电源管理电路,可以自动切换到低功耗模式以延长电池寿命。

3.时间计数器:DS1302芯片内部包含一个时间计数器,用于计算并保存当前时间、日期和星期。

它采用24小时制,并提供了BCD编码的小时、分钟、秒、日、月和年信息。

4.控制和数据接口:DS1302芯片使用串行接口与外部器件进行通信,如微控制器或外部检测电路。

控制和数据信息通过三根线SCLK(串行时钟)、I/O(串行数据输入/输出)和CE(片选)进行传输。

5.电源备份:为了确保即使在电源中断的情况下仍能保持时间数据,DS1302芯片通过附带的外部电池来提供电源备份功能。

当主电源中断时,芯片会自动切换到电池供电模式,并将时间数据存储在内部RAM中。

DS1302芯片的应用包括但不限于以下几个方面:1.时钟和日历显示:DS1302芯片可以直接连接到LCD显示屏、LED显示器或数码管等设备,用于显示当前时间和日期。

2.定时控制:DS1302芯片可以用作定时器或闹钟,在特定的时间触发一些事件。

例如,可以使用它作为控制家庭设备的定时开关。

3.数据记录:由于DS1302芯片具有时间计数功能,它可以用于记录事件的时间戳,如数据采集、操作记录或系统状态记录。

4.电源失效保护:DS1302芯片的电源备份功能可确保即使在电源中断的情况下,时间数据也能被保存,以避免系统重新启动后时间重置的问题。

ds1302工作原理

ds1302工作原理

ds1302工作原理DS1302是一款广泛应用于实时时钟(RTC)模块的集成电路芯片,它的工作原理是如何实现的呢?接下来我们将详细介绍DS1302的工作原理。

DS1302的工作原理主要包括时钟信号的生成、时间数据的存储和读取以及电源管理等几个方面。

首先,我们来看时钟信号的生成。

DS1302内部集成了一个时钟发生器电路,它能够产生稳定的时钟信号,这个时钟信号的频率可以通过外部晶体振荡器来调节,一般情况下为32.768kHz。

这个时钟信号会被用于驱动DS1302内部的计数器,从而实现对时间的计时和计数。

其次,DS1302还具有时间数据的存储和读取功能。

它内部集成了31个静态RAM存储单元,用于存储年、月、日、时、分、秒等时间数据。

通过串行接口,我们可以向DS1302写入时间数据,也可以从中读取时间数据。

这样就实现了对时间的存储和读取,为实时时钟的功能提供了基础支持。

此外,DS1302还具有电源管理功能。

它可以通过外部电池或超级电容来提供备份电源,以保证在主电源断电的情况下,实时时钟模块仍能够正常工作,并且不会丢失时间数据。

这种设计保证了实时时钟的稳定性和可靠性。

总的来说,DS1302的工作原理是基于时钟信号的生成、时间数据的存储和读取以及电源管理等几个关键功能。

通过这些功能的协同作用,DS1302能够实现精准的时间计时和计数,并且在断电情况下能够保持时间数据的稳定和可靠。

这使得DS1302在很多领域都有着广泛的应用,比如电子钟表、温度计、湿度计等各种需要时间计时功能的设备中都可以看到DS1302的身影。

综上所述,DS1302作为一款实时时钟模块的集成电路芯片,其工作原理主要包括时钟信号的生成、时间数据的存储和读取以及电源管理等几个方面。

这些功能的协同作用使得DS1302能够稳定可靠地实现时间的计时和计数,为各种设备和系统提供了精准的时间支持。

实时时钟电路DS1302芯片的原理及应用

实时时钟电路DS1302芯片的原理及应用

实时时钟电路DS1302芯片的原理及应用DS1302芯片是一种低功耗的实时时钟(RTC)电路。

它包含了一个真正的时钟/日历芯片和31个静态RAM存储单元,用于存储时钟和日期信息。

DS1302芯片的工作电压范围为2.0V至5.5V,并且具有极低的功耗,非常适合于移动电子设备和电池供电的应用。

DS1302芯片的原理如下:1.时钟发生器:DS1302芯片内部具有一个实时时钟发生器,它通过晶振和电容电路生成稳定的振荡信号,用于计时。

2.时钟/计时电路:DS1302芯片内部的时钟/计时电路可以精确地计算并保持当前的时间和日期。

它具有秒、分钟、小时、日期、月份、星期和年份等不同的计时单元。

3.RAM存储单元:DS1302芯片包含31个静态RAM存储单元,用于存储时钟和日期信息。

这些存储单元可以通过SPI接口进行读写操作,并且在断电情况下也能够保持数据。

4.控制接口:DS1302芯片通过3线接口与微控制器通信,包括一个时钟线、一个数据线和一个使能线。

这种接口使得与微控制器的通信非常简单,并且能够高效地读写时钟和日期信息以及控制芯片的其他功能。

DS1302芯片的应用如下:1.实时时钟:DS1302芯片可以用作电子设备中的实时时钟。

例如,它可以用于计算机、嵌入式系统、电子游戏等设备中,以提供准确的时间和日期信息。

2.定时器:DS1302芯片的计时功能可以用于设计各种定时器应用。

例如,它可以用于计时器、倒计时器、定时开关等应用中,以实现定时功能。

3.时钟显示:DS1302芯片可以与显示模块结合使用,用于显示当前的时间和日期。

例如,它可以用于数字钟、计时器、时钟频率计等应用中。

4.能量管理:由于DS1302芯片具有低功耗特性,因此它可以用于电池供电的设备中,以实现节能的能量管理策略。

例如,它可以用于手持设备、无线传感器网络等应用中,以延长电池寿命。

综上所述,DS1302芯片是一种低功耗的实时时钟电路,具有精确计时、可靠存储和简单接口等优点,适用于计时、显示和能量管理等各种应用中。

基于DS1302的实时时钟实验

基于DS1302的实时时钟实验

A VR学习笔记八、基于DS1302的实时时钟实验-------基于LT_Mini_M168.1基于DS1302的基本测温实验实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。

采用普通32.768kHz晶振。

本实例采用实时时钟芯片DS1302配合单片机的串口构成一个万年历实验,本实例包括以下三个功能模块:●单片机系统:使用ATmega16单片机实现对DS1302芯片的时间设置,并读取时间值,通过串口将采集到的时间值发送到计算机。

通过串口助手显示采集到的时间。

●外围电路:包括DS1302控制电路和RS232串口通信电路。

●程序设计:编写程序实现对DS1302的读写控制操作。

通过本实例,掌握以下知识点:● DS1302实时时钟电路的设计。

● DS1302实时时钟芯片的控制指令和操作时序。

●编写软件,实现对DS1302的控制和数据采集。

8.2 器件和原理8.2.1 DS1302的结构和工作原理DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

1、引脚功能和结构图1示出DS1302的引脚排列,其中V cc1为后备电源,V CC2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由V cc1或V cc2两者中的较大者供电。

当V cc2大于V cc1+0.2V时,V cc2给DS1302供电。

ds1302数字时钟芯片

ds1302数字时钟芯片

《DS1302数字时钟芯片》1. 内置电池备份系统,确保时间信息在断电情况下依然准确无误;2. 采用串行通信接口,简化了与微处理器的连接;3. 超低功耗设计,延长电池使用寿命;4. 宽工作电压范围,适应不同电压环境;5. 小巧的封装尺寸,便于电路板布局。

《DS1302数字时钟芯片》灵活的时钟调整DS1302芯片允许用户通过简单的指令对时钟进行校准,无论是调整小时、分钟、秒,还是日期、月份、年份,都能轻松实现。

这种灵活性使得DS1302能够适应不同地区的时区变化,甚至可以应对夏令时的调整。

完善的日历功能除了基本的时钟功能,DS1302还内置了日历功能。

它能够自动处理月份的天数,包括闰年的特殊情况,大大减轻了开发者处理日期计算的负担。

这一特性使得DS1302在需要记录事件发生日期的应用中显得尤为宝贵。

数据保护与隐私DS1302具备128字节随机存取的静态RAM,可用于存储用户数据。

这些数据在芯片内部得到保护,避免了外部干扰导致的数据丢失。

DS1302还提供了写保护功能,确保数据在特定情况下的安全性。

易于集成与维护DS1302的串行接口设计使其与微控制器的连接变得异常简单。

只需几根线就能完成通信,大大降低了硬件设计的复杂度。

同时,由于接口的标准化,未来若需升级或更换芯片,也能快速完成。

实际应用指南1. 电源连接:将VCC1接至主电源,VCC2接至备用电池,GND接地。

2. 串行接口:将SCLK(时钟线)、I/O(数据线)和RST(复位线)分别连接至微控制器的对应引脚。

3. RAM数据存储:通过编写简单的程序,将需要存储的数据写入RAM中,实现数据的持久化。

通过这些步骤,DS1302数字时钟芯片便能顺利地融入各种电子设备,为它们提供精准的时间管理和数据存储服务。

无论是在智能家居、工业自动化还是个人穿戴设备中,DS1302都能展现出其稳定可靠的性能。

《DS1302数字时钟芯片》节能环保的设计理念DS1302数字时钟芯片在设计之初就充分考虑了节能环保的重要性。

ds1302实时时钟程序说明

ds1302实时时钟程序说明
下面是DS1302内部寄存器的地址的说明。
DS1302实时时钟在数码管上进行实时显示的程序
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit rst=P2^4;
sbit io=P2^0;
}
write_ds1302(0x8e,0x80); //进行写保护
}
void read_rtc()
{
uchar i;
for(i=0;i<7;i++)
{
time_data[i]=read_ds1302(read_add[i]);
}
}
void time_pros()
{
disp[0]=time_data[6]%16;//将BCD码(这里与十六进制没有区别)进行十位个位的分离
{
j=time_data[i]/10;//十位5
time_data[i]%=10;//各位8
time_data[i]=time_data[i]+j*16;
}
write_ds1302(0x8e,0x00);//去除写保护
for(i=0;i<7;i++)
{
write_ds1302(write_add[i],time_data[i]);
disp[1]=time_data[6]/16;
disp[2]=17;
disp[3]=time_data[5]%16;
disp[4]=time_data[5]/16;
disp[5]=17;

DS1302实时时钟芯片应用

DS1302实时时钟芯片应用

DS1302实时实钟芯片应用(一)DS1302概述DS1302是DALLAS公司生产的绢流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与微控制器进行通信。

具有秒、分、时、日、周、月、年信息。

每月的天数和闰年的天数可自动调整。

时钟和RAM的读/写可以以一个字节或多达31个字节的形式进行传输。

DS1302工作时的功耗很低,保持数据和时钟信息时所需功率小于1mW。

有主电源和备用电源。

(二)DS1302的主要性能A. 实时时钟能计算到2099年B. 31字节静态RAMC. 串口通信方式D. 电压范围2~5.5V,2V时工作电流小于300nAE. 温度范围-40~+85℃(三)引脚及功能(四)DS1302的命令字每一次数据传送都由一字节命令字开始,其后紧跟一字节数据或多字节数据。

命令字如下:读写DS1302内部RAM命令字如下:(五)DS1302的数据传送通过把/RST拉至高电平来启动数据传送,将/RST拉至低电平则可终止数据传送,I/O引脚变为高阻状态。

数据输入时,在时钟的上升沿数据必须有效,而数据位在时钟的下降沿输出。

上电时,在Vcc≥2.5V之前,/RST必须为逻辑0。

此外,当把/RST拉至逻辑1时,SCLK必须为逻辑0。

跟随在写命令字节的8个SCLK周期之后,在下8个SCLK周期的上升沿输入数据字节,如果有额外的SCLK 周期,它们将被忽略,数据从最低位(位0)开始传送。

跟随在读命令字节的8个时钟周期之后,在下8个时钟周期的下将沿输出数据字节。

注意:被传送的第一个数据位发生在写命令字节的最后一位之后和第一个下将沿。

只要/RST保持高电平,如果有额外的时钟周期,它们将重新发送数据字节,这一操作使之具有连续的多字节的读能力。

另外,在时钟的每一个上升沿,I/O引脚为三态。

数据从最低位开始是传送。

DS1302的多字节读写:对时钟/日历寄存器进行多字节读写时,其命令字节BFH为读,BEH为写;当对RAM 进行多字节读写时,其命令字节FFH为读,FEH为写。

DS1302实时时钟---液晶显示

DS1302实时时钟---液晶显示
while(ms--)
{
for(i = 0;i
//向DS1302写入一字节,根据时序图写函数
//上升沿锁存数据,先发送最低位
void Write_A_Byte_TO_DS1302(uchar x)
{
uchar i;
for(i = 0;i >= 1;
}
}
//从DS1302读取一字节,看时序图写函数
//下降沿锁存数据,先发送最低位
DelayMS(1);
Write_LCD_Command(0x06);
///DS1302中的数据是BCD码存放的,所以将寄存器中的数据转换成十六
进制返回
uchar Get_A_Byte_FROM_DS1302()
{
uchar i,b = 0x00;
for(i = 0;i
//从指定地址读取一个数据
uchar Read_Data(uchar addr)
{
uchar dat;
{
LCD_Busy_Wait();
RS = 0;RW = 0;EN = 0;datport = cmd;EN = 1;DelayMS(1);EN = 0;
}
//初始
Write_LCD_Command(0x38);
DelayMS(1);
Write_LCD_Command(0x01);
EN = 0;DelayMS(1);
return state; //返回状态值
}
*/
//LCD忙检测
void LCD_Busy_Wait()
{
// // while((Read_LCD_State()&amp;0x80) == 0x80); //忙,则等待

DS1302实时时钟原理与应用

DS1302实时时钟原理与应用

DS1302实时时钟原理与应用
1.原理:
DS1302实时时钟通过一个简单的三线接口与微控制器相连,这三根
线分别是:数据线、时钟线和复位线。

通过这三根线,微控制器可以向
DS1302写入和读取时钟和日期信息。

具体的通信协议可以通过发送特定
的命令字节来实现。

当写入数据时,数据线的电平可以提供有效数据,而
时钟线的上升沿控制数据的传输。

当读取数据时,数据线的电平会反映
DS1302存储器中的信息。

2.应用:
a.数字时钟和日期显示器:DS1302实时时钟可以用来驱动数字时钟
和日期显示器,供人们查看当前时间和日期。

b.考勤系统:DS1302实时时钟可以用来记录员工的考勤信息,如签
到和签退时间。

c.定时器:DS1302实时时钟可以用来控制各种定时器,如定时开关、定时器插座等。

d.定时报警器:使用DS1302实时时钟可以实现定时报警功能,如定
时提醒服药、定时关机等。

e.温度和湿度监测:结合温湿度传感器,DS1302实时时钟可以用来
记录环境的温度和湿度信息,并提供时间戳。

f.数据日志记录器:DS1302实时时钟可以用来记录各种传感器的数据,并提供时间戳,以便后续分析和处理。

总之,DS1302实时时钟是一种非常实用的集成电路,具有精确和可靠的时间计量功能。

它可以广泛应用于各种需要时间记录和计量的电子设备和系统中。

通过合理的设计和应用,我们可以充分发挥DS1302实时时钟的功能,提高系统的可靠性和稳定性。

实时时钟芯片DS1302

实时时钟芯片DS1302

实时时钟芯片DS1302
DS1302 是一种三线制的串行时钟芯片,即CE(片选),SCLK(时钟),
I/O(双向数据)。

从严格意义上来说,它不是SPI 总线类型的,因为SPI 的数
据线的输入输出是分开的,但是我们操作的时候可以用带SPI 的硬件接口的MCU,比如PIC16F877 的MSSP 模块。

命令字节的基本格式
存储器结构
需要注意的地方:
1.在上电时,RST 必须为逻辑0 直至Vcc>
2.0V。

同时SCLK 在RST 驱动至逻辑1 状态时必须为逻辑0。

2.数据输入是在SCLK 的上升沿,数据输出是在SCLK 的下降沿。

3.传输方式:低位先传输。

4.时钟运行:秒寄存器的最高位(BIT7)是作为时钟控制位,当为逻辑1 时,时钟停止,为0 时钟运行。

所以如果要时钟运行的话就必须将秒寄存器的最高
位清0
5.12/24 小时模式:小时寄存器的第7 位(最高位)是选择12 小时制还是24 小时制。

当为逻辑1 时选择12 小时,逻辑0 选择24 小时。

当为12 小时制时,小时寄存器的第5 位用来表示上午AM 和下午PM,逻辑1 的时候表示PM,
逻辑0 的时候表示AM。

6.在企图对DS1302 操作之前,必须将WP 位清零。

7.读写模式:有两种模式,可以单字节读写,以及连续多字节读写(burst mode)。

在连续多字节读写时,即burst mode,地址是必须从地址0 的0 位开。

ds1302实时时钟程序

ds1302实时时钟程序

/* 时间:4月19日功能:使用ds1302实时时钟芯片,用共阴数码管显示时,分,秒*/#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit io=P3^4;sbit cs=P3^5;sbit clk=P3^6;uchar code table1[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80};uchar code table2[]={ //译码器与单片机的接线引脚P2.4 P2.3 P2.20xe3,0xe7,0xeb,0xef,0xf3,0xf7,0xfb,0xff};uchar time[7]={14,2,3,25,23,59,50}; //初始化实时时钟时间uchar register_wr[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};uchar register_re[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; uchar temp1[7];uchar shi,ge;void delay_ms(uchar t);void delay(); //大约10usvoid spi_writebyte(uchar dat);uchar spi_readbyte();void ds1302_spiwrite(uchar add,uchar dat);uchar ds1302_spiread(uchar add);void ds1302_init();void ds1302_run(); //ds1302全运行过程void display(); //共阴数码管显示过程void main(){ds1302_init();while(1){ds1302_run();display();}}void delay_ms(uchar t){uchar x,y;for(x=t;x>0;x--)for(y=110;y>0;y--);}void ds1302_run(){ //ds1302全运行过程uchar i;for(i=0;i<7;i++){ds1302_spiwrite(0x8e,0x80);//写保护,不让写temp1[i]=ds1302_spiread(register_re[i]); //将十六进制数转换成相同数字的十进制shi=temp1[i]/16;ge=temp1[i]%16;time[i]=shi*10+ge;}}void display(){P0=table1[time[4]/10]; P2=table2[0];delay_ms(1);P0=table1[time[4]%10]; P2=table2[1];delay_ms(1);P0=table1[16];P2=table2[2];delay_ms(1);P0=table1[time[5]/10]; P2=table2[3];delay_ms(1);P0=table1[time[5]%10]; P2=table2[4];delay_ms(1);P0=table1[16];P2=table2[5];delay_ms(1);P0=table1[time[6]/10];P2=table2[6];delay_ms(1);P0=table1[time[6]%10];P2=table2[7];delay_ms(1);}void ds1302_init(){uchar i;ds1302_spiwrite(0x8e,0x00); //wp是写允许位。

时钟芯片ds1302

时钟芯片ds1302

时钟芯片ds1302
时钟芯片DS1302是一种具有实时时钟(RTC)功能的集成电路。

该芯片由Maxim Integrated公司生产,广泛用于各种电子
设备中,包括计算机、电视、仪表盘等。

DS1302的主要特性如下:
1. 时钟功能:DS1302可以提供准确的时间和日期信息,并能
够自动调整闰年。

2. 电源管理:芯片内部集成了电源管理电路,可以有效地管理电池的使用,以延长电池寿命。

3. 低功耗:DS1302在运行时非常省电,可通过外部电池供电,在断电时仍能维持时钟运行。

4. 串行接口:芯片通过串行接口与主控制器(如微处理器或单片机)进行通信,方便集成到各种系统中。

5. 多种时间格式:DS1302支持24小时制和12小时制的时间
显示,可以根据需要选择合适的格式。

6. 报警功能:芯片内置了报警功能,可在特定的时间点触发外部中断,用于提醒用户进行相关操作。

7. 温度补偿:DS1302能够通过内部温度传感器进行温度补偿,以提高时钟的准确性。

总的来说,DS1302是一款功能强大且易于使用的时钟芯片,
可以在各种电子设备中提供准确的时间和日期信息。

它的特点包括低功耗、实时时钟功能、串行接口以及报警功能等,非常适合用于需要精准时间计算和管理的应用。

DS1302-天高微 低功耗实时时钟电路

DS1302-天高微 低功耗实时时钟电路

管脚图
8-Pin DIP
8-Pin SOP
1
管脚描述
X1,X2 GND RST I/O SCLK Vcc1,Vcc2
极限参数
Voltage on Any Pin Relative to Ground Storage Temperature Soldering Temperature
DS1302
32768Hz 晶体接入脚 地线 清零 数据 In/Out 串口时钟 电源接入脚
信号描述
1)Vcc1 Vcc1 在单电源系统中可以低功耗操作、也可以在电池供电系统中作低电源备份电源,
当作为涓流充电系统引用时,再充电源连接到 Vcc1 管脚。 2)Vcc2
在双电源配置中,Vcc2 是主要的电源供应管脚。Vcc1 连接到备份电源以在缺少主电源 的情况下保存时间和数据。 GC2302 可选择 Vcc1 和 Vcc2 之间电压高的一个作为电源电压, 当 Vcc2 大于 Vcc1+0.2V 时,Vcc2 为电源。当 Vcc2 小于 Vcc1 时,Vcc1 为电源。 3)SCLK(Serial Clock Input)
8
寄存器地址/定义(图 4)
DS1302
9
DS1302
时钟/日历
时钟/日历包括 7 个写/读寄存器,如图 4 所示。时钟/日历寄存器中的数据为 BCD 码。
时钟/日历帧模式
时钟/日历命令字节指定帧模式工作。此模式下,第一个八位时钟/日历寄存器可以连续 读或写(如图 4 所示),从 0 地址的 0 位开始。
无效)的情况下测得的。 8)当 Vcc2 >Vcc1 + 0.2V 时,Vcc = Vcc2;当 Vcc1 > Vcc2 时,Vcc = Vcc1。 9)Vcc2 = 0V。 10)Vcc1 = 0V。 11)25℃时为典型值。

DS1302中文手册

DS1302中文手册

DS1302中文手册一、简介DS1302是一种实时时钟芯片,主要用于计算机系统、通信设备、智能家居等领域。

本手册旨在提供DS1302的详细说明和操作方法,帮助用户正确使用该芯片。

二、芯片特性1. 基本特性:- 日期格式:年-月-日- 时间格式:时:分:秒- 温度测量范围:-55℃至+125℃- 时钟频率:32768Hz2. 时钟控制:- 时钟源选择:外部或内部- 时钟暂停功能- 时钟调制功能三、引脚定义DS1302具有8个引脚,分别为:1. X1:外部时钟输入端2. X2:外部时钟输出端3. Vcc:供电正极4. GND:地5. SDA:串行数据输入/输出端6. SCLK:串行数据时钟输入端7. RST:复位控制端8. BAT:电池输入端四、工作原理DS1302基于Bipolar CMOS技术,通过外部提供的时钟信号进行时间计数和存储。

芯片内部包含时钟控制电路、RAM存储器、温度计和时钟计数器等功能模块,通过串行通信协议与外部设备进行数据传输。

五、使用方法1. 芯片初始化:- 将X1和X2连接外部时钟源- Vcc与电源正极相连- GND与地相连2. 设定时间:- 通过串行数据输入将年、月、日、时、分、秒信息写入相应寄存器- 通过串行数据输入将温度信息写入相应寄存器(可选)3. 读取时间:- 通过串行数据输出获取年、月、日、时、分、秒信息- 通过串行数据输出获取温度信息(可选)4. 设置时钟暂停:- 通过串行数据输入将时钟控制字节写入相应寄存器控制位,实现时钟暂停功能5. 时钟调制:- 通过串行数据输入将时钟调制字节写入相应寄存器控制位,实现时钟调制功能六、注意事项1. 确保正确接线,避免短路或浮空引脚2. 使用合适的外部时钟源,确保时钟的准确性3. 避免频繁的读写操作,以延长芯片的使用寿命4. 根据实际需求进行合理设置,避免不必要的功能开启5. 定期校准芯片时间,确保准确性七、总结本手册介绍了DS1302的特性、引脚定义、工作原理以及使用方法,并提供了一些注意事项供用户参考。

DS1302实时时钟模块

DS1302实时时钟模块

DS1302实时时钟模块DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。

实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。

时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。

DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RST 复位(2)I/O 数据线(3)SCLK串行时钟。

时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。

DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mWDS1302主要性能指标:★实时时钟具有能计算2100 年之前的秒、分、时、日、星期、月、年的能力,还有闰年调整的能力★ 31 8 位暂存数据存储RAM★串行 I/O 口方式使得管脚数量最少★宽范围工作电压2.0 5.5V★工作电流 2.0V 时,小于300nA★读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式★ 8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配★简单 3 线接口★与 TTL 兼容Vcc=5V★可选工业级温度范围-40 +85★双电源管用于主电源和备份电源供应DS1302实时时钟模块参数如下:1.PCB为单面板,尺寸:44mm*23mm*1.6mm2.带4个定位孔,直径3.1mm3.备用电池为正品天球CR2032,电压3V,电流260mAh,非可充电电池。

理论数据保持时间大于10年!4.晶振32.768KHz,日本原装进口晶振,匹配电容为6pF,尺寸2*6mm5.DS1302为8脚直插国产大芯片,芯片下面有IC座,方便更换及插拔芯片6.模块工作电压兼容3.3V/5V,可与5V及3.3V单片机连接7.工作温度:0°---70°接线方法(以提供的程序为例,可以接任意IO口,在程序中修改端口定义即可):VCC→+5V/3.3VGND→GNDCLK→P02DAT→P01RST→P00注意事项:1.VCC与GND千万不要接反,以免烧坏芯片2.51单片机P0口需要接上拉电阻,如果您的单片机没有接上拉电阻,可以将数据线接到其它端口发货清单:1.DS1302实时时钟模块1个(带DS1302芯片及备用电池,发货前已测试好功能)2.塑料固定柱4个3.DS1302中文数据手册1份、英文数据手册1份、模块原理图1份、51单片机驱动程序1份(购买后发到您的邮箱)防静电包装。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DS1302 实时时钟
/*************************************
LED_D(数码管段选) LED_W(数码管位选)
*************************************/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LED_W P2
#define LED_D P0
sbit LED=P3^2;
sbit SCK=P3^4;
sbit IO=P3^5;
sbit RST=P3^6;
sbit set=P1^0;
sbit s1=P1^1;
sbit s2=P1^2;
uchar code
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
uchar write_add[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//年、星期、月份、日期、时、分、秒
uchar read_add[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//年、星期、月份、日期、时、分、秒
uchar time_date[7];//年、星期、月份、日期、时、分、秒
uchar disp[4];
uchar num,setn,minite,hour;
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++);
for(y=0;y<110;y++);
}
void Write_DS1302_Byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
SCK=0;
IO=dat&0x01;
dat=dat>>1;
SCK=1;
}
}
void Write_DS1302(uchar add,uchar dat) {
RST=0;
_nop_();
SCK=0;
_nop_();
RST=1;
_nop_();
Write_DS1302_Byte(add);
Write_DS1302_Byte(dat);
RST=0;
_nop_();
IO=1;
SCK=1;
}
uchar Read_DS1302(uchar add) {
uchar i,value;
RST=0;
_nop_();
SCK=0;
_nop_();
RST=1;
_nop_();
Write_DS1302_Byte(add);
for(i=0;i<8;i++)
{
value=value>>1;
SCK=0;
if(IO)
value=value|0x80;
SCK=1;
}
RST=0;
_nop_();
SCK=0;
_nop_();
SCK=1;
IO=1;
return value;
}
uchar Chang_H_D(uchar dat) {
uchar t;
t=dat/16*10+dat%16;
return t;
}
uchar Chang_D_H(uchar dat) {
uchar t;
t=dat/10*16+dat%10;
return t;
}
void Read()
{
uchar i;
for(i=0;i<7;i++)
{
time_date[i]=Read_DS1302(read_add[i]);
}
}
void timepro()
{
disp[0]=time_date[5]%16;
disp[1]=time_date[5]/16;
disp[2]=time_date[4]%16;
disp[3]=time_date[4]/16;
}
void keyscan()
{
if(set==0)
{
delay(5);
if(set==0)
{
while(!set);
setn++;
LED=0;
TR0=0;
num=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
Write_DS1302(0x8e,0x00);
delay(1);
Write_DS1302(0x80,Chang_D_H(128));
delay(1);
Write_DS1302(0x8e,0x80);
if(setn==3)
{
setn=0;
TR0=1;
Write_DS1302(0x8e,0x00);
delay(1);
Write_DS1302(0x80,Chang_D_H(0));
delay(1);
Write_DS1302(0x8e,0x80);
}
}
}
if(setn!=0)
{
if(s1==0)
{
delay(5);
if(s1==0)
{
while(!s1);
Write_DS1302(0x8e,0x00);
if(setn==1)
{
minite=Chang_H_D(time_date[5]);
minite++;
if(minite==60)
minite=0;
}
Write_DS1302(0x82,Chang_D_H(minite));
if(setn==2)
{
hour=Chang_H_D(time_date[4]);
hour++;
if(hour==24)
hour=0;
}
Write_DS1302(0x84,Chang_D_H(hour));
Write_DS1302(0x8e,0x80);
}
}
}
}
void display()
{
if(setn!=2)
{
LED_W=1;
LED_D=table[disp[0]];
delay(3);
LED_D=0;
LED_W=2;
LED_D=table[disp[1]];
delay(3);
LED_D=0;
}
if(setn!=1)
{
LED_W=4;
LED_D=table[disp[2]];
delay(3);
LED_D=0;
LED_W=8;
LED_D=table[disp[3]];
delay(3);
LED_D=0;
}
}
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
TR0=1;
num=0;
setn=0;
LED_W=0;
LED_D=0;
LED=1;
}
void Shan()
{
LED=~LED;
}
void main()
{
init();
while(1)
{
Read();
timepro();
keyscan();
display();
}
}
void timer0(void) interrupt 1 {
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
Shan();
}
}。

相关文档
最新文档