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