#include
void UsartConfiguration();
unsigned char num;
void delay(unsigned int i) //延时函数,下面我说的500毫秒,现实不是500毫秒,方便大家理解而已
{
unsigned int k;
for (k=0;k
}
void main() //主函数
{
UsartConfiguration(); //调用蓝牙接受的参数
while(1)
{
/**********************直走*************************************/
if(num == 'q') //如果蓝牙接收到q字母,就执行下面的指令
{
delay(500); //延时一下
if(num == 'q')
{ //p1 1 1 1 1 分别对应1234号马达
P1=0x0f; // 0 0 0 0 上面是高电平,下面是低电平,四个马达都会向前开
delay(500); //延时降速,如果L298N是接12V的电源,那么马达的电压是12v,速度太快了,需要降速
P1=0x00; //这里降速的原理是让马达转500毫秒,停一下,转500毫秒,停一下,转500毫秒,停一下,从而达到降速的效果
}
}
/*****************************后退 ***************/
if(num == 'h') //如果蓝牙接收到h字母,就执行下面的指令
{
delay(500);
if(num == 'h')
{ //p1 0 0 0 0 分别对应1234号马达
P1=0xf0; // 1 1 1 1 上面是低电平,下面是高电平,四个马达都会向后开
delay(500);
P1=0x00;
}
}
/*****************原地左转 原地左转 原地左转 原地左转 原地左转 原地左转 原地左转 原地左转 原地左转 *****************/
if(num == 'z') //如果蓝牙接收到z字母,就执行下面的指令
{
delay(500);
if(num == 'z')
{ //p1 0 1 0 1 马达2 4向前开,马达1 3向后开
P1=0x5a; // 1 0 1 0
delay(500);
P1=0x00;
}
}
/****************原地右转 ************************************/
if(num == 'y') //如果蓝牙接收到y字母,就执行下面的指令
{
delay(500);
if(num == 'y')
{ //P1 1 0 1 0 马达13向前开,马达24向后开
P1=0xa5; // 0 1 0 1
delay(500);
P1=0x00;
}
}
/****************向左开 ******************************/
if(num == 'a') //如果蓝牙接收到a字母,就执行下面的指令
{
delay(500);
if(num == 'a')
{
P1=0x5a; //小车左转600毫秒
delay(600);
P1=0x0f; //小车直行1200毫秒
delay(1200);
P1=0x00;
}
}
/****************向右开*****************************/
if(num == 'b') //如果蓝牙接收到b字母,就执行下面的指令
{
delay(500);
if(num == 'b')
{
P1=0xa5;
delay(600);
P1=0x0f;
delay(1200);
P1=0x00;
}
}
/******************没指令的时候停车***************************/
if(num == '0') //如果蓝牙接收到数字0,就执行下面的指令
{
P1=0x00; //p1的8个口都是低电平,小车停下来
}
}
}
void UsartConfiguration()
{
SCON=0x50; //设置为工作方式1
TMOD=0x20; //设置为工作方式2
// PCON=0x80; //波特率加倍
TH1=0xFD; //计数器初值设置,波特率是4800
TL1=0xFD;
ES=1; //开中断
EA=1;
TR1=1; //开计数器
}
void interrupt_uart() interrupt 4 //using1切换寄存器组到1,进入中断就要判断是发送中断TI,还是接收中断RI。
{
if(TI) //判断是否为发送端TI中断,中断结束之后,只需发送端清零,表示发送完成。
{
TI = 0;
REN = 1; // ******允许接收数据。 *******
}
if(RI) //判断是否为接收端RI中断,中断结束之后,只需接收端清零,表示接收完成。
{
RI = 0; //只要数据接收端清零,就可以取出数据。
num = SBUF; //SBUF取数据
SBUF = num; //*******把数据num从SBUF送出去。************
REN = 0; //严谨的写法,发送数据的时候禁止接收数据。
}
//发送的时候不接收数据 ,发送完了再接收数据。
}