基于51单片机制作的智能小车
#include<reg52.h>
#define uchar unsigned char
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit IN3=P0^0;
sbit IN4=P0^1;
void delay(uchar XMS)
{
uchar i,j;
for(i=XMS;i>0;i--)
for(j=110;j>0;j--);
}
void init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SM0=0;
SM1=1;
REN=1;
TR1=1;
SM2=0;
PCON=0x00;
EA=1;
ES=1;
IN1=1;
IN2=1;
IN3=1;
IN4=1;
}
void qianjin()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void houtui()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void zuozhuan()
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
void youzhuan()
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
void tingzhi()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void main()
{
init();
while(1)
{
tingzhi();
}
}
void timer0()interrupt 4
{
unsigned char shuju;
RI=0;
shuju=SBUF;
if(shuju==65)
{qianjin();}
if(shuju==66)
{houtui();}
if(shuju==67)
{zuozhuan();}
if(shuju==68)
{youzhuan();}
if(shuju==69)
{tingzhi();}
}
可以参照这个程序自己适当修改下
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
int buffer[3];
int rec_flag=0;
/*-------------------------------------------------------------*/
//串口初始化
void UART_Init(void)
{
TMOD = 0x21;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
IT0=0;
EX0=1;
}
/*-------------------------------------------------------------*/
//主函数
void main(void)
{
UART_Init(); //初始化串口
while(1)
{
}
}
void Communication_Decode(void)
{
if(buffer[0]==0x00)
{
switch(buffer[1])
{
case 0x01:P1=0xF6; return;
case 0x02:P1=0xF9; return;
case 0x03:P1=0xF5; return;
case 0x04:P1=0xFA; return;
case 0x00:P1=0x00; return;
default: return;
}
}
else
{
return;
}
}
/*-------------------------------------------------------------*/
//串口接收中断函数
void INT_UartRcv(void) interrupt 4
{
static int i;
if(RI==1)
{
RI = 0;
if(rec_flag==0)
{
if(SBUF==0xff)
{
rec_flag=1;
i=0;
}
}
else
{
if(SBUF==0xff)
{
rec_flag=0;
if(i==3)
{
Communication_Decode();
}
i=0;
}
else
{
buffer[i]=SBUF;
i++;
}
}
}
else
{
TI = 0;
}
}
这个协议是 FF00XX00FF 停止是FF000000FF 前进FF000100FF 后退FF000200FF以此类推,自己定义P1=多少就好
看看
