EDA365电子工程师网

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

作者: wfbisheng    时间: 2014-4-29 16:18
标题: ds1302时钟芯片的问题
最近参加比赛,用了时钟芯片,但是时间调节一直很烦,有时候能用,再添加别的模块,就又不能用了,特别是按键按下暂停时,那个地方的去除写保护很烦,写进去没用,不写反而有用。下面的程序的问题是按下能暂停,但是就是不能调节,不知道为什么?求大神
; \$ l- U! ]0 L8 s- U3 cvoid clockadjust()  //调节设置
8 a' I! t& D  [( m& k1 T3 }# B0 [{, z5 ^7 d% d, t3 u" R
        if(key==0)                //如果按键按下,时钟状态取反  }7 K$ Z/ b) G( x1 A
        {
/ O1 R$ L6 t2 j9 y3 _4 t                delay_ds1302(5);* X* n( B9 g9 Q6 R9 g7 P
                if(key==0)# G! }$ X& t' H3 |" @
                {
$ Y$ W. q% k0 G6 _0 O                        flag++;
6 U; r4 w  o6 A4 n& o                        dat=read_ds1302(read_sec);        //读取秒寄存器的数据
5 M/ m7 P+ W2 o- w3 J                        while(!key);        
0 j% D# Y6 \# H8 I. {$ O. H                }
/ ~; X* d% @3 A3 [        }        " ]/ B* ]8 p- W' Y
        if(flag==1||flag==2||flag==3||flag==4||flag==5||flag==6||flag==7) //停止时钟% x9 P& H6 a6 e7 B* d% {9 x
        {        
$ N' A% c3 s. V                write_ds1302(0x8e,0);        //去除写保护,如果去除这里的话,按键按下时走得很快
# l1 C% M, m* r3 c, e0 X, Q* c                write_ds1302(write_sec,dat|0x80);  6 v" K! A2 X8 Q* ^8 {
    write_ds1302(0x8e,0x80);        //加写保护        
& t; o, S7 ?( [  k" b        }        
' i1 I+ c" k1 Z3 d        if(flag==1)                   //秒调节
/ c; o4 m, U6 k! Z        {; y! ]$ D9 b& N8 B5 v9 u
                tt.sec=read_ds1302(read_sec);
2 C( u4 G' w# {" J, z                tt.sec=(tt.sec&0x7f)/16*10+tt.sec%16;/ Z( p% M0 {& X2 [
                if(add==0)            //按键,加一     % W9 `  r4 L1 U/ ]: ~
                {
0 _0 H2 R/ w8 O4 y. @% l" L$ o                        delay_ds1302(5);5 T6 j9 x9 P. W  _8 L
                        if(add==0)# ?6 n/ t$ C4 O' m. R
                        {
: \( R+ ]* J  `; l: j7 o! \                                tt.sec++;! w7 X3 ^6 u" \- ^; @
                                if(tt.sec==60)* `' ^9 S% C/ a% v& l
                                        tt.sec=0;* d& h) Q7 y  i7 m
                                tt.sec=tt.sec/10*16+tt.sec%10;- Q0 k, w# ?# E
                                write_ds1302(0x8e,0);        //去除写保护
$ P5 z' ]  M- I                                write_ds1302(write_sec,tt.sec|0x80);3 ~& S. n0 q: Y
                                write_ds1302(0x8e,0x80);        //加写保护0 t7 [4 ]* O& H& B- A
                                while(!add);- F2 i7 Y9 t' u( l+ P; w; D+ O
                        }
, K6 |# K+ t; L                }
+ E) k& v2 ^" y' m5 z                if(sub==0) //按键,减一
4 }/ {# d1 \  M  @- i                {
5 Z2 w) L5 I4 b: J5 e, Z( e                        delay_ds1302(5);6 g% }! m1 l+ J
                        if(sub==0)7 F  w2 Z5 i9 k
                        {
; Q) v# t4 ~$ ^- n+ H/ m1 Z                                --tt.sec;9 q; ~2 T+ R' x% s' Y$ A, L
                                if(tt.sec==-1)2 O' b' w* k$ O# a0 l" r0 d- A
                                        tt.sec=59;. `! S& M. o! u2 `
                                tt.sec=tt.sec/10*16+tt.sec%10;7 r9 W0 B0 ~& G* y; e
                                write_ds1302(0x8e,0);        //去除写保护
& k. c( P- s" m) g5 k                                write_ds1302(write_sec,tt.sec);
7 t" t! R3 Z" X9 R8 s2 o7 Z2 q9 r                                write_ds1302(0x8e,0x80);        //加写保护
' j: W0 ^2 r8 X# T                                while(!sub);
2 P) K, `) E& Y# D8 c                        }
& T# O5 W/ v& a: |4 z6 w* O5 }+ \, Y( v                ' L* k, o, M, |" x! t
                }. W+ k( N; C& p, r! A0 c
        }




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