EDA365电子工程师网
标题:
ds1302时钟芯片的问题
[打印本页]
作者:
wfbisheng
时间:
2014-4-29 16:18
标题:
ds1302时钟芯片的问题
最近参加比赛,用了时钟芯片,但是时间调节一直很烦,有时候能用,再添加别的模块,就又不能用了,特别是按键按下暂停时,那个地方的去除写保护很烦,写进去没用,不写反而有用。下面的程序的问题是按下能暂停,但是就是不能调节,不知道为什么?求大神
; \$ l- U! ]0 L8 s- U3 c
void 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