函数调用出现问题。

2019-07-15 20:34发布

本帖最后由 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()里就不正常,还请大家帮忙分析下。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。