1.串口初始化
void UART_Init(void) //函数初始化。9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
//AUXR |= 0x40; //定时器1时钟为Fosc,即1T(删除。高级的单片机才有这个选项)
//AUXR &= 0xFE; //串口1选择定时器1为波特率发生器(删除。高级的单片机才有这个选项)
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA=1; // CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。
ES=1; //串行口中断允许位,ES=1,允许串行口中断,ES=0,禁止串行口中断。
}
2.配置端口及驱动程序
sbit IN1=P0^0;
sbit IN2=P0^1;
sbit IN3=P0^2;
sbit IN4=P0^3;
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void forward()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void back()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void left()
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
}
void right()
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
}
3.主函数
void main()
{
UART_Init();
while(1)
{
}
}
4.中断函数
void UART_Routine() interrupt 4 //8个中断请求源中的串口中断。
{
unsigned char S; //定义一个S存放 SBUF中的数据。
if(RI==1) //判断接收中断请求标志位,TI为1 表示用开始可以开始接收了。
{
stop(); //电机控制,先停止再执行指令。
S=SBUF; //手机蓝牙信号发送指令 储存在SBUF中。从SBUF里面 拿出指令赋给S。
switch(S)
{
case ('1'): //判断S中是不是指令“1”
forward();break;
case ('2'): //判断S中是不是指令“2”
back();break;
case ('3'):
left();break;
case ('4'):
right();break;
case ('0'):
stop();break;
}
RI=0; //单片机接收中断请求标志位,接收完之后自动变为1,接收完成之后要手动置为0。为0下次才可以接收。
}
注意:
1.中断函数里面的1,2,3,4,0要在手机蓝牙APP中设置。
2.手机蓝牙APP中设置,按下按键/松开按键,电机转动的。
????????或者按下按键电机转动,松开按键 电机停止等。
完整代码:
#include <REGX52.H>
sbit IN1=P0^0;
sbit IN2=P0^1;
sbit IN3=P0^2;
sbit IN4=P0^3;
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void forward()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void back()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void left()
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
}
void right()
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
}
void UART_Init(void)
{
PCON &= 0x7F;
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
TL1 = 0xFD;
TH1 = 0xFD;
ET1 = 0;
TR1 = 1;
EA=1;
ES=1;
}
void main()
{
UART_Init();
while(1)
{
}
}
void UART_Routine() interrupt 4
{
unsigned char S;
if(RI==1)
{
stop();
S=SBUF;
switch(S)
{
case ('1'):
forward();break;
case ('2'):
back();break;
case ('3'):
left();break;
case ('4'):
right();break;
case ('0'):
stop();break;
}
RI=0;
}
}
接线:
51单片机蓝牙小车接线(L298N供电,分别电源供电)
|