📄 slave.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag;
uint speed;
uchar moterflag;
uchar a=0;
sbit moter=P2^3;
sbit left=P2^1;
sbit right=P2^0;
sbit moter2=P2^2;
void goon()
{
if(moterflag%15)moter=1;//全速前进
else moter=0;
left=0;
right=0;//不转向
}
void turnleft()
{
if(moterflag%7) moter=1;//减速前进*/
else moter=0;
left=1;
right=0;//转向
}
void turnleftl()
{
if(moterflag%10)moter=1;
else moter=0;//减速前进
left=1;
right=0;//转向
}
void turnright()
{
if(moterflag%7)moter=1;
else moter=0;//减速前进*/
left=0;
right=1;//转向
}
void turnrightl()
{
if(moterflag%10)moter=1;
else moter=0;//减速前进
left=0;
right=1;//转向
}
void stop()
{
P2=0x00;
// EA=0;
// TI=0;
// SBUF=0x88;
// while(!TI);
// TI=0;
// EA=1;
}
void serchlight()//寻光
{
if(P0&0x07==0x07)//没到黑线就寻光,否则停车
{
switch(0x1f&P1)
{
case 0x01:turnleft();
break;
case 0x02:turnleftl();
break;
case 0x04:goon();
break;
case 0x08:turnrightl();
break;
case 0x10:turnright();
break;
case 0x0d:stop();//
break;
case 0x01f:stop();//
break;
default:goon();
break;
}
}
else
{
ES=0;
TI=0;
SBUF=0x88;
while(!TI);
TI=0;
ES=1;
stop();
}
}
void serchline() //寻线
{
uchar i;
P0=0xff;
for(i=10;i==0,i--;);
switch(0x07&P0)
{
case 0x04:
{
turnrightl();
a=0x07&P0;
}
break;
case 0x06:
{
turnrightl();
a=0x07&P0;
}
break;
case 0x05:
{
goon();
}
break;
case 0x01:
{
turnleftl();
a=0x07&P0;
}
break;
case 0x03:
{
turnleftl();
a=0x07&P0;
}
break;
case 0x00:goon();
break;
case 0x07:
{
if(a==0x04)turnright();
if(a==0x06)turnrightl();
if(a==0x03)turnleft();
if(a==0x01)turnleftl();
if(a==0)goon();
}
break;
default:goon();
break;
}
}
void supsound() //超声波
{
// goon();
uchar i;
// INT1=0;
// goon();
// INT1=1;
// i=0;
// for(i;i<20;i++);
// ET0=1;
// i=0;
// for(i;i<255;i++);
// ET0=0;
// P1=0xff;
i=0;
for(i;i<10;i++);
if(0x1f&P1)flag=0x44;
else turnrightl();
}
void main()
{
TMOD=0x21;
TH0=(1000)/256;
TL0=(1000)%256;
TH1=0xfd;
TL1=0xfd;
// SM0=1;
// SM1=0;
SCON=0x50;
PCON=0;
IT0=1;
PS=1;
// PT0=1;
// PX0=1;
EA=1;
// ET1=1;
ET0=1;
ES=1;
// EX0=1;
TI=0;
RI=0;
TR1=1;
TR0=1;
flag=0x11;
moter=0;
moter2=0;
speed=60000;
//a=0x05;
while(1)
{
// uchar x;
//for(x=500;x>0;x--)goon();
switch(flag)
{
case 0x11: serchline();
break;
case 0x22: supsound();
break;
case 0x44:serchlight();
break;
case 0x88: stop();
break;
// default:goon();
// break;
}
}
}
void timer0int() interrupt 1
{
TR0=0;
TH0=(speed)/256;
TL0=(speed)%256;
moterflag++;
TR0=1;
}
void int0() interrupt 0
{
// turnleft();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
// _nop_();
if(INT0)turnleft();
}
void uartint() interrupt 4
{
// RI=0;
uchar i;
ES=0;
flag=SBUF;
for(i=10;i>0;i--);
// SBUF=flag;
//SBUF=0x55;
// while(!TI);
TI=0;
RI=0;
ES=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -