|
這個循跡小車的用的是占空比控制速度,如果使用的是舵機。那就將控制速度的代碼換成可以控制舵機轉(zhuǎn)向角度的函數(shù)。不知為什么沒法上傳代碼,那我就發(fā)文字。寫的很簡單,反應的話我用的是89C51和12MHz的晶振沒有什么問題。
#include<reg52.h>
# define uint unsigned int
# define uchar unsigned char
sbit ENB=P2^2;
sbit ENA=P2^5;
sbit IN1=P2^4;
sbit IN2=P2^3;
sbit IN3=P2^0;
sbit IN4=P2^1;
sbit right3=P1^0;
sbit right2=P1^1;
sbit right1=P1^2;
sbit middle=P1^3;
sbit left1=P1^4;
sbit left2=P1^5;
sbit left3=P1^6;
uchar zkbENA=0;
uchar zkbENB=0;
uchar t=0;
uchar k=0;
void T0_time() interrupt 1
{
t++;
k++;
if(t<zkbENA) ENA=1;
else ENA=0;
if(k<zkbENB) ENB=1;
else ENB=0;
if(k>100) t=0;k=0;
if(t>101) t=0,k=0;
TH0=(65536-80)/256;
TL0=(65536-80)%256;
}
void main()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
TMOD=0x01;
TH0=(65535-100)/256;
TL0=(65535-100)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(middle==0)
{zkbENB=100;zkbENA=100;}
else if(right3==0)
{zkbENA=0;zkbENB=80;}
else if(left3==0)
{zkbENA=80;zkbENB=0;}
else if(right2==0)
{zkbENA=20;zkbENB=90;}
else if(left2==0)
{zkbENA=90;zkbENB=20;}
else if(right1==0)
{zkbENA=70;zkbENB=100;}
else if(left1==0)
{zkbENA=100;zkbENB=70;}
}
}
如果需要面對更加復雜的有要求處理速度的情況,建議用機器指令寫
|
評分
-
查看全部評分
|