函数调用出现问题。

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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
ok0987
1楼-- · 2019-07-15 22:05
 精彩回答 2  元偷偷看……
Hugo801122
2楼-- · 2019-07-15 22:19
的确蛮奇怪,就是搬出来了而已。
ok0987
3楼-- · 2019-07-16 02:23
Hugo801122 发表于 2014-3-18 13:01
的确蛮奇怪,就是搬出来了而已。

最后我把调用的函数改成了这个:
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是我有重新定义的一个全局变量。这样改后,竟然运行成功了。。难道是函数调用全局数组的时候,数组值无法被改变吗?真是好奇怪。
发烧友之麒麟
4楼-- · 2019-07-16 03:47
的确奇怪,毫无头绪啊
馨雨
5楼-- · 2019-07-16 05:24
额额                                
ghtlcc
6楼-- · 2019-07-16 11:15
 精彩回答 2  元偷偷看……

一周热门 更多>