立即注册 登录
返回首页

uid:168935的个人空间

日志

51控制二自由度云台程序

已有 457 次阅读2017-3-7 20:19 | 云台

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit P10=P1^0;

sbit P11=P1^1;

sbit P12=P1^2;

sbit P13=P1^3;

uchar i,a,flag,u;

code tabup[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//竖直电机正转1~2相励磁

code tabdown[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//竖直电机反转1~2相励磁

code tableft[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//水平电机正转1~2相励磁

code tabright[]={0x60,0x20,0x30,0x10,0x90,0x80,0xc0,0x40};//水平电机反转1~2相励磁

void control(uchar);

void moveauto();

void moveup();

void movedown();

void moveleft();

void moveright();

void delay(uchar);

void init()//初始化

{

       TMOD=0x20;//设置定时器1为工作方式2

       TH1=0xFA;

       TL1=0xFA;

       TR1=1;//开定时器

       PCON=0x80;

       SCON=0x50;//9600n8,1

       EA=1;//开总中断

       ES=1;//开串口中断

}

 

void serial() interrupt 4//串口中断

{

       RI=0;

       a=SBUF;

       control(a);

       delay(1);

}

 

void control(uchar l)//中断控制电机动作

{

       switch(l)

       {

       case 'A':moveup();break;

       case 'B':movedown();break;

       case 'C':moveleft();break;

       case 'D':moveright();break;

       case 'Z':flag=1;break;

       default:break;

       }    

}

 

void delay(uint z)//延时

{

     uint x,y;

       for(x=z;x>0;x--)   

       for(y=110;y>0;y--);

}

 

void moveup()//竖直方向向上

{    

       flag=0;

       if(P10!=1)

       {

              for(i=0;i<8;i++)

              {

                     P2=tabup[i];

                     delay(50);

               }   

       }

}

 

void movedown()//竖直方向向下

{

       flag=0;

       if(P11!=1)

       {

              for(i=0;i<8;i++)

              {

                     P2=tabdown[i];

                     delay(50);

              }    

       }

}

 

void moveleft()//水平方向向左

{

       flag=0;

       if(P10!=1)

       {

              for(i=0;i<8;i++)

              {

                     P2=tableft[i];

                     delay(50);

              }    

       }

}

 

void moveright()//水平方向向右

{

       flag=0;

       if(P10!=1)

       {

              for(i=0;i<8;i++)

              {

                     P2=tabright[i];

                     delay(50);

               }

       }

}

void moveauto()//自动运行

{   

       P1=0;

       while(!P10)

       {    

              for(i=0;i<8;i++)

              {

                     P2=tabup[i];

                     delay(50);

              }

       }

       while(!P11)

       {

              for(i=0;i<8;i++)

              {

                     P2=tableft[i];

                     delay(50);

              }

       }

       while(!P12)

       {

              for(i=0;i<8;i++)

              {

                     P2=tabdown[i];

                     delay(50);

              }

       }

       while(!P13)

       {

              for(i=0;i<8;i++)

              {

                     P2=tabright[i];

                     delay(50);

              }

       }

}

 

void controlkey(uchar i)//按键控制电机动作

{

       switch(i)

       {

       case 1:moveup();break;

       case 2:movedown();break;

       case 4:moveleft();break;

       case 8:moveright();break;

       case 16:flag=1;break;

       default:break;

       }

}

 

void main()

{

       P1=0;

       flag=0;

       init();

       while(1)

       {

              if(flag==1)

              {

                     moveauto();//自动运行

              }

             

              P0=0xff;

              u=P0;

              controlkey(u);

      

       }

}


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部