1.环境的搭建
Proteus8.7版本,还有就是虚拟端口号的搭建,因为Proteus8.7没有蓝牙模块,蓝牙实际上就是一个串口,我们用虚拟串口代替蓝牙模块,Virtual Serial Port Driver Pro.exe虚拟串口的软件,文件夹里有安装步骤也有,在这儿就不多说了,BT-04A默认的波特率是9600bps,而我们用的是4800bps,因为我
用的是12Mhz的晶振,产生9600bps的误差太大不适合用(如果你用的11.0592HMhz的晶振,可以直接用,程序源码里面有怎么设置),用串口下载CH340G,连接上BT-04A,输入AT指令,改变波特率。
2.设计思路
l298n是驱动芯片,还得给电机提供电源,我们可以采用18650电池当电源,l298N的数据手册,文件里有具体说明。
一共四个数据输入,数据输出,如果有兴趣的朋友可以看看L298N的工作原理,我在这儿附上一张图,
3.程序源码
在最后附上所有的资料和所需要的的软件。
4.实验现象
都在文件夹里,如果还想增加其他功能,可以根据自己的需求添加。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
/*波特率 4800bps ,晶振用的12Mhz,BT04-A ,默认的是9600bps*/
/*如果这个程序源码修改为11.0592的晶振,那么proteus里面的compim也要修改为9600bps*/
#include
typedef unsigned char uchar;
typedef unsigned int uint;
sbit A_IA=P0^0;
sbit A_IB=P0^1;
sbit B_IA=P0^2;
sbit B_IB=P0^3;
sbit JDQ=P2^0;
void CarForward(); //前进
void CarBack(); //后退
void CarLeft(); //向左
void CarRight(); //向右
void CarStop(); //停止
void JDQ1(); //开灯
void JDQ2(); //关灯
void UsartInit(); //串口初始化
void delay1ms(uint c);
uchar receiveData; //接受的数据
void main()
{ JDQ=0;
UsartInit();
while (1);
}
void UsartInit()
{
TMOD |=0x20;
SCON =0x50;
PCON =0x80; //4800bps
TH1=0xf3; //如果你用的是9600bps,初值为TH1=0xFA;TH1=0xFA;
TL1=0xf3;
ES=1;
EA=1;
TR1=1;
}
void delay1ms(uint c)
{
uint a,b;
for(a=c;a>0;a--);
for(b=112;b>0;b--);
}
void CarForward()
{
A_IA=1;
A_IB=0;
B_IA=1;
B_IB=0;
}
void CarBack()
{
A_IA=0;
A_IB=1;
B_IA=0;
B_IB=1;
}
void CarLeft()
{
A_IA=0;
A_IB=0;
B_IA=0;
B_IB=1;
}
void CarRight()
{
A_IA=0;
A_IB=1;
B_IA=0;
B_IB=0;
}
void CarStop()
{
A_IA=0;
A_IB=0;
B_IA=0;
B_IB=0;
}
void JDQ1()
{
JDQ=1;
}
void JDQ2()
{
JDQ=0;
}
void Usart()interrupt 4
{
receiveData=SBUF; //接收数据
RI=0; //关闭计时器
SBUF=receiveData; //发送数据
while(!TI);
TI=0;
if(receiveData=='2')
CarForward();
else if (receiveData=='8')
CarBack();
else if(receiveData=='6')
CarLeft();
else if(receiveData=='4')
CarRight();
else if(receiveData=='5')
CarStop();
else if(receiveData=='0')
JDQ1();
else if(receiveData=='1')
JDQ2();
delay1ms(10) ;
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』