本帖最后由 ok0987 于 2014-3-18 11:28 编辑
下面这个是我写的用来调用的程序
void add_
time(uchar ad,uchar b,uchar j)//ad-地址 b-数据 j-进位数
{
/*暂停ds1302*/
w_ds(0x8e,0x00);//关闭写保护
w_ds(0x80,0x80);//暂停,启停位在‘秒’的地址里的最高位
ds_r_ct(ad,b);//将这一刻的时间放入b
b++;//加法
/*进位判断*/
if(b==j)
{
b=0;
}
dis_c(s_h,s_li-1,one[b/10]);//随时刷新显示
dis_c(s_h,s_li,one[b%10]);//随时刷新显示
xswzhi(s_h,s_li);//光标依旧在这闪着
ds_w_ct(ad,b);//改变后,写入。
}
而我在主函数里用这个按键调用
if(jishu==2)
{
switch(s_h+s_li)
{
case 4: add_time(0x84,time_buf[4],24); break;//时
case 5: break;//年
case 10: break;//分
case 11: break;//月
case 16: break;//秒
case 17: break;//日
}
}
可是按下键后数值至少改变了一次。就怎么也不变了。然后我就检测看看哪里有问题。最后发现,如果改为如下形式就可以正常了。
void add_time(uchar ad,uchar b,uchar j)//ad-地址 b-数据 j-进位数
{
/*暂停ds1302*/
// w_ds(0x8e,0x00);//关闭写保护
// w_ds(0x80,0x80);//暂停,启停位在‘秒’的地址里的最高位
// ds_r_ct(ad,b);//将这一刻的时间放入b
// b++;//加法
/*进位判断*/
if(b==j)
{
b=0;
}
dis_c(s_h,s_li-1,one[b/10]);//随时刷新显示
dis_c(s_h,s_li,one[b%10]);//随时刷新显示
xswzhi(s_h,s_li);//光标依旧在这闪着
ds_w_ct(ad,b);//改变后,写入。
}
调用改为
if(jishu==2)
{
switch(s_h+s_li)
{
case 4:
w_ds(0x8e,0x00);//关闭写保护
w_ds(0x80,0x80);//暂停,启停位在‘秒’的地址里的最高位
ds_r_ct(0x84,time_buf[4]);//将这一刻的时间放入
time_buf[4]++;//加法
add_time(0x84,time_buf[4],24);
break;//时
case 5: break;//年
case 10: break;//分
case 11: break;//月
case 16: break;//秒
case 17: break;//日
}
}
然后我就疑惑了,这个数组难道不能在调用的函数里做加减吗?很奇怪?只要把time_buf[4]++;放在case中就正常,而放在调用函数add_time()里就不正常,还请大家帮忙分析下。
最后我把调用的函数改成了这个:
void add_time(uchar ad,uchar j)//ad-地 j-进位数
/*暂停ds1302*/
w_ds(0x8e,0x00);//关闭写保护
w_ds(0x80,0x80);//暂停,启停位在‘秒’的地址里的最高位
ds_r_ct(ad,uff);//将这一刻的时间放入b
//加法
uff++;
/*进位判断*/
if(uff==j)
{
uff=0;
}
dis_c(s_h,s_li-1,one[uff/10]);//随时刷新显示
dis_c(s_h,s_li,one[uff%10]);//随时刷新显示
xswzhi(s_h,s_li);//光标依旧在这闪着
ds_w_ct(ad,uff);//改变后,写入。
}
这个uff是我有重新定义的一个全局变量。这样改后,竟然运行成功了。。难道是函数调用全局数组的时候,数组值无法被改变吗?真是好奇怪。
一周热门 更多>