EDA365电子工程师网

标题: ds1302时钟芯片的问题 [打印本页]

作者: wfbisheng    时间: 2014-4-29 16:18
标题: ds1302时钟芯片的问题
最近参加比赛,用了时钟芯片,但是时间调节一直很烦,有时候能用,再添加别的模块,就又不能用了,特别是按键按下暂停时,那个地方的去除写保护很烦,写进去没用,不写反而有用。下面的程序的问题是按下能暂停,但是就是不能调节,不知道为什么?求大神/ l2 N2 q1 f* t6 c* d" H& |( P
void clockadjust()  //调节设置8 w* A; {! M' Q; L$ C5 ]
{
6 d! \& ?1 ^9 N        if(key==0)                //如果按键按下,时钟状态取反
% U% e# }  N+ Q7 j# k) q$ `        {" l' s/ h1 n  O9 [" c; A
                delay_ds1302(5);
4 M: U7 u$ W( R  z/ G, f                if(key==0)# k; F/ q" y1 b
                {
  g/ Z% }  D& m) E) d( r% i                        flag++;
# R1 c/ `: S5 Y( i1 T8 d                        dat=read_ds1302(read_sec);        //读取秒寄存器的数据
6 D' X9 Q5 R# K                        while(!key);        
, _- M2 e/ S" V                }
% R# W8 N- ~+ b5 Q        }        5 l& N! w: q5 I% R  e3 B* z
        if(flag==1||flag==2||flag==3||flag==4||flag==5||flag==6||flag==7) //停止时钟
: t& P/ |- q4 b$ B) z0 L; E0 a4 [        {        * N. H- @* Y/ h+ ~& Q
                write_ds1302(0x8e,0);        //去除写保护,如果去除这里的话,按键按下时走得很快
* M7 P, I5 {3 Y5 P0 k: U; J; z                write_ds1302(write_sec,dat|0x80);  
. {9 P  c& z. O: }    write_ds1302(0x8e,0x80);        //加写保护        * v; \: _6 s0 t/ d, M
        }        5 d$ D9 J+ T& H9 @  j% g( w3 j
        if(flag==1)                   //秒调节
, k+ n2 f2 `# d5 V3 i& c9 r        {
- n: X+ u9 U0 ]" H4 M, m5 x7 q/ W                tt.sec=read_ds1302(read_sec);; {) H! P8 Y. q: D; Z- H
                tt.sec=(tt.sec&0x7f)/16*10+tt.sec%16;
2 ]" j% Z* \& W5 \& \                if(add==0)            //按键,加一     
/ m+ i% T- Z# |% n                {
5 |" c1 _' Z+ W  ^+ t( z- `& G. {                        delay_ds1302(5);
8 T, y+ J* b! k                        if(add==0)$ L" _# g1 a- x
                        {1 S0 L2 s* v/ R7 |# D/ ^2 G6 K
                                tt.sec++;" ~, O0 V4 \/ W  k" q
                                if(tt.sec==60)/ T( g$ \. p! J0 v* p& ^0 X; k8 M
                                        tt.sec=0;5 G: \% W( u/ M& a& r# i
                                tt.sec=tt.sec/10*16+tt.sec%10;
! }. T) S$ u* V                                write_ds1302(0x8e,0);        //去除写保护
' k! a" [- f$ ]6 G( E6 }7 H9 o                                write_ds1302(write_sec,tt.sec|0x80);; c# f# f5 f' ~9 k; z% l' E
                                write_ds1302(0x8e,0x80);        //加写保护
8 q# d6 P" |. _; z  m3 u7 F                                while(!add);
) Z! K9 k) ]* ]; A- a$ t$ E                        }  G( A  I& q2 y" b+ H
                }! i' c# A, A& W6 d) t  L
                if(sub==0) //按键,减一. Z" ?9 B8 v9 p
                {
* }! M. N8 |/ h2 {, L                        delay_ds1302(5);
) @. X+ G+ t4 F                        if(sub==0)" P% N8 {% H' {& j# g8 m
                        {6 k8 W9 Z( O2 R% U
                                --tt.sec;
+ ?+ l: U, d# Q' k- m- t                                if(tt.sec==-1)6 ?$ Q' c- ?+ ?7 x' i9 o0 u( ^1 l
                                        tt.sec=59;
" q: O. W6 M2 B6 \" O* l+ r                                tt.sec=tt.sec/10*16+tt.sec%10;
- \# }  a0 B8 X- q: Y. Y8 p                                write_ds1302(0x8e,0);        //去除写保护
  t! O. D, f1 k' w; b                                write_ds1302(write_sec,tt.sec);
+ G, x2 m: o- m! K6 ?% y                                write_ds1302(0x8e,0x80);        //加写保护3 N0 Y. h. |+ D" Q8 U7 ~7 i3 \8 |
                                while(!sub);
; |- R( N7 ~# k3 @' q                        }
) E' C& B# |1 }7 e: {0 T% l( Q               
( w' M5 y! m* u8 ~                }
" {5 X2 s# g3 F* W2 v        }




欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2