/*****************************************************/
/********版权所有:爱电工作室 任先生 **********/
/********** 蓝牙小车程序 ************************/
// 接口连接:
// 电机接口(4电机两两相连 并为两组)
// P0.4和P0.5-----左电机
// P0.6和P0.7-----右电机
#include <reg52.h>
void UsartConfiguration();
unsigned char num;
sbit zuo1=P0^4; //定义单片机控制左边电机的引脚
sbit zuo2=P0^5; //定义单片机控制左边电机的引脚
sbit you1=P0^6;//定义单片机控制右边电机的引脚
sbit you2=P0^7; //定义单片机控制右边电机的引脚
void delay(unsigned int i)
{ unsigned int k;
for (k=0;k<i;k++);
}
void main() //主函数
{
UsartConfiguration(); //调用蓝牙接受的参数
while(1)
{
if(num == 'q') //如果蓝牙接收到q字母,就执行下面的指令
{
if(num == 'q') //前进
{
zuo1=0;
zuo2=1;
you1=1;
you2=0; // 0 1 1 0
delay(50); //如果L298N是接12V的电源,那么马达的电压是12v,速度太快了,需要降速
}
}
if(num == 'h') //如果蓝牙接收到h字母,就执行下面的指令
{
if(num == 'h') //后退
{
zuo1=1;
zuo2=0;
you1=0;
you2=1; // 1 0 0 1 // 1 1 1 1 上面是低电平,下面是高电平,四个马达都会向后开
delay(50);
}
}
if(num == 'z') //如果蓝牙接收到z字母,就执行下面的指令
{
if(num == 'z') //原地左转
{
zuo1=1;
zuo2=0;
you1=1;
you2=0; //1 0 1 0
delay(50);
}
}
if(num == 'y') //如果蓝牙接收到y字母,就执行下面的指令
{
if(num == 'y') //原地右转
{ zuo1=0;
zuo2=1;
you1=0;
you2=1; //0 1 0 1
delay(50);
}
}
//测试程序
if(num == 'b') //如果蓝牙接收到b字母,就执行下面的指令
{
if(num == 'b')
{
zuo1=0; //左转
zuo2=1;
you1=0;
you2=1;
delay(500); //前进
zuo1=0;
zuo2=1;
you1=1;
you2=0;
delay(800);
}
}
if(num == 'c') //如果蓝牙接收到b字母,就执行下面的指令
{
if(num == 'c')
{
zuo1=1; //右转
zuo2=0;
you1=1;
you2=0;
delay(500); //前进
zuo1=0;
zuo2=1;
you1=1;
you2=0;
delay(800);
}
}
if(num == '0') //停车 //如果蓝牙接收到数字0,就执行下面的指令
{
zuo1=0;
zuo2=0;
you1=0;
you2=0;
}
}
}
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; //严谨的写法,发送数据的时候禁止接收数据。
}
//发送的时候不接收数据 - ,发送完了再接收数据。
}
|