这是写了几天的小车程序,加装了一点小模块;用的是买来的遥控,然后自己将按钮在板子上焊接了一次,随便写了点;
/************************************************************************************************************************************************************************************
开源小车
有任何问题请咨询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);
}