基于51单片机的蓝牙小车程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机的蓝牙小车程序

程序中有我写的注释,看不懂程序的话,可以参考。

#include

#define uchar unsigned char

#define uint unsigned int

uint PWM1,PWM2,num1=0,num2=0;

sbit IN1=P2^1;//左电机输入端1

sbit IN2=P2^2;//左电机输入端2

sbit IN3=P2^3;//右电机输入端1

sbit IN4=P2^4;//右电机输入端2

sbit ENA=P2^0;//右电机使能控制端

sbit ENB=P2^5;//左电机使能控制端

uint bht;//蓝牙

uint bht_mode=0,forward=0,backward=0,left=0,right=0,stop=0;

void Time0init() //定时器0的初始化函数,用于产生PWM,控制小车的速度{

TH0=0xff;//定时0.1ms

TL0=0xa3;

TMOD=0x01;//工作方式1

EA=1;//开总中断

ET0=1;//开定时器中断

TR0=1;//开定时器0中断

}

void time0() interrupt 1//定时计数器0

{

TH0=0xff;

TL0=0xa3;

num1++;

num2++;

if(num1==100) //PWM的周期为100*0.1=10ms

num1=0;

if(num2==100)

num2=0;

if(num1

ENA=1;//打开右电机使能控制端

if(num2

ENB=1;

if(num1>PWM1)

ENA=0;//关闭右电机使能控制端

if(num2>PWM2)

ENB=0;

}

void UsartInit()//定时计数器1的初始化子函数

{

TH1=0XFA;//计数器初始值设置,注意波特率是9600的

TL1=0XFA;

SCON=0X50;//设置为工作方式1

ES=1;//打开接收中断

EA=1;//打开总中断

TR1=1;//打开计数器

TMOD|=0X20;//设置计数器工作方式2 (特别注意第二次设置工作方式时要加或)

PCON=0X80;//波特率加倍

}

void usart() interrupt 4//串口中断子函数

{

bht=SBUF;//出去接收到的数据

RI = 0;//清除接收中断标志位

SBUF=bht;//将接收到的数据放入到发送寄存器

while(!TI);//等待发送数据完成

TI=0;

if(bht=='Y')//开关控制函数

{

bht_mode=1;//允许发送数据

forward=0;

backward=0;

left=0;

right=0;

stop=0;

}

if(bht=='N')//开关控制函数

{

bht_mode=0;

forward=0;

backward=0;

left=0;

right=0;

stop=0;

}

if(bht_mode==1)

{

if(bht=='f')//前进控制

{

forward=1;

backward=0;

left=0;

right=0;

stop=0;

}

else if(bht=='b')//后退控制

{

forward=0;

backward=1;

left=0;

right=0;

stop=0;

}

else if(bht=='l')//左转控制

{

forward=0;

backward=0;

left=1;

right=0;

stop=0;

}

else if(bht=='r')//右转控制

{

forward=0;

backward=0;

left=0;

right=1;

stop=0;

}

else if(bht=='s')//停止控制

{

forward=0;

backward=0;

left=0;

right=0;

stop=1;

}

}

else

{

forward=0;

backward=0;

left=0;

right=0;

stop=1;

}

}

void forwardg()//前进函数{

IN1=1;

IN2=0;

IN3=1;

IN4=0;

PWM1=25;//右轮

PWM2=20;

}

void backwardg()//后退函数

{

IN1=0;

IN2=1;

IN3=0;

IN4=1;

PWM1=20;

PWM2=20;

}

void leftg()//左转函数

{

IN1=1;

IN2=0;

IN3=1;

IN4=0;

PWM1=10;

PWM2=20;

}

void rightg()//右转函数

{

IN1=1;

IN2=0;

IN3=1;

IN4=0;

PWM1=20;

PWM2=10;

}

void stopg()//停止函数

{

IN1=1;

IN2=1;

相关文档
最新文档