proteus中仿真时钟计时器DS1307

62 篇文章 28 订阅
48 篇文章 19 订阅

DS1307是我们使用较多的一款时间日历芯片,当然,我们也可以作为方波发生器来使用,本质上可以作为信号发生器的一定会有晶振来参与。
在这里插入图片描述
虽然它内含了56个字节的NVRAM记忆体,但从管脚的设计来说,这款芯片使用起来非常简单明了。
主要引脚定义如下: X1、32.768kHz 晶振接入端;
VBAT:X2:+3V 电池电压输入;
SDA: 串行数据;
SCL:串行时钟;
SQW/OUT:方波/输出驱动器。
很显然,对于这款芯片来说,必须有两个管脚(X1和X2)来接晶振。SCL和SDA为数据通讯管脚。剩下的就是Vcc与Vbat用来接电源了,接好他们我们就可以用起来了。电路图如下:
在这里插入图片描述
上图,我们采用了LM1602作为显示输出。默认的是I2C的接口方式。读写取芯片记忆体的数据直接用getDate()和setDate()即可轻松完成。初始化对象和使用串口一样用begin(),代码如下:

#include <LiquidCrystal.h>
#include <DS1307.h>
#include <Wire.h>

LiquidCrystal lcd(13,12,11,10,9,8);

int clock[7];

void setup(){
for(int i=3;i<8;i++){
 pinMode(i,INPUT); 
}

lcd.begin(20,2);
DS1307.begin();
DS1307.setDate(16,4,29,0,17,50,04);
}

void loop(){
DS1307.getDate(clock);

lcd.setCursor(0,1);
lcd.print("Time: ");
Print(clock[4]);
lcd.print(":");
Print(clock[5]);
lcd.print(":");
Print(clock[6]);
lcd.setCursor(0,0);
lcd.print("Date: ");
Print(clock[1]);
lcd.print("/");
Print(clock[2]);
lcd.print("/");
lcd.print("20");
Print(clock[0]);


//minutes will be limited and reseted;
if(digitalRead(7)){
 clock[5]++;
 if(clock[5]>59) clock[5]=0;
 DS1307.setDate(clock[0],clock[1],clock[2],0,clock[4],clock[5],clock[6]);
 while(digitalRead(7));
}

//clock will be limited and reseted;
if(digitalRead(6)){
 clock[4]++;
 if(clock[4]>23) clock[4]=0;
 DS1307.setDate(clock[0],clock[1],clock[2],0,clock[4],clock[5],clock[6]);
 while(digitalRead(6));
}
//days will be limited and reseted;
if(digitalRead(5)){
 clock[2]++;
  if(clock[2]>31) clock[2]=1;
 DS1307.setDate(clock[0],clock[1],clock[2],0,clock[4],clock[5],clock[6]);
 while(digitalRead(5));
}
//months will be limited and reseted;
if(digitalRead(4)){
 clock[1]++;
 if(clock[1]>12) clock[1]=1;
 DS1307.setDate(clock[0],clock[1],clock[2],0,clock[4],clock[5],clock[6]);
 while(digitalRead(4));
}
//years will be limited and reseted;
if(digitalRead(3)){
 clock[0]++;
 if(clock[0]>99) clock[0]=0;
 DS1307.setDate(clock[0],clock[1],clock[2],0,clock[4],clock[5],clock[6]);
 while(digitalRead(3));
}


delay(100);
}


void Print(int number){
lcd.print(number/10);
lcd.print(number%10);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河西石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值