//***************************************************************************//// 文 件 名: 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口的接键盘的中间四位置1KValue=P3;KValue|=0xc3; //将未接键的4位置1if(KValue==0xff) //中间4位均为1,无键按下return(0); //返回mDelay(10); //延时10ms,去键抖KValue=P3;KValue|=0xc3; //将未接键的4位置1if(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.00111300smDelay(1);mDelay(2);mDelay(3);mDelay(4);mDelay(10);mDelay(20);for(m=0;m<100;m++){RIGHT_MOVE_SERVO(25000);//mDelay(20);//延时0.00023sLEFT_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);}}}}
联系客服