pengy110 发表于 2015-2-9 14:33:08

支持楼主啊

flying03 发表于 2015-3-3 17:08:15

分与秒的显示是乱的,是芯片问题还是初始化问题

flying03 发表于 2015-3-3 17:15:19

我用的这个芯片的模块,太诡异了,起初VCC接板子5V,显示乱跳,接收输入也偶尔不正解,换接板子上3.3V电源就正常了,资源上说宽电压2.5V-5.5V是骗人的?

HuaShine2015 发表于 2015-3-26 10:37:11

为什么要阉割掉github上原作者源代码里对32byte RAM读写功能呢?
32字节空间再加上Arduino本身的EEPROM可算是锦上添花效果了

darkscope 发表于 2015-4-9 15:04:20

时间正常在走,但是通过串口设置时间没效果啊,有人和我遇到一样的问题吗?

yhy630 发表于 2015-4-10 08:48:03

flashria 发表于 2013-7-30 21:57 static/image/common/back.gif
您好我测试ds1302也是这个问题 Saturday 2165-25-45 27:165:85一直显示这个时间请问您怎么解决的 ...

你的第一个问题解决:DS1302没有接上拉电阻,接好就可以了,第二个问题,是电源没的接好。

woaigeek 发表于 2015-4-16 17:02:43

henhao ,very good

燃烧 发表于 2015-4-21 11:12:56

时钟模块显示的不是现在的时间是为什么啊

五哥U五哥 发表于 2015-4-23 11:57:18

为什么我的会出现这样的情况。。。3.3V就正常,VCC1和VCC2不管哪个节电池,另一个接5V都是这样

mostblack 发表于 2015-4-23 16:04:47

肿么编译不过去呢
Arduino:1.5.5-r2 (Windows 7), 板:"Arduino Uno"

In file included from DS1302_Example.pde:8:
D:\Arduino\arduino_1.5.5\arduino-1.5.5-r2\libraries\DS1302/DS1302.h:31:22: error: WProgram.h: No such file or directory


cccheng 发表于 2015-5-17 10:23:20

哈哈......我做了个LCD时钟{:soso_e100:}带温度显示、星期显示。晒下代码:#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>

#include <stdio.h>
#include <string.h>
#include <DS1302.h>

int Mode=0;
int h = 0;
int m = 0;
int s = 0;
int d = 12;
int mo = 5;
int y = 15;
uint8_t CE_PIN   = 5;
uint8_t IO_PIN   = 6;
uint8_t SCLK_PIN = 7;
float c = 0.00;
String comdata = "";
int numdata ={0}, j = 0, mark = 0;
char day;


byte one = {
B00000,
B00000,
B00000,
B11111,
B00000,
B00000,
B00000,
B00000,
};

byte two = {
B00000,
B01110,
B00000,
B00000,
B00000,
B11111,
B00000,
B00000,
};

byte three = {
B00000,
B01110,
B00000,
B01110,
B00000,
B11111,
B00000,
B00000,
};

byte four = {
B00000,
B11111,
B10001,
B10101,
B11101,
B00001,
B01110,
B00000,
};


byte five = {
B00000,
B11110,
B01000,
B11110,
B01010,
B01010,
B11111,
B00000,
};

byte six = {
B00000,
B00100,
B00000,
B11111,
B00000,
B01010,
B10001,
B00000,
};

byte seven = {
B11111,
B10001,
B10001,
B11111,
B10001,
B10001,
B11111,
B00000,
};


LiquidCrystal_I2C lcd(0x27, 16, 2);
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);



void setup() {
sensors.begin();
lcd.init();
lcd.backlight();
lcd.createChar(0, one);
lcd.createChar(1, two);
lcd.createChar(2, three);
lcd.createChar(3, four);
lcd.createChar(4, five);
lcd.createChar(5, six);
lcd.createChar(6, seven);
lcd.home();
lcd.print("Welcome to use!");
delay(1000);
lcd.clear();
Serial.begin(9600);
Serial.println("Wait for set time");
rtc.write_protect(false);
    rtc.halt(false);
}




void Display(){
Time t = rtc.time();
memset(day, 0, sizeof(day));
    switch (t.day)
    {
    case 1: lcd.setCursor(12,1); lcd.write((byte)0); break;
    case 2: lcd.setCursor(12,1); lcd.write(1); break;
    case 3: lcd.setCursor(12,1); lcd.write(2); break;
    case 4: lcd.setCursor(12,1); lcd.write(3); break;
    case 5: lcd.setCursor(12,1); lcd.write(4); break;
    case 6: lcd.setCursor(12,1); lcd.write(5); break;
    case 7: lcd.setCursor(12,1); lcd.write(6); break;
    }
lcd.setCursor(0,0);
if(t.hr < 10)lcd.print("0");
lcd.print(t.hr);
lcd.print(":");
if(t.min < 10)lcd.print("0");
lcd.print(t.min);
lcd.print(":");
if(t.sec < 10)lcd.print("0");
lcd.print(t.sec);
lcd.setCursor(0,1);
lcd.print(t.yr);
lcd.print("/");
if(t.mon < 10)lcd.print("0");
lcd.print(t.mon);
lcd.print("/");
if(t.date < 10)lcd.print("0");
lcd.print(t.date);
lcd.setCursor(9,0);
lcd.print(c);
lcd.write((char)223);
lcd.print("C");
lcd.print("   ");
}


void loop() {
sensors.requestTemperatures();
c = sensors.getTempCByIndex(12);
Display();
/* 当串口有数据的时候,将数据拼接到变量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 == ',' || comdata == 0x10 || comdata == 0x13)
            {
                j++;
            }
            else
            {
                numdata = numdata * 10 + (comdata - '0');
            }
      }
      /* 将转换好的numdata凑成时间格式,写入DS1302 */
      Time t(numdata, numdata, numdata, numdata, numdata, numdata, numdata);
      rtc.time(t);
      mark = 0;j=0;
      /* 清空 comdata 变量,以便等待下一次输入 */
      comdata = String("");
      /* 清空 numdata */
      for(int i = 0; i < 7 ; i++) numdata=0;
    }
}注意,设置法有点不一样。如:2015年10月17日10时18分0秒星期天,
输入:2015,10,17,10,18,0,7即可。

用LCD1602不带I2C模块的,代码如下:#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

#include <stdio.h>
#include <string.h>
#include <DS1302.h>

int Mode=0;
int h = 0;
int m = 0;
int s = 0;
int d = 12;
int mo = 5;
int y = 15;
uint8_t CE_PIN   = 5;
uint8_t IO_PIN   = 6;
uint8_t SCLK_PIN = 7;
float c = 0.00;
String comdata = "";
int numdata ={0}, j = 0, mark = 0;
char day;


byte one = {
B00000,
B00000,
B00000,
B11111,
B00000,
B00000,
B00000,
B00000,
};

byte two = {
B00000,
B01110,
B00000,
B00000,
B00000,
B11111,
B00000,
B00000,
};

byte three = {
B00000,
B01110,
B00000,
B01110,
B00000,
B11111,
B00000,
B00000,
};

byte four = {
B00000,
B11111,
B10001,
B10101,
B11101,
B00001,
B01110,
B00000,
};


byte five = {
B00000,
B11110,
B01000,
B11110,
B01010,
B01010,
B11111,
B00000,
};

byte six = {
B00000,
B00100,
B00000,
B11111,
B00000,
B01010,
B10001,
B00000,
};

byte seven = {
B11111,
B10001,
B10001,
B11111,
B10001,
B10001,
B11111,
B00000,
};


LiquidCrystal_I2C lcd(3,4,5,6,7,8);
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);



void setup() {
sensors.begin();
lcd.init();
lcd.backlight();
lcd.createChar(0, one);
lcd.createChar(1, two);
lcd.createChar(2, three);
lcd.createChar(3, four);
lcd.createChar(4, five);
lcd.createChar(5, six);
lcd.createChar(6, seven);
lcd.home();
lcd.print("Welcome to use!");
delay(1000);
lcd.clear();
Serial.begin(9600);
Serial.println("Wait for set time");
rtc.write_protect(false);
    rtc.halt(false);
}




void Display(){
Time t = rtc.time();
memset(day, 0, sizeof(day));
    switch (t.day)
    {
    case 1: lcd.setCursor(12,1); lcd.write((byte)0); break;
    case 2: lcd.setCursor(12,1); lcd.write(1); break;
    case 3: lcd.setCursor(12,1); lcd.write(2); break;
    case 4: lcd.setCursor(12,1); lcd.write(3); break;
    case 5: lcd.setCursor(12,1); lcd.write(4); break;
    case 6: lcd.setCursor(12,1); lcd.write(5); break;
    case 7: lcd.setCursor(12,1); lcd.write(6); break;
    }
lcd.setCursor(0,0);
if(t.hr < 10)lcd.print("0");
lcd.print(t.hr);
lcd.print(":");
if(t.min < 10)lcd.print("0");
lcd.print(t.min);
lcd.print(":");
if(t.sec < 10)lcd.print("0");
lcd.print(t.sec);
lcd.setCursor(0,1);
lcd.print(t.yr);
lcd.print("/");
if(t.mon < 10)lcd.print("0");
lcd.print(t.mon);
lcd.print("/");
if(t.date < 10)lcd.print("0");
lcd.print(t.date);
lcd.setCursor(9,0);
lcd.print(c);
lcd.write((char)223);
lcd.print("C");
lcd.print("   ");
}


void loop() {
sensors.requestTemperatures();
c = sensors.getTempCByIndex(12);
Display();
/* 当串口有数据的时候,将数据拼接到变量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 == ',' || comdata == 0x10 || comdata == 0x13)
            {
                j++;
            }
            else
            {
                numdata = numdata * 10 + (comdata - '0');
            }
      }
      /* 将转换好的numdata凑成时间格式,写入DS1302 */
      Time t(numdata, numdata, numdata, numdata, numdata, numdata, numdata);
      rtc.time(t);
      mark = 0;j=0;
      /* 清空 comdata 变量,以便等待下一次输入 */
      comdata = String("");
      /* 清空 numdata */
      for(int i = 0; i < 7 ; i++) numdata=0;
    }
}

cccheng 发表于 2015-5-17 10:37:54

哈哈......我做了个LCD时钟带温度显示、星期显示......
注意,三个库忘记贴上去了,补一下:

toopoo 发表于 2015-5-18 14:08:34

我今天尝试了一下,什么都正常,不过最后需要加个逗号,日期始终不对,输入18号,显示是10号

toopoo 发表于 2015-5-18 14:13:45

我去
接到3.3V一切正常了,这种小电流直接接板子的3.3V就OK了

wangku001wei 发表于 2015-6-7 15:26:04

非常感谢!!
页: 1 2 3 4 5 6 7 [8] 9 10 11
查看完整版本: Arduino学习笔记A8 - Arduino 连接 DS1302时钟模块