本帖最后由 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);
}
}
} |