⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slave.c

📁 全国电子大赛智能小车赛题
💻 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 + -