# include & ltreg52.h & gt
# include & ltmath.h & gt
#定義uchar無符號字符
#定義uint無符號整數
#定義L_M 1
#定義R_M 2
uchar temp2,temp1,t,m1,m2,紅線;
sbit tr=p2^4;//超聲波
sbit ec=p2^5;//
sbit en=p2^7;//液晶的EN
sbit rs=p2^6;//液晶RS選擇端子
//液晶數據端口P0
sbit rin_1=p2^0;//跟蹤引腳輸入
sbit rin_2=p2^1;
sbit lin_2=p2^2;
sbit lin_1=p2^3;
sbit l_en=p1^0;//左側電機啟用
sbit l_1=p1^1;//左電機控制1
sbit l_2=p1^2;//左側電機控制2
sbit r_1=p1^3;//右電機控制1
sbit r_2=p1^4;//右電機控制2
sbit r_en=p1^5;//右電機啟用
Void delay(uint z) //延遲程序1
{
uint x,y;
for(x = z;x & gt0;x -)
for(y = 110;y & gt0;y-);
}
無效延遲1s (uchart)//1s延遲功能
{
uchar a,h,I,j,k;
for(a = t;a & gt0;答-)
{
for(h = 5;h & gt0;h -)
for(I = 4;我& gt0;我-)
for(j = 116;j & gt0;j -)
for(k = 214;k & gt0;k-);
}
}
void v _ control(uchar數,uchar速度)
{
如果(速度& lt100)
{
if(數字==1)
m1=abs(速度);
如果(數字==2)
m2=abs(速度);
}
}
無效左轉()
{
l _ 1 = 1;//左扇轉//
l _ 2 = 0;
r _ 1 = 1;//右翻轉
r _ 2 = 0;
}
無效右轉()
{
l _ 1 = 0;//左鄭篆
l _ 2 = 1;
r _ 1 = 0;//右翻轉
r _ 2 = 1;
}
void gostright()
{
l _ 1 = 0;//左鄭篆
l _ 2 = 1;
r _ 1 = 1;//右正轉
r _ 2 = 0;
}
void goback()
{
l _ 1 = 1;//左鄭篆
l _ 2 = 0;
r _ 1 = 0;//右正轉
r _ 2 = 1;
}
無效停止()
{
l _ 1 = 1;//停止
l _ 2 = 1;
r _ 1 = 1;//停止
r _ 2 = 1;
}
void定時器0_int()
{
TMOD = 0x 01;
TH0 =-100/256;
TL0 =-100% 256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
state_int()
{
rin _ 1 = 1;
rin _ 1 = 1;
Lin _ 1 = 1;
Lin _ 1 = 1;
t = 0;
m 1 = 50;
m2 = 50
stop();
}
void main()
{
定時器0 _ int();
state _ int();
while(1)
{
//避障程序
if((Lin _ 1 = = 1)& amp;& amp(Lin _ 2 = = 1)& amp;& amp(Rin _ 1 = = 1)& amp;& amp(Rin_2==1))
gostright();
if((Lin _ 1 = = 1)& amp;& amp(Lin _ 2 = = 1)& amp;& amp(((Rin _ 1 = = 1)& amp;& amp(Rin _ 2 = = 0))| |((Rin _ 1 = = 0)& amp;& amp(Rin _ 2 = = 1))| |((Rin _ 1 = = 0)& amp;& amp(Rin_2==0))))
左轉();
if((Rin _ 1 = = 1)& amp;& amp(Rin _ 2 = = 1)& amp;& amp(((Lin _ 1 = = 1)& amp;& amp(Lin _ 2 = = 0))| |((Lin _ 1 = = 0)& amp;& amp(Lin _ 2 = = 1))| |((Lin _ 1 = = 0)& amp;& amp(Lin_2==0))))
turn right();
if(((((Lin _ 1 = = 1)& amp;& amp(Lin _ 2 = = 0))| |((Lin _ 1 = = 0)& amp;& amp(Lin _ 2 = = 1))| |((Lin _ 1 = = 0)& amp;& amp(Lin _ 2 = = 0)))& amp;& amp(((Rin _ 1 = = 1)& amp;& amp(Rin _ 2 = = 0))| |((Rin _ 1 = = 0)& amp;& amp(Rin _ 2 = = 1))| |((Rin _ 1 = = 0)& amp;& amp(Rin_2==0))))
go back();
if((Lin _ 1 = = 1)& amp;& amp(Lin _ 2 = = 1)& amp;& amp(Rin _ 1 = = 1)& amp;& amp(Rin_2==1))
gostright();
if((Lin _ 1 = = 1)& amp;& amp(Lin _ 2 = = 1)& amp;& amp(((Rin _ 1 = = 1)& amp;& amp(Rin _ 2 = = 0))| |((Rin _ 1 = = 0)& amp;& amp(Rin _ 2 = = 1))| |((Rin _ 1 = = 0)& amp;& amp(Rin_2==0))))
左轉();
if((Rin _ 1 = = 1)& amp;& amp(Rin _ 2 = = 1)& amp;& amp(((Lin _ 1 = = 1)& amp;& amp(Lin _ 2 = = 0))| |((Lin _ 1 = = 0)& amp;& amp(Lin _ 2 = = 1))| |((Lin _ 1 = = 0)& amp;& amp(Lin_2==0))))
turn right();
if(((((Lin _ 1 = = 1)& amp;& amp(Lin _ 2 = = 0))| |((Lin _ 1 = = 0)& amp;& amp(Lin _ 2 = = 1))| |((Lin _ 1 = = 0)& amp;& amp(Lin _ 2 = = 0)))& amp;& amp(((Rin _ 1 = = 1)& amp;& amp(Rin _ 2 = = 0))| |((Rin _ 1 = = 0)& amp;& amp(Rin _ 2 = = 1))| |((Rin _ 1 = = 0)& amp;& amp(Rin_2==0))))
go back();
}
while(1);
}
定時器0()中斷1
{
TH0 =-100/256;
TL0 =-100% 256;
如果(t==0)
{
temp 1 = m 1;
temp2 = m2
}
if(t==temp1)
l _ EN = 0;
if(t==temp2)
r _ EN = 0;
t++;
如果(t==50)
{
t = 0;
l _ EN = 1;
r _ EN = 1;
}
}