高级会员
- 积分
- 566
- 威望
- 301
- 贡献
- 203
- 兑换币
- 0
- 注册时间
- 2010-4-29
- 在线时间
- 31 小时
|
#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);
}
} |
|