关于电机的控制!如何延时停止!

2019-07-16 03:10发布

本帖最后由 田雨软件客服 于 2012-12-15 17:12 编辑

/*预处理命令*/
#include<reg52.h>    //包含单片机寄存器的头文件

#define uchar unsigned char
#define uint unsigned int
/* 函数申明 -----------------------------------------------*/
void delay(uint z);
void gundong();
/* 变量定义 -----------------------------------------------*/
sbit relay=P0^1;  //定义P0^1位为电机1的控制位
sbit relay2=P0^0;//定义P0^0位为电机2的控制位
sbit hongwai=P3^0; //定义红外接口
sbit k1=P1^1;    //定义按键1
sbit k2=P1^2;
sbit D2=P1^0;    //定义红外感应指示灯
/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
void main(void)
{
  relay=1;
relay2=0;

while(1)
   {
      gundong();
   }
}
/*
********************************************************************************
** 函数名称 : delay(uint z)
** 函数功能 : 延时函数
********************************************************************************
*/

void delay(uint z) //-----------------主延时函数1毫秒
{
uint x,y;
for(x=z;x>0;x--)
  for(y=100;y>0;y--);
  }
  
void gundong()
{
  
      
  if (hongwai==1 )
    {
      relay=1;
     D2=1;
    relay2=0;
  
  }     //未感应到红外开启旋转电机
  
  if (hongwai==0 ) //感应到红外后电机关闭
     {
    relay=0;
   D2=0;
   relay2=1;
   delay(2000);
   relay2=0;
   }
   }

当感应到红外后 电机1停止,电机2开启 2秒后电机2停止,
但是这个程序当电机2开启后延时2秒后并没有停止而是电机2一直在转!怎么办?




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
方案设计
2019-07-16 04:44
问题出在这里:
   relay=0;
   D2=0;
   relay2=1;
   delay(2000);
   relay2=0;
当感应到红外后,电机1转-->电机2转-->延时2秒-->电机2停(这里只停了几个机器周期,人眼看不到) ......当下一次测周期到来时重新开始  电机1转-->电机2转-->延时2秒-->电机2停
当检测到红外时,电机2的运行规律是:运行2秒钟,停几个机器周期(约为几微秒),运行2秒钟,停几个机器周期(约为几微秒)...... 因为停的时间太短,人看不到。

一周热门 更多>