51无线控制小车

这是写了几天的小车程序,加装了一点小模块;用的是买来的遥控,然后自己将按钮在板子上焊接了一次,随便写了点;

/************************************************************************************************************************************************************************************
开源小车
有任何问题请咨询QQ:3064689599
************************************************************************************************************************************************************************************/

#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
 
 typedef int u4;
 typedef char u1;
 
sbit IN1=P3^0;		
sbit IN2=P3^1;
sbit IN3=P3^2;
sbit IN4=P3^3;
/************************************************************************************************************************************************************************************
控制电机
************************************************************************************************************************************************************************************/

#define L_back     IN1=0;IN2=1 //反转
#define L_go       IN1=1;IN2=0 //正转
#define L_stop     IN1=0;IN2=0	//停止
#define R_back     IN3=0;IN4=1 //反转
#define R_go  	   IN3=1;IN4=0 //正转
#define R_stop  	 IN3=0;IN4=0 //停止
/************************************************************************************************************************************************************************************
电机方向宏定义
************************************************************************************************************************************************************************************/

sbit buzz=P3^6;//蜂鸣器

sbit put1=P3^4;//红外接收
sbit put2=P3^5;
/***********************************************************************************************
红外接收离物体近后让蜂鸣器产生信号
***********************************************************************************************/

sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
/***********************************************************************************************
用于无线遥控的启动条件,也可以用变量实现
***********************************************************************************************/

sbit s1=P1^5;
sbit s2=P1^6;
sbit s3=P1^4;
sbit s4=P1^7;
/***********************************************************************************************
无线遥控控制
***********************************************************************************************/

sbit pwm1=P2^6;//ENB使能
sbit pwm2=P2^7;//ENA使能
/***********************************************************************************************
控制电机使能引脚,用于pwm调速
***********************************************************************************************/

sbit addr0=P2^0;
sbit addr1=P2^1;
sbit addr2=P2^2;
sbit addr3=P2^3;
/***********************************************************************************************
数码管显示,能从数码管上看见方向
***********************************************************************************************/

void ledbuff();

unsigned char buff[]={
0x83,0x88,0xC6,0x89,//back
0xff,0x88,0xc1,0xc8,//run
0xc7,0x86,0x8e,0x87,//left
0x88,0xcf,0x90,0x8b,//righ
0x92,0x87,0xc0,0x8c,//stop
	};
/***********************************************************************************************
数码管显示方向
***********************************************************************************************/

u1 i,b,num,h;
u4 j;

void delay(u4 k)
{
	while(k--);
}

void chushi()
{
	TMOD=0x01;
	EA=1;
	TR0=1;
	TF0=0;
	TL0 = 0xCD;		
	TH0 = 0xD4;
}

void main()
{
	chushi();
	while(1)
	{
		pwm1=0;
		pwm2=0;
		loop4:
		R_stop;
	  L_stop;
led1=1;led2=1;led3=1;led4=1;
		if(put1==0&&put2==0)
		{
			buzz=~buzz;
			delay(200);
		}		
		
		j=16;
		if(j==19)
		{
			j=16;
		}
		ledbuff();
		
if(s1==1)
			{
				delay(1000);
				if(s1==1)
				{
loop:	
			led1=1;led2=1;led3=1;led4=0;
					if(led1==1&&led2==1&&led3==1&&led4==0)
				{
					while(2)
					{
						
		if(put1==0&&put2==0)
		{
			buzz=~buzz;
			delay(200);
		}		
						
						j=4;
            j&=0x07;
				    ledbuff();
						
		h++;
		if(h==100)
		{
			h=0;
		}
		if(h<=100)
		{
	      pwm1=1;
				pwm2=1;		
		}
		
					R_go;
					L_go;
						
						if(s1==0)
						{
							delay(1000);
							if(s1==0)
							{
						led1=1;led2=1;led3=1;led4=1;
								goto loop4;
							}while(!s1);
						}	
				
												if(s2==1)
												{
													delay(1000);
													if(s1==1)
													{
														goto loop;
													}while(!s2);
												}
						
									if(s3==1&&s1==1)
									{
										delay(1000);
										if(s3==1&&s1==1)
										{
											goto loop2;
										}while(!s3&&s1);
									}
						
						if(s4==1&&s1==1)
						{
							delay(1000);
							if(s4==1&&s1==1)
							{
								goto loop3;
							}while(!s4&&s1);
						}
						
								}			
					}
			}while(!s2);
}
	/****************************************************************************************************************************************************************************
	直行
	*****************************************************************************************************************************************************************************/
	
if(s2==1)
			{
				delay(1000);
				if(s2==1)
				{
	loop1:	
			led1=1;led2=0;led3=1;led4=1;
					if(led1==1&&led2==0&&led3==1&&led4==1)
				{
					while(2)
					{
					
if(put1==0&&put2==0)
		{
			buzz=~buzz;
			delay(200);
		}		
						
						j=0;
						j&=0x03;
				     ledbuff();
		
		    i++;
				if(i==100)
				{
					i=0;
				}
					if(i<=100)
					{
					  pwm2=1;
						pwm1=1;
					}				
		
					R_back;
					L_back;
						
						if(s2==0)
						{
							delay(1000);
							if(s2==0)
							{
							led1=1;led2=1;led3=1;led4=1;
								goto loop4;
							}while(!s2);
						}	
				
												if(s1==1)
												{
													delay(1000);
													if(s1==1)
													{
														goto loop;
													}while(!s1);
												}
						
									if(s3==1&&s2==1)
									{
										delay(1000);
										if(s3==1&&s2==1)
										{
											goto loop2;
										}while(!s3&&s2);
									}
						
						if(s4==1&&s2==1)
						{
							delay(1000);
							if(s4==1&&s2==1)
							{
								goto loop3;
							}while(!s4&&s2);
						}
						
								}			
					}
			}while(!s2);
}
/********************************************************************************************************************************************************************************
后退
*********************************************************************************************************************************************************************************/
	
			
if(s3==1)
					{
						delay(1000);
						if(s3==1)
						{
							loop2:
		    	led1=1;led2=1;led3=0;led4=1;
							if(led1==1&&led2==1&&led3==0&&led4==1)
						{
							while(3)
							{
				
if(put1==0&&put2==0)
		{
			buzz=~buzz;
			delay(200);
		}		
								
				j=8;
				j&=0x0B;
				ledbuff();
								
				i++;
				if(i==100)
				{
					i=0;
				}
					if(i<50)
					{
					  pwm2=1;
						pwm1=1;
					}				
					
else 
{
	pwm1=1;
	pwm2=0;
}	//左轮转速为50%
		
				R_go;
				L_back;

		if(s3==0)
		{
			delay(1000);
			if(s3==0)
			{
				led1=1;led2=1;led3=1;led4=1;
					goto loop4;
			}while(!s3);
		}
	
			         	if(s1==1)
									{
										delay(1000);
										if(s1==1)
										{
											goto loop;
										}while(!s1);
									}          
		
									
		if(s2==1)
			{
				delay(1000);
				if(s2==1)
				{
					goto loop1;
				}while(!s2);
			}
			
							if(s4==1)
								{
									delay(1000);
									if(s4==1)
									{
										goto loop3;
									}while(!s4);
								}
							}
						}
				   }while(!s3);
}
/**********************************************************************************************************************
左转
**********************************************************************************************************************/			
							
if(s4==1)
							{
								delay(1000);
								if(s4==1)
								{
loop3:
							led1=1;led2=1;led3=1;led4=0;
									if(led1==1&&led2==1&&led3==1&&led4==0)
									{
									while(4)
									{
		
		if(put1==0&&put2==0)
		{
			buzz=~buzz;
			delay(200);
		}										
										
		j=12;
		j&=0x0f;
		ledbuff();
										
		b++;
		if(b==100)
		{
			b=0;
		}
					if(b<50)
					{
					  pwm1=1;
						pwm2=1;
					}				

	else 
	{
		pwm1=0;
		pwm2=1;
	}	//右轮子转速为50%
									
									R_back;
									L_go;
										
	
										if(s4==0)
										{
													delay(1000);
											if(s4==0)
												{
											led1=1;led2=1;led3=1;led4=1;
													goto loop4;
												}while(!s4);
								  	}
									
				if(s1==1)
				{
					delay(1000);
					if(s1==1)
					{
						goto loop;
					}while(!s1);
				}
				
								if(s2==1)
									{
										delay(1000);
										if(s2==1)
										{
											goto loop1;
										}while(!s2);
									}

									
					if(s3==1)
				{
					delay(1000);
					if(s3==1)
					{
						goto loop2;
					}while(!s3);
				}
									}
								}
						}while(!s3);
}
/*********************************************************************************************************************************************************************************
右转
*********************************************************************************************************************************************************************************/						
}
}

void ledbuff()
{
	P0=0xFF;
	switch(num)
	{
		case 0:addr0=0;addr1=1;addr2=1;addr3=1;num++;P0=buff[j];break;
		case 1:addr0=1;addr1=0;addr2=1;addr3=1;num++;P0=buff[j+1];break;
		case 2:addr0=1;addr1=1;addr2=0;addr3=1;num++;P0=buff[j+2];break;
		case 3:addr0=1;addr1=1;addr2=1;addr3=0;num=0;P0=buff[j+3];break;
		default:break;
	}
	delay(50);
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懿761

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值