求助,关于定时器的问题

2020-02-03 10:08发布

本帖最后由 wjzhongshi 于 2012-10-6 20:23 编辑

搞了好几天了总是不行,高手帮我写一个定时器延时吧
具体情况是:两个按键控制三个led,按键一按一下LED1亮延时0.5秒后LED2亮延时0.5秒后LED2灭,LED1延时15秒后LED1灭,
按键二按一下LED1亮延时0.5秒后LED3亮延时0.5秒后LED3灭,LED1延时15秒后灭,在LED1亮的时候无论是按下按键一还
是按键二LED1延时要重新开始计算15秒后灭。
主要是重新开始计算这一块总是弄不好,高手帮一下吧

忘了单片机用的是stc12c2052ad 12M晶振。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
dzzxq
1楼-- · 2020-02-03 12:55
本帖最后由 dzzxq 于 2012-10-6 22:40 编辑

给个大致的思路
unsigned int TimerCount=0;
//设置好50ms定时器,关定时器
while(1)
{
    KeyScan();
    if(KeyValue==Key1)
   {
         TimerCount=0;
          Key1Flag=1;
          LED1_ON;
          LED2_OFF;
         TR0=1;
   }
   else if(KeyValue==Key2)
  {
        //同Key1,此处略
  }
}

定时器中断函数50ms
void intertupt timer0()
{
      timerCount++;
      if(Key1Flag)
     {
         if(timerCount>=10)//50*10ms  0.5秒后开LED2
       {
          LED2_ON;
        }
      else if(timerCount>=20)//50*20ms 1秒后关LED2
      {
          LED2_OFF;
      }
     else if(timerCount>=300)//15秒后关LED1
     {
         LED1_OFF;
        TR0=0;//关定时器
      }
     }
    if(Key2Flag)
{
//同Key1,此处略
}
}
yao1
2楼-- · 2020-02-03 13:07
本帖最后由 yao1 于 2012-10-10 12:05 编辑

加个标志位就OK了
按键1按下 标志flag1为1 直到运行状态1结束LED1熄灭后 标志位才清零
然后期间可这样判断  if((KEY1==0)&&(flag1==1)) time=0; // 标志位为1时 按键按下 LED1亮的时间清零

按键2同理 flag2=1........

按键按下要锁定状态。。
if((KEY1==0)&&(key1flag==0))         
{                                  
          if(key_time_1ms_ok)  //1ms
          {
                   key_time_1ms_ok=0;
                  key1_press_i++;

                  if(key1_press_i>50) //50ms
                  {
                           if(KEY1==0)
                           {   
                                      key1flag=1;
                                   key1count=1;//按键第一次按下 。。                                  
                           }
                  }                   
          }
}
else if(KEY1==1) { key1flag=0;key1_press_i=0; }
fiscinate
3楼-- · 2020-02-03 13:28
本帖最后由 fiscinate 于 2012-10-14 23:22 编辑

花了10几分钟写完



sakulaka
4楼-- · 2020-02-03 13:48
感觉使用最简单的有限状态机来解决会比较简单,因为所设计的逻辑并不难。关于定时器可能是没有及时更新计数器吧~

一周热门 更多>