lionelg 发表于 2012-5-22 21:41:24

Randy 发表于 2012-5-22 18:39 static/image/common/back.gif
已经解决,您可以重新下载库,进行编译看结果哦!

没问题了,多谢~~:)

Mone 发表于 2012-7-26 11:06:01

好给力啊,继续出品这样的教程!

陈圆 发表于 2012-8-24 10:22:15

我用的1.0.1版本的IDE,里面没有 <LiquidCrystal_I2C.h>,编译的时候通不过,我发现每次因为版本不同造成的问题,很多人都建议换一个版本的IDE,难道没有别的方法吗?

Randy 发表于 2012-8-24 12:25:04

陈圆 发表于 2012-8-24 10:22 static/image/common/back.gif
我用的1.0.1版本的IDE,里面没有 ,编译的时候通不过,我发现每次因为版本不同造成的问题,很多人都建议换一 ...

主要是低版本和高版本的文件格式是不一样的!

jack3150 发表于 2012-9-9 12:53:10

1.0.1的IDE,编译通过,但是工作不正常:

Randy 发表于 2012-9-10 09:13:45

jack3150 发表于 2012-9-9 12:53 static/image/common/back.gif
1.0.1的IDE,编译通过,但是工作不正常:

您按照我给出的几个经验检查了没,我自己用这样方法检查,一下测了30个都没问题的!

萧芸凤 发表于 2012-9-15 21:36:34

代码是驱动lcd的。
我今天试了一下,结果输出全是1,寄存器全是0xff

萧芸凤 发表于 2012-9-15 21:37:00

代码是驱动lcd的。
我今天试了一下,结果输出全是1,寄存器全是0xff

Randy 发表于 2012-9-15 22:14:47

萧芸凤 发表于 2012-9-15 21:37 static/image/common/back.gif
代码是驱动lcd的。
我今天试了一下,结果输出全是1,寄存器全是0xff

寄存器难道设置不正确?

萧芸凤 发表于 2012-9-15 22:23:20

Randy 发表于 2012-9-15 22:14 static/image/common/back.gif
寄存器难道设置不正确?


#include "Wire.h"





int rtc;

int year,month,date,hour,minitue,second,week;



void setup()

{

        Wire.begin();

        Serial.begin(9600);

        registerSet(0x68,0x00,0x00);

        registerSet(0x68,0x02,0x00);       

    registerSet(0x68,0x07,0x93);

       



}



void loop()

{

        bcdRtc()

        Serial.print(year);

        Serial.print(".");

        Serial.print(month);

        Serial.print(".");

        Serial.print(date);

        Serial.print(".");

        Serial.print(week);

        Serial.print(".");

        Serial.print(hour);

        Serial.print(":");

        Serial.print(minitue);

        Serial.print(":");

        Serial.print(second);

        Serial.println();

}







void registerSet(int deviceAddress, int registerAddress, int registerValue)// 写寄存器

{

           

    Wire.beginTransmission(deviceAddress);

    Wire.write(registerAddress);

    Wire.write(registerValue);

    Wire.endTransmission();

}



void registerRead(int deviceAddress, int registerAddress) // 读寄存器





        int i;

       

    Wire.beginTransmission(deviceAddress);

    Wire.write(registerAddress);

    Wire.endTransmission();

    Wire.requestFrom(deviceAddress,7);

        if(Wire.available() <= 7);;

                {

                    for( i = 0 ; i < 7 ; i++)       

            rtc = Wire.read();

                }



        Wire.endTransmission();

       

}



viod bcdRtc()

{       

        registerRead(0x68,0x00);



        year = ( 10 * ( rtc && 0xF0 ) >> 4 ) + ( rtc && 0x0F );

        month = ( 10 * ( rtc && 0x10 ) >> 4 ) + ( rtc && 0x0F );

        date = ( 10 * ( rtc && 0x30 ) >> 4 ) + ( rtc && 0x0F );

        hour = ( 10 * ( rtc && 0x10 ) >> 4 ) + ( rtc && 0x0F );

        minitue = ( 10 *( rtc && 0x70 ) >> 4 ) + ( rtc && 0x0F );

        second = ( 10 * ( rtc && 0x70 ) >> 4 ) + ( rtc && 0x0F );

        week = rtc && 0x0F ;



}


也不知道设置的对不对,我是参考了1307的datasheet,还有就是你的那个库文件

另外,怎样才能把代码贴成你的那个样子啊有行号的那种

Randy 发表于 2012-9-15 22:31:34

萧芸凤 发表于 2012-9-15 22:23 static/image/common/back.gif
也不知道设置的对不对,我是参考了1307的datasheet,还有就是你的那个库文件

另外,怎样才能把代码贴 ...

其实对于Arduino的寄存器来说是不需要设置的,很多时候是已经被一些高手去整合起来了,你现在这个程序的寄存器准不准你需要去仔细看DS1307的datasheet才可以的哦。我没注意看这些,下面回答一下你贴代码的方法。1、点击高级编辑,出来编辑框以后,看图,
点击出来以后,把代码放进去点确认就好了!

萧芸凤 发表于 2012-9-16 18:15:44

本帖最后由 萧芸凤 于 2012-9-16 18:19 编辑

Randy 发表于 2012-9-15 22:31 static/image/common/back.gif
其实对于Arduino的寄存器来说是不需要设置的,很多时候是已经被一些高手去整合起来了,你现在这个程序的寄 ...

下午研究了一下1307,看了半天的datasheet,才发现寄存器中本来就是BCD格式,不需要自己再进行转换了,所以说库文件那个转换过程有些问题,也许是模块不同吧,现在把代码贴一下

#include "Wire.h"
byte rtc;
int year,month,date,hour,minitue,second,week;
void setup()
{
        Wire.begin();                        //I2C初始化
        Serial.begin(9600);                //串口通讯初始化
        registerSet(0x68,0x00,0x00);        //时钟计数器开始
      registerSet(0x68,0x07,0x93);        //初始化为24时制
      registerSet(0x68,0x00,0x00);        //设置开始为0秒
      registerSet(0x68,0x01,0x40);        //设置开始为40分钟
      registerSet(0x68,0x02,0x17);        //设置开始为17点
      registerSet(0x68,0x03,0x06);        //设置开始为星期六
      registerSet(0x68,0x04,0x16);        //设置开始为16号
      registerSet(0x68,0x05,0x09);        //设置开始为9月
      registerSet(0x68,0x06,0x12);        //设置开始为12年
}



void loop()

{
      bcdRtc();

        Serial.print( year,HEX);        //串口输出,不要问为什么是十六进制,其实设置为HEX,BIN,OCT都可以,只要不是空着就行,
                                        //如果空着,秒分时的计数就不是59跳变了,而是89.
                                        //原因是什么我也不知道,只知道这样可以正常显示

        Serial.print(".");

        Serial.print(month,HEX);

        Serial.print(".");

        Serial.print(date,HEX);

        Serial.print(".");

        Serial.print(week,HEX);

        Serial.print(".");

        Serial.print(hour,HEX);

        Serial.print(":");

        Serial.print(minitue,HEX);

        Serial.print(":");

        Serial.print(second,HEX);

        Serial.println();

}







void registerSet(int deviceAddress, int registerAddress, int registerValue)// 写寄存器

{

    Wire.beginTransmission(deviceAddress);

    Wire.write(registerAddress);

    Wire.write(registerValue);

    Wire.endTransmission();

}



void registerRead(int deviceAddress, int registerAddress) // 读寄存器

{
        int i;
    Wire.beginTransmission(deviceAddress);

    Wire.write(registerAddress);

    Wire.endTransmission();

    Wire.requestFrom(deviceAddress,7);

        if(Wire.available() <= 7);;

                {

                  for( i = 0 ; i < 7 ; i++)       

            rtc = Wire.read();
            

                }



        Wire.endTransmission();

       

}



void bcdRtc()

{       

       
       registerRead(0x68,0x00);

        year =rtc;                        //并不需要进行什么换算了,寄存器中的数据就是BCD格式,十秒位,秒位会自动更新

        month = rtc;

        date = rtc;

        hour = rtc;

        minitue = rtc;

        second = rtc;

        week = rtc ;



}
运行后的结果,以年月日星期时分秒的顺序显示

昨天研究了诺基亚的屏幕,今天又研究了1307,看来模块的差异很大,论坛上的教程有时候会起到误导作用,比如说今天的1307,如果使用到库,那么结果肯定是错误的,当然了,我也希望时我的模块问题。
贴一张模块和控制器的图片


Randy 发表于 2012-9-16 19:06:04

萧芸凤 发表于 2012-9-16 18:15 static/image/common/back.gif
下午研究了一下1307,看了半天的datasheet,才发现寄存器中本来就是BCD格式,不需要自己再进行转换了,所 ...

:lol:lol,模块有区别我们是必须有怀疑的,但是我们的笔记的库肯定是自己能工作了才贴出来了,不然肯定不会贴出来了的。呵呵。

萧芸凤 发表于 2012-9-16 19:21:10

Randy 发表于 2012-9-16 19:06 static/image/common/back.gif
,模块有区别我们是必须有怀疑的,但是我们的笔记的库肯定是自己能工作了才贴出来了,不然肯定不 ...

我也想吧我的代码做成库,可惜不会。以前是学过C,但没有学过C++,面向对象只学了VB。08年iphone火爆时学了objective-C,不是很厉害,就制作了一个复数计算器和一个矩阵计算器用来解微分方程,还是只能解奇次方称。
学校里学的是汇编,用的是89C52,毕业 后再也没用过了。

Randy 发表于 2012-9-16 19:58:16

萧芸凤 发表于 2012-9-16 19:21 static/image/common/back.gif
我也想吧我的代码做成库,可惜不会。以前是学过C,但没有学过C++,面向对象只学了VB。08年iphone火爆时 ...

写库,用的最多就是C++了,我也不会C++,遗憾啊。我毕业的时候和你差不多,89S52毕业的。现在好很多了。呵呵。一起学习!
页: 1 [2] 3 4
查看完整版本: arduino学习笔记38 - Arduino + DS1307 RTC时钟模块与经典总结