OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3220|回复: 2

程序延时为什么有时候准有时候不准用示波器看

[复制链接]

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
发表于 2015-6-17 13:02:17 | 显示全部楼层 |阅读模式
5金钱

#include "stm32f10x.h"
#include "delay.h"
#include "io.h"
#include "sys.h"

void key_init(void)
{
 
   u16 num,GPIOA_date,i;
   GPIOA_date =GPIO_ReadInputData(GPIOA);
    num=GPIOA_date & 0x001f;
switch(num)
{
case 0:{
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
   delay_ms(1000);
  delay_ms(1000);
 
 
  
   }
 break; 
 
 
 
case 1:
 {
         for(i=0;i<4;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
   delay_ms(1000);
  delay_ms(1000);
 
  
  
  
  
   }break; 
 case 2:
 {
     for(i=0;i<8;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
    delay_ms(1000);
  delay_ms(1000);

}break; 
  
  case 3:
 {
 for(i=0;i<12;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
    delay_ms(1000);
  delay_ms(1000);

   

  
  
  
}break; 
 case 4:{

 for(i=0;i<16;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
   delay_ms(1000);
  delay_ms(1000);


}break; 
  
 case 5:{

 for(i=0;i<20;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 

}break; 
  
 case 6:{

 for(i=0;i<24;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000) ;  
  
   
}break; 
  
  case 7:{

 for(i=0;i<30;i++ )
       {
          delay_ms(1000);

         }   
  Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 
}break; 
  
 case 8:{

 for(i=0;i<34;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 
}break; 
  
 case 9:{

 for(i=0;i<38;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 
}break; 
  
 case 10:{

 for(i=0;i<42;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 

}break; 
  
  case 11:{
 for(i=0;i<47;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 

}break; 
  
 case 12:{
 for(i=0;i<50;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 


}break; 
  
 case 13:{

 for(i=0;i<54;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 

}break; 
  
 case 14:{

 for(i=0;i<58;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 

}break; 
  
  case 15:{

 for(i=0;i<62;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
  
   

}break; 
 case 16:{

 for(i=0;i<66;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
   
   
}break; 
 case 17:{

 for(i=0;i<70;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 

}break; 
 case 18:{

 for(i=0;i<74;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 

}break; 
  case 19:{
 for(i=0;i<78;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 


}break; 
 case 20:{


 for(i=0;i<82;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 
}break; 
 case 21:{

 for(i=0;i<86;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
  
   
}break; 
 case 22:{
 for(i=0;i<90;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 

 

}break; 
  case 23:{

 for(i=0;i<94;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 

 

}break; 
 case 24:{

 for(i=0;i<98;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
  
   

}break; 
 case 25:{

 for(i=0;i<102;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 
}break; 
 case 26:{

 for(i=0;i<106;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 


}break; 
  case 27:{

 for(i=0;i<110;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000); 
 


}break; 
 case 28:{

 for(i=0;i<114;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);
 

 

}break;  
 case 29:{

 for(i=0;i<118;i++ )
       {
          delay_ms(1000);

         }   
   Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
 
   


}break; 
 case 30:{

 for(i=0;i<122;i++ )
       {
          delay_ms(1000);

         }   
    Txd_signal = 0;
   delay_ms(1000);
  delay_ms(1000);  
   Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);  
  
   


}break;
 
 
  

}

 


}
程序大概情况是外部上升沿中断,STM32 识别键码值 进入相应的延时函数在CASE 2处为什么有时候是4秒有时候是5秒,别的也有不准的

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-6-17 13:50:54 | 显示全部楼层
先別說幾秒的問題 你的程式寫法好酷

u16 m = 0;
for(m=0;m<num;m++)
{
  for(i=0;i<4;i++ )
  {
     delay_ms(1000);
  }
}
  Txd_signal = 0;
  delay_ms(1000);
  delay_ms(1000);  
  Txd_signal = 1;
  delay_ms(1000);
  delay_ms(1000);>
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-6-18 07:39:06 | 显示全部楼层
回复【2楼】Rocks:
-------------------------------
我没这么写啊哪有FOR循环套FOR循环了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 04:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表