| 
 | 
 
DS1302是maxim美信生产的时钟模块,支持年、月、日、时、分、秒、星期显示。支持为后备电池涓流充电。可以。跟Arduino只需要3条数据连接线即可使用。 
 
DS1302数据手册可以看这里:DS1302 时钟芯片 涓流充电时钟保持芯片中文资料 芯片IC中文资料  
 
DS1302电路很简单,如果洞洞板自制的话,可以参考下图: 
 
    
 
 
 
 
DS1302 时钟模块购买地址:http://syyyd.taobao.com 
 
连线方法: 
CE(DS1302 pin5) -> Arduino D5 
IO(DS1302 pin6) -> Arduino D6 
SCLK(DS1302 pin7) -> Arduino D7 
Vcc2(DS1302 pin1) -> Arduino +5v 
GND(DS1302 pin4) -> Arduino GND 
 
使用前,先将下面的库文件解压到arduino-0023\libraries文件夹下面 
 
 
DS1302.rar
(13.27 KB, 下载次数: 64)
 
 
例子代码如下: 
 
- /*
 
 - Arduino 连接 DS1302
 
 - 代码来源:http://quadpoint.org/projects/arduino-ds1302
 
 - 增加了串口调整时间代码
 
 - */
 
 - #include <stdio.h>
 
 - #include <string.h>
 
 - #include <DS1302.h>
 
  
- /* 接口定义
 
 - CE(DS1302 pin5) -> Arduino D5
 
 - IO(DS1302 pin6) -> Arduino D6
 
 - SCLK(DS1302 pin7) -> Arduino D7
 
 - */
 
 - uint8_t CE_PIN = 5;
 
 - uint8_t IO_PIN = 6;
 
 - uint8_t SCLK_PIN = 7;
 
  
- /* 日期变量缓存 */
 
 - char buf[50];
 
 - char day[10];
 
 - /* 串口数据缓存 */
 
 - String comdata = "";
 
 - int numdata[7] ={0}, j = 0, mark = 0;
 
 - /* 创建 DS1302 对象 */
 
 - DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
 
  
 
- void print_time()
 
 - {
 
 - /* 从 DS1302 获取当前时间 */
 
 - Time t = rtc.time();
 
 - /* 将星期从数字转换为名称 */
 
 - memset(day, 0, sizeof(day));
 
 - switch (t.day)
 
 - {
 
 - case 1: strcpy(day, "Sunday"); break;
 
 - case 2: strcpy(day, "Monday"); break;
 
 - case 3: strcpy(day, "Tuesday"); break;
 
 - case 4: strcpy(day, "Wednesday"); break;
 
 - case 5: strcpy(day, "Thursday"); break;
 
 - case 6: strcpy(day, "Friday"); break;
 
 - case 7: strcpy(day, "Saturday"); break;
 
 - }
 
 - /* 将日期代码格式化凑成buf等待输出 */
 
 - snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
 
 - /* 输出日期到串口 */
 
 - Serial.println(buf);
 
 - }
 
  
 
- void setup()
 
 - {
 
 - Serial.begin(9600);
 
 - rtc.write_protect(false);
 
 - rtc.halt(false);
 
 - }
 
  
- void loop()
 
 - {
 
  
- /* 当串口有数据的时候,将数据拼接到变量comdata */
 
 - while (Serial.available() > 0)
 
 - {
 
 - comdata += char(Serial.read());
 
 - delay(2);
 
 - mark = 1;
 
 - }
 
 - /* 以逗号分隔分解comdata的字符串,分解结果变成转换成数字到numdata[]数组 */
 
 - if(mark == 1)
 
 - {
 
 - Serial.print("You inputed : ");
 
 - Serial.println(comdata);
 
 - for(int i = 0; i < comdata.length() ; i++)
 
 - {
 
 - if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
 
 - {
 
 - j++;
 
 - }
 
 - else
 
 - {
 
 - numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
 
 - }
 
 - }
 
 - /* 将转换好的numdata凑成时间格式,写入DS1302 */
 
 - Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
 
 - rtc.time(t);
 
 - mark = 0;j=0;
 
 - /* 清空 comdata 变量,以便等待下一次输入 */
 
 - comdata = String("");
 
 - /* 清空 numdata */
 
 - for(int i = 0; i < 7 ; i++) numdata[i]=0;
 
 - }
 
  
- /* 打印当前时间 */
 
 - print_time();
 
 - delay(1000);
 
 - }
 
  复制代码
  
 
 
使用方法: 
 
打开Arduino串口调试器即可看到当前时间。如果需要调整时间的话,只需要在串口输入当前日期时间,以逗号分隔 
 
格式为: 
 
年,月,日,时,分,秒,星期 
 
星期数:Sunday=1,MOnday=2,...Saturday=7 
比如,今天是2011年11月17日11时23分40秒星期四 
填入2011,11,17,11,22,40,5即可 
 
![]() ![]()  
 
 
 
 
 
   
 |   
 
 
 
 |