当前位置: 代码迷 >> 单片机 >> 单片机使用内部中断计算时间的有关问题…
  详细解决方案

单片机使用内部中断计算时间的有关问题…

热度:92   发布时间:2016-04-28 15:50:57.0
单片机使用内部中断计算时间的问题……
我用clock[3]记录由中断信号计算而来的时分秒 初值为{0,0,0}

我将显示时间的功能放在一个函数中
C/C++ code
void clock3(){    uint temp1[6];    uint i;        while(1)//内部无限循环    {        temp1[0]=clock[0]/10;//分别记录数码管每位显示的数字        temp1[1]=clock[0]%10;        temp1[2]=clock[1]/10;        temp1[3]=clock[1]%10;        temp1[4]=clock[2]/10;        temp1[5]=clock[2]%10;                    for(i=0;i<6;i++)//将数字显示在数码管上        {            wela=1;            P0=weixuan[i];            wela=0;            P0=0xff;            dula=1;            P0=table[temp1[i]];            dula=0;            delay(20);//稳定在20ms-10ms数码管显示的比较清晰            //delay(800);←调试用的  可以无视        }        if(b2==0) { yanchi10ms(); if(b2==0) { dula=1; P0=0; dula=0; break; } }//如果按下B2键就返回主菜单    }}


下面是主函数main相关命令
C/C++ code
loopmain:        while(1)        {            if(b1==0) { yanchi10ms(); if(b1==0) goto loop1;}//显示时间            if(b2==0) { yanchi10ms(); if(b2==0) goto loop2;}//数字测试        }    loop1:                clock3();        goto loopmain;//当从显示时间函数中退出就返回loopmain 重新选择功能



现在的问题就在于在函数中按下B2键可以返回主菜单 但是clock[3]被清零 再次进入clock3()函数又会从0开始计时 这让我很疑惑啊

求各位大神指点

------解决方案--------------------
没有看到clock[3]赋值的语句
------解决方案--------------------
我的猜想是这样的

你没有加按键延时,你在函数clock3()该循环中,按B2,意图跳出clock3()。

但事实上,程序在跳出clock3()的同时,又进入了loop2,而loop2又对其clock[3]这个数组进行了初始化!
  相关解决方案