⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 download.c

📁 51写的单片机控制松下伺服电机正反转程序
💻 C
字号:
//***************************************************************************
//
//  文 件 名: download.c
//
//  作    者: 张飞
//
//  目标对象: AT89S52
//
//  编 译 器: ISP
//
//  功能描述: 下料部单独控制程序
//
//  修改版本: 0.0
//
//  创建日期:2009-03-09
//
//***************************************************************************

#include <reg52.h>
#include<absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

//***************************************************************************

sbit 	DOWNLOAD_HS30806_Y_PULSE1		=	P1^0;//HS30806_Y电机脉冲-
sbit 	DOWNLOAD_HS30806_Y_DIR		=	P1^1;//HS30806_Y电机方向-
sbit 	DOWNLOAD_HS30806_X_PULSE1		=	P1^2;//HS30806_X电机脉冲-
sbit 	DOWNLOAD_HS30806_X_DIR		=	P1^3;//HS30806_X电机方向-
sbit 	SERVO_PULSE1		=	P3^0;//伺服电机脉冲-
sbit 	SERVO_DIR		=	P3^3;//伺服电机方向-
sbit	SERVO_ON	=	P3^2;//伺服ON使能
sbit  	QIGANG=P3^1;
sbit 	SERVO_POINT=P2^0;
sbit 	Y_POINT=P2^1;
sbit	S2 = P3^2;
sbit	S3 = P3^3;
sbit	S4 = P3^4;
sbit	S5 = P3^5;

//****************************************************************************

//延时1us

//****************************************************************************

 void mDelay(uchar DelayTime1)
{	
		uchar i=0;
		for(;DelayTime1>0;DelayTime1--)
		{	
			for(i=0;i<0x16;i++)
				{
				
				}
		}
}
//具体延时时间=DelayTime1*[10+3*m]+10个指令周期
/* void mDelay(uint DelayTime1)
{	
	for(;DelayTime1>0;DelayTime1--)
		{	
			
		}
}
*/
void Delay()
{
	
	;
;

}
//***************************************************************************

//下料部Y右转程序

//***************************************************************************

void RIGHT_MOVE_DOWNLOAD_HS30806_Y(uint Pluse1_num)
{	
		
	DOWNLOAD_HS30806_Y_DIR=1;
	DOWNLOAD_HS30806_Y_PULSE1	=	1;//脉冲负
	
	mDelay(20);		
	for(;Pluse1_num>0;Pluse1_num--)
	{
		DOWNLOAD_HS30806_Y_PULSE1	=	~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负
		mDelay(20);	
		DOWNLOAD_HS30806_Y_PULSE1	=	~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负
		mDelay(20);	
	}
}   

//***************************************************************************

//下料部Y左转程序

//***************************************************************************

void LEFT_MOVE_DOWNLOAD_HS30806_Y(uint Pluse2_num)
{	
		DOWNLOAD_HS30806_Y_DIR=0;
		DOWNLOAD_HS30806_Y_PULSE1	=	1;//脉冲负
		mDelay(20);		
	for(;Pluse2_num>0;Pluse2_num--)
	{
		DOWNLOAD_HS30806_Y_PULSE1	=	~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负
		mDelay(20);
		DOWNLOAD_HS30806_Y_PULSE1	=	~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负
		mDelay(20);	
	}
}   

//***************************************************************************

//下料部Y停止程序

//***************************************************************************

void DOWNLOAD_HS30806_Y_Stop()
{
		DOWNLOAD_HS30806_Y_DIR=0;
		DOWNLOAD_HS30806_Y_PULSE1	=	1;//脉冲负
		mDelay(20);		
}

//***************************************************************************

//下料部X右转程序

//***************************************************************************

void RIGHT_MOVE_DOWNLOAD_HS30806_X(uint Pluse1_num)
{	
		
	DOWNLOAD_HS30806_X_DIR=1;
	DOWNLOAD_HS30806_X_PULSE1	=	1;//脉冲负
	
	mDelay(20);		
	for(;Pluse1_num>0;Pluse1_num--)
	{
		DOWNLOAD_HS30806_X_PULSE1	=	~DOWNLOAD_HS30806_X_PULSE1;//脉冲负
		mDelay(20);	
		DOWNLOAD_HS30806_X_PULSE1	=	~DOWNLOAD_HS30806_X_PULSE1;//脉冲负
		mDelay(20);	
	}
}   

//***************************************************************************

//下料部X左转程序

//***************************************************************************

void LEFT_MOVE_DOWNLOAD_HS30806_X(uint Pluse2_num)
{	
		DOWNLOAD_HS30806_X_DIR=0;
		DOWNLOAD_HS30806_X_PULSE1	=	1;//脉冲负
		mDelay(20);		
	for(;Pluse2_num>0;Pluse2_num--)
	{
		DOWNLOAD_HS30806_X_PULSE1	=	~DOWNLOAD_HS30806_X_PULSE1;//脉冲负
		mDelay(20);
		DOWNLOAD_HS30806_X_PULSE1	=	~DOWNLOAD_HS30806_X_PULSE1;//脉冲负
		mDelay(20);	
	}
}   
//***************************************************************************

//下料部X停止程序

//***************************************************************************

void DOWNLOAD_HS30806_X_Stop()
{
		DOWNLOAD_HS30806_X_DIR=0;
		DOWNLOAD_HS30806_X_PULSE1	=	1;//脉冲负
		mDelay(20);		
}

//***************************************************************************

//伺服电机右转程序

//***************************************************************************

void RIGHT_MOVE_SERVO(uint Pluse1_num)
{	
	//SERVO_ON	=	0;
	//mDelay(100);
	SERVO_DIR	=	1;
	mDelay(3);
	SERVO_PULSE1	=	1;//脉冲负
	
			
	for(;Pluse1_num>0;Pluse1_num--)
	{
		SERVO_PULSE1	=	~SERVO_PULSE1;//脉冲负
		 mDelay(3);
	//	mDelay(2);	
		SERVO_PULSE1	=	~SERVO_PULSE1;//脉冲负
		 mDelay(3);
	//	mDelay(2);	
	}
}   

//***************************************************************************

//伺服电机左转程序

//***************************************************************************

void LEFT_MOVE_SERVO(uint Pluse2_num)
{	
//	SERVO_ON	=	0;
//	mDelay(100);
	SERVO_DIR	=	0;
	mDelay(33);
	SERVO_PULSE1	=	1;//脉冲负
		
	for(;Pluse2_num>0;Pluse2_num--)
	{
		SERVO_PULSE1	=	~SERVO_PULSE1;//脉冲负
		//Delay();
		mDelay(3);
		SERVO_PULSE1	=	~SERVO_PULSE1;//脉冲负
		//Delay();//
		mDelay(3);	
	}
}   

//***************************************************************************

//伺服电机停止程序

//***************************************************************************

void SERVO_PULSE1_Stop()
{
		SERVO_DIR=0;
		SERVO_PULSE1	=	1;//脉冲负
		mDelay(20);		
}
//***************************************************************************

//键盘处理程序

//***************************************************************************

uchar Key()
{	
	uchar KValue;
	uchar tmp;
	P3|=0x3c;			//将P3口的接键盘的中间四位置1
	KValue=P3;
	KValue|=0xc3;		//将未接键的4位置1
	if(KValue==0xff)	//中间4位均为1,无键按下	
		return(0);		//返回
	mDelay(10);		//延时10ms,去键抖
	KValue=P3;
	KValue|=0xc3;		//将未接键的4位置1
	if(KValue==0xff)	//中间4位均为1,无键按下	
		return(0);		//返回
//如尚未返回,说明一定有1或更多位被按下
	for(;;)
	{	tmp=P3;		
		if((tmp|0xc3)==0xff)
			break;		//等待按键释放
	}
	return(KValue);
}

void KProce(uchar KValue)	//键值处理
{	
	if((KValue&0x04)==0)
	
	LEFT_MOVE_SERVO(10000);

	//RIGHT_MOVE_DOWNLOAD_HS30806_X(2000);
	//QIGANG=0;
	if((KValue&0x08)==0)
	
		RIGHT_MOVE_SERVO(10000);
	//LEFT_MOVE_DOWNLOAD_HS30806_X(2000);
	//QIGANG=1;
	if((KValue&0x10)==0)
	SERVO_ON	=	0;
	mDelay(100);
//	RIGHT_MOVE_DOWNLOAD_HS30806_Y(2000);
	if((KValue&0x20)==0)
	SERVO_ON	=	1;
	mDelay(100);
	//LEFT_MOVE_DOWNLOAD_HS30806_Y(2000);
}

//***************************************************************************

//初始化程序

//***************************************************************************

void	init()
{
//	P0=0xFF;
//	P1=0xFF;
//	P2=0xFF;
//	P3=0xFF;
	P3=0xFD;
	mDelay(1000);
	while(S2==1)
	{
			LEFT_MOVE_DOWNLOAD_HS30806_Y(1);
	}
	RIGHT_MOVE_DOWNLOAD_HS30806_Y(1600);
		while(S3==1)
	{
			LEFT_MOVE_DOWNLOAD_HS30806_X(1);
	}
	RIGHT_MOVE_DOWNLOAD_HS30806_X(1600);
}

//***************************************************************************

//主函数

//***************************************************************************

/*
void main()
{
	uchar KValue,m;//,n,flag;				//存放键值;
//g	init();//
//SERVO_ON	=	0;
//mDelay(100);//延时0.00111300s
mDelay(1);
mDelay(2);
mDelay(3);
mDelay(4);
mDelay(10);
mDelay(20);
for(m=0;m<100;m++)
{
RIGHT_MOVE_SERVO(25000);
//mDelay(20);//延时0.00023s
LEFT_MOVE_SERVO(25000);
mDelay(20);
}
while(1)
{
//	for(m=0;m<100;m++)
//	{
//	RIGHT_MOVE_DOWNLOAD_HS30806_Y(800);
//	}
	
	for(;;)
	{	KValue=Key();			//调用键盘程序并获得键值
		if(KValue)				//如果该值不等于0
		{
			KProce(KValue);	//调用键盘处理程序
		}
	}

}

 }

*/
void Initia()
{
	LEFT_MOVE_SERVO(1);	
	mDelay(6);
}

void main()
{
	Initia();
	RIGHT_MOVE_SERVO(100);
	while(SERVO_POINT==0)
		while(1)
		{
			while(S2==0)
			{
				while(1)
				{	
					RIGHT_MOVE_SERVO(100);
					mDelay(20);
					LEFT_MOVE_SERVO(100);	
					mDelay(20);
				}
			}
		}
}
 






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -