本帖最后由 田雨软件客服 于 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一直在转!怎么办?
relay=0;
D2=0;
relay2=1;
delay(2000);
relay2=0;
当感应到红外后,电机1转-->电机2转-->延时2秒-->电机2停(这里只停了几个机器周期,人眼看不到) ......当下一次测周期到来时重新开始 电机1转-->电机2转-->延时2秒-->电机2停
当检测到红外时,电机2的运行规律是:运行2秒钟,停几个机器周期(约为几微秒),运行2秒钟,停几个机器周期(约为几微秒)...... 因为停的时间太短,人看不到。
一周热门 更多>