请问DS1302的按键调整/设定时钟程序怎么做?说下方案,步骤或程序都行。
我做的时钟就是不能调整时间。本来程序里是让时钟停止了,显示也是停止的,但等退出调整状态时,显示它其实一直在走(中间并没有停止:比如显示停在5秒时,大概10秒后等我退出调整状态,它已经走到15秒了。)。
不知道哪里出问题了?请高手帮忙看看
/*************************时间调整,目前只调整秒***********/
void adj_time()
{
if(adj==0)
{
delayMS(5);
if(adj==0)
{
while(adj==0);
flag++;
if(flag==2)
flag=0;
tempBCD=rd_1302(0x81);
Chalt=tempBCD|0x80;
wr_1302(0x8e,0x00);//写允许
wr_1302(0x80,Chalt);//时钟停止
wr_1302(0x8e,0x80);//写保护
}
}
if(flag==0)
{
Cstart=rd_1302(0x81)&0x7f;
wr_1302(0x8e,0x00);//写允许
wr_1302(0x80,Cstart);//时钟启动
wr_1302(0x8e,0x80);//写保护
dis1602_1302();//读取1302中时间并显示在1602上
}
if(flag==1)
{
wr_comd1602(0x80+0x40+8);
wr_comd1602(0x0f);
tempbinary=((tempBCD&0x70)>>4)*10+(tempBCD&0X0F);
if(inc==0)
{
delayMS(5);
if(inc==0)
{
tempbinary++;
if(tempbinary==60)
tempbinary=0;
while(inc==0);
dis_tim1602(0x40+7,tempbinary);
wr_1302(0x80,((tempbinary/10)<<4)+(tempbinary%10));
}
}
}
}
/************************主函数********************/
void main()
{
init();
while(1)
{
adj_time();
}
} |