单片机/MCUwilliam hill官网
直播中

buhuile

11年用户 221经验值
擅长:EMC/EMI设计
私信 关注
[问答]

DS1302怎么设置多组闹钟

DS1302怎么设置多组闹
谁做过用DS1302做闹钟,可以设置多个闹铃。
我这样做行不行,请指导一下:
if(s5==0&&s1num==0)
   {   
        s5num++;
        flag2=1;
        while(!s5);baojing();
        if(s5num==1)
          {                                                                                            write_com(0x80+13);
                    write_com(0x0f);//光标
        }
       if(s5num==2)
       {
                write_1302(0x8e,0x00);//禁止写保护,第一组闹铃分钟
                write_1302(0xc2,lfen);//闹钟初始化
                 write_1302(0x8e,0x80);//开写保护
                write_com(0x80+10);
       }
        if(s5num==3)
        {                                                                                                  
        write_1302(0x8e,0x00);//禁止写保护
       write_1302(0xc0,lshi);//闹钟初始化
        write_1302(0x8e,0x80);//开写保护
         write_com(0xc0+2);                                                
       }
        if(s5num==4)
        {                                                
        write_1302(0x8e,0x00);//禁止写保护,第二组闹铃
        write_1302(0xc4,eshi);//闹钟初始化
        write_1302(0x8e,0x80);//开写保护
        write_com(0xc0+5);                                                
        }
if(s5num==5)
        {
                write_1302(0x8e,0x00);//禁止写保护
                write_1302(0xc6,efen);//闹钟初始化
        write_1302(0x8e,0x80);//开写保护
        write_com(0xc0+7);
        }
if(s5num==6)
{
                write_1302(0x8e,0x00);//禁止写保护
        write_1302(0xc8,sshi);//闹钟初始化
        write_1302(0x8e,0x80);//开写保护
        write_com(0xc0+10);                                                
       }
        if(s5num==7)
                {                                          
                write_1302(0x8e,0x00);//禁止写保护
                 write_1302(0xca,sfen);//闹钟初始化
                write_1302(0x8e,0x80);//开写保护
                write_com(0xc0+12);
                }
        if(s5num==8)
        {
                write_1302(0x8e,0x00);//禁止写保护
        write_1302(0xcc,sishi);//闹钟初始化
      write_1302(0x8e,0x80);//开写保护                                                
                write_com(0xc0+15);
        }
if(s5num==9)
        {
                s5num=0;
        flag2=0;                                                
        write_1302(0x8e,0x00);//禁止写保护
        write_1302(0xce,sifen);//闹钟初始化
        write_1302(0x8e,0x80);//开写保护
        write_com(0x0c);//不显示光标
                                        }
                          }
                }
        /***********************以下是加减*************************/
                        if(s5num!=0&&s1num==0)
                        {
                                if(s2==0)
                                {
                                        delay(5);
                                        if(s2==0)
                                        {   
                                                while(!s2);baojing();
                                                if(s5num==1)
                                                {                                                
                                                        uchar *fff1=&lfen;
                                                        fenjia(fff1,12,0x80+13);
                            }
                                                if(s5num==2)
                                                {
                                                        uchar *sss1=&lshi;
                                                        shijia(sss1,9,0x80+10);
                                                }
                                                if(s5num==4)
                                                {                                                
                                                        uchar *sss2=&eshi;
                                                        shijia(sss2,1,0xc0+2);                                                        
                            }
                                                if(s5num==4)
                                                {
                                                        uchar *fff2=&efen;
                                                        fenjia(fff2,4,0xc0+5);
                                                }
                                                if(s5num==5)
                                                {                                                
                                                        uchar *sss1=&sshi;
                                                        shijia(sss1,9,0xc0+10);                                                        
                            }
                                                if(s5num==6)
                                                {
                                                        uchar *fff1=&sfen;
                                                        fenjia(fff1,12,0xc0+13);
                                                }
                                                if(s5num==7)
                                                {                                                
                                                        uchar *sss1=&sishi;
                                                        shijia(sss1,9,0xc0+10);                                                        
                            }
                                                if(s5num==8)
                                                {
                                                        uchar *fff1=&sifen;
                                                        fenjia(fff1,12,0xc0+13);
                                                }
                         }
                                }

回帖(8)

发烧友之麒麟

2014-4-22 17:33:48
这个没做过,但可以研究一下           
举报

z00

2014-4-23 13:17:03
楼主可参考一下:
51单片机驱动T6963(240128)的时钟程序 带五路闹钟 DS1302
http://www.pudn.com/downloads387/sourcecode/embedded/detail1661447.html
举报

陈锐文

2014-4-24 10:07:37
看过楼主的其他帖子。不知道楼主要实现什么样的功能?看楼主的程序好像是想吧闹钟保持在DS1302RAM里面。我刚才上网查了一下。发觉DS1302的功能还是比较单一的。DS1302的RAM只能是简单的临时性存放数据的RAM。他不像PCF8563有可编程时钟输出、定时器、报警器等功能。也没有分钟报警、小时报警、日报警寄存器。
举报

宋喜良

2014-4-25 21:44:58
报警编程的大概思路是正确的,只是程序要调整1下。1:初始化ds1302。2: 把报警数据从ds1302的RAM里读到内存里。3: 把内存的数据和当前时间比较,确定是否报警。报警调整---------    将按键调好的报警值写入ds1302的RAM里。很简单的
举报

宋喜良

2014-4-25 21:49:29
最好是pcf8563,他的功能比ds1302要多,而且8563有可编程io,单片机的程序好实现些。
举报

youzizhile

2014-4-26 17:02:12
可以设置多组闹钟的,就是随时读取ds1302的数值,然后和要进行设置的闹钟比较,若满足条件进行报警,不需要多次写ds1302.
举报

2016-12-28 14:14:49
引用: 发烧友之麒麟 发表于 2014-4-22 17:33
这个没做过,但可以研究一下

不是吧,
举报

zhnjun63

2017-4-23 09:47:28
LZ啊,您的代码,缺少必要的注释,理解起来很困难的
举报

更多回帖

发帖
×
20
完善资料,
赚取积分