微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 函数调用出现问题。

函数调用出现问题。

时间:10-02 整理:3721RD 点击:

下面这个是我写的用来调用的程序
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是我有重新定义的一个全局变量。这样改后,竟然运行成功了。难道是函数调用全局数组的时候,数组值无法被改变吗?真是好奇怪。

的确奇怪,毫无头绪啊

额额                                

的确蛮奇怪,就是搬出来了而已。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top