打印
[51单片机]

ds1302时钟芯片的问题

[复制链接]
1530|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
buzaiyouyv|  楼主 | 2014-4-29 08:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 buzaiyouyv 于 2014-4-29 08:51 编辑

最近参加比赛,用了时钟芯片,但是时间调节一直很烦,有时候能用,再添加别的模块,就又不能用了,特别是按键按下暂停时,那个地方的去除写保护很烦,写进去没用,不写反而有用。下面的程序的问题是按下能暂停,但是就是不能调节,不知道为什么?求大神
void clockadjust()  //调节设置
{
        if(key==0)                //如果按键按下,时钟状态取反
        {
                delay_ds1302(5);
                if(key==0)
                {
                        flag++;
                        dat=read_ds1302(read_sec);        //读取秒寄存器的数据
                        while(!key);        
                }
        }        
        if(flag==1||flag==2||flag==3||flag==4||flag==5||flag==6||flag==7) //停止时钟
        {        
                write_ds1302(0x8e,0);        //去除写保护,如果去除这里的话,按键按下时走得很快
                write_ds1302(write_sec,dat|0x80);  
    write_ds1302(0x8e,0x80);        //加写保护        
        }        
        if(flag==1)                   //秒调节
        {
                tt.sec=read_ds1302(read_sec);
                tt.sec=(tt.sec&0x7f)/16*10+tt.sec%16;
                if(add==0)            //按键,加一     
                {
                        delay_ds1302(5);
                        if(add==0)
                        {
                                tt.sec++;
                                if(tt.sec==60)
                                        tt.sec=0;
                                tt.sec=tt.sec/10*16+tt.sec%10;
                                write_ds1302(0x8e,0);        //去除写保护
                                write_ds1302(write_sec,tt.sec|0x80);
                                write_ds1302(0x8e,0x80);        //加写保护
                                while(!add);
                        }
                }
                if(sub==0) //按键,减一
                {
                        delay_ds1302(5);
                        if(sub==0)
                        {
                                --tt.sec;
                                if(tt.sec==-1)
                                        tt.sec=59;
                                tt.sec=tt.sec/10*16+tt.sec%10;
                                write_ds1302(0x8e,0);        //去除写保护
                                write_ds1302(write_sec,tt.sec);
                                write_ds1302(0x8e,0x80);        //加写保护
                                while(!sub);
                        }
               
                }
        }

相关帖子

沙发
ningling_21| | 2014-4-29 08:33 | 只看该作者
这里的标志好多...

使用特权

评论回复
板凳
buzaiyouyv|  楼主 | 2014-4-29 08:50 | 只看该作者
ningling_21 发表于 2014-4-29 08:33
这里的标志好多...

标志分别是设置秒,分,时,这些东西的,可以忽略,呵呵,麻烦帮我瞄瞄,我这一直找不到问题啊,快交作品了,求指教

使用特权

评论回复
地板
天风立马| | 2014-4-29 08:54 | 只看该作者
main函数呢?不知道这些个函数怎么调用的,没法分析只能瞎猜。我不明白为什么用时钟芯片还用延时消抖这种自欺欺人的方法。

使用特权

评论回复
5
ningling_21| | 2014-4-29 11:58 | 只看该作者
buzaiyouyv 发表于 2014-4-29 08:50
标志分别是设置秒,分,时,这些东西的,可以忽略,呵呵,麻烦帮我瞄瞄,我这一直找不到问题啊,快交作品 ...

不是设置一个写一个吧,是设置完成,统一一次写进去,再加写保护的...

使用特权

评论回复
6
inori| | 2014-4-29 16:21 | 只看该作者
if(add==0)
                        {
                                tt.sec++;
                                if(tt.sec==60)
                                        tt.sec=0;
                                tt.sec=tt.sec/10*16+tt.sec%10;
                                write_ds1302(0x8e,0);        //去除写保护
                                write_ds1302(write_sec,tt.sec|0x80);
                                write_ds1302(0x8e,0x80);        //加写保护
                                while(!add);
                        }
你这句把时钟停了,后面有没有打开,时钟怎么会走啊,还有就是建议像楼上所说,应该调整好以后统一写进去比较好

使用特权

评论回复
7
yewuyi| | 2014-4-29 16:24 | 只看该作者
很烦,怎么办?

1、更耐心一点,再认真看看资料。
2、放弃比赛

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝