智能车制作

标题: 51小车程序 [打印本页]

作者: 小歪    时间: 2010-4-29 20:26
标题: 51小车程序
#include <AT89X55.H>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
                                //****************延时函数 1ms*******************************//
void delay(unsigned int ms)
{
        unsigned char i;
        while(ms--)
                {
                        for(i=0;i<125;i++);
                }       
}       

uchar t1=63,ts1=63;
bit  n1=1;n2=1;
sbit p10=P2^3;
sbit p11=P2^2;
uint gg,gd,dg,dd,zgg,zgd,zdg,zdd;


//******************中断程序1***********用于控制舵机偏转角度**************周期20ms**************//
void timer1() interrupt 1 using 0                                                          //中断1  T0溢出中断
{
n1=!n1;
if(n1==0)
{
   p10=0;
      TH0=dg;
      TL0=dd;
}
else
{
   p10=1;
      TH0=gg;
      TL0=gd;
}         
}
//*******************中断程序2********用于控制电机转速********************//
void timer2() interrupt 3 using 3                                          //中断3  T1溢出中断,使用工作组3
{
n2=!n2;
if(n2==0)
{
      p11=0;
      TH1=zdg;
      TL1=zdd;
}
else
{
      p11=1;
      TH1=zgg;
      TL1=zgd;
}         
}

//&&&&&&&&&&&&&&&&&&&& (一)此段子函数对舵机方向进行操作&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//





//*********************左转90度***********高低占空比为2.5ms:17.5ms**************************//
void zz90()
{
        gg=0xf6;
                gd=0x3c;
                dg=0xbb;
                dd=0xa4;
                TR0=1;
       
}
//*********************左转45度***********高低占空比为2ms:18ms**************************//
void zz45()
{
        gg=0xF8;
                gd=0x30;
                dg=0xB9;
                dd=0xB0;
                TR0=1;
       
}
//*********************左转20度***********高低占空比为1.8ms:18.2ms**************************//
void zz20()
{
        gg=0xf8;
                gd=0xf8;
                dg=0xB8;
                dd=0xe8;
                TR0=1;
               
}
//*********************右转90度***********高低占空比为0.5ms:19.5ms**************************//
void yz90()
{
        gg=0xfd;
                gd=0x44;
                dg=0xb4;
                dd=0x9c;
                TR0=1;
                delay(2);
}
//*********************右转45度***********高低占空比为1ms:19ms**************************//
void yz45()
{
        gg=0xfa;
                gd=0xEC;
                dg=0xb6;
                dd=0xF4;
        TR0=1;
               
}
//*********************右转20度***********高低占空比为1.3ms:18.7ms**************************//
void yz20()
{
        gg=0xfa;
                gd=0xec;
                dg=0xb6;
                dd=0xf4;
        TR0=1;
               
}
//********************方向复位***********高低占空比为1.7ms:18.3ms**************************//
void fw()
{
        gg=0xf9;
                gd=0x5C;
                dg=0xB8;
                dd=0x84;
                TR0=1;
               
}



//&&&&&&&&&&&&&&&&&&&&&& (二)此段子函数对主电机进行操作&&&&&&&&&&&&&&&&&&&&&&&&&&&&//

void qj()               //前进
{       P2_0=12_1=0;
        zgg=0x01;
                zgd=0x01;
                zdg=0x0e;
                zdd=0x0e;
                TR1=1;
       
}
void kqj()              //快速前进
{       P2_0=1;P2_1=0;   
        zgg=0xe0;
                zgd=0xc0;
                zdg=0xf8;
                zdd=0x30;
                TR1=1;
               
}
void ht()                //后退
{       P2_0=0;P2_1=1;      
        zgg=0xe0;
                zgd=0xc0;
                zdg=0xf8;
                zdd=0x30;
                TR1=1;
       
}
void tj()
{
  P2_0=0;P2_1=0;delay(10);
}
          


//&&&&&&&&&&&&&&&&&&&&&&&&&&(三)函数主体&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//


void main(void)                                                                          
{                                                                                                   
int m,a[8];                                                                                  
P0=0XFF;P1=0X00;P2=0X00;P3=0X00;                                   //
TMOD=0x11;                                                                                   //
ET0=1;                                                                                          //
ET1=1;                                                                                          // 端口初始化
EA=1;                                                                                          //
TR0=0;                                                                                          //
TR1=0;                                                                                          //
p10=1;                                                                                       
                                                                                               

//**************************循迹部分**************************//
while(1)               
{
                                   //扫描端口状态........
//P0_0==0  黑道          ..........P0_6==0黑道


//直走
if(P0_3==0)
{  
     fw();kqj();TR0=1;TR1=0;
}
//跑飞
else if(P0_0==0&&P0_1==0&&P0_2==0&&P0_3==0&&P0_4==0&&P0_5==0&&P0_6==0&&P0_7==0)
     {
      qj();TR0=1;TR1=0;
      }
//右转
else if(P0_4==0)
     {
   qj();yz20();TR0=1;TR1=0;
      }
else if(P0_5==0)
   {
   qj();yz45();TR0=1;TR1=0;
    }
else if(P0_6==0)
     {
    qj();yz90();TR0=1;TR1=0;
     }  
//左转
else if(P0_2==0)
     {
    qj();zz20();TR0=1;TR1=0;
      }
else if(P0_1==0)
     {
    qj();zz45();TR0=1;TR1=0;
      }
else if(P0_0==0)
     {
    qj();zz90();TR0=1;TR1=0;
      }  
else delay(2);
}

}
作者: ntuyq    时间: 2010-4-29 20:43
顶起来  O(∩_∩)O哈哈~
作者: hutianxun    时间: 2010-5-1 23:41
没有用到滤波  跑起来 会稳么?
作者: chengyongji    时间: 2010-5-2 00:01
厉害!




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2