基于STC89C52的蓝牙遥控小车

说明:犹豫不想要太麻烦所以采用的最小系统板是直接购买的。

蓝牙小车采用HC05蓝牙模块,一个L298N电机驱动,还有4个直流TT电机,采用串口通讯进行数据的传递。采用3节3.7v锂电池供电。同侧的电机的正负极相接后再入L298N电机驱动以此来实现一个驱动控制四个电机。

下面是小车的程序:

// 电机 //由于再接线部分有些小问题因此在编写程序 //时对小车电机的转动程序做出了一定的调整

#include<reg52.h>

#define uchar unsigned char

sbit IN1=P0^1; sbit IN2=P0^2; sbit IN3=P0^3; sbit IN4=P0^4; sbit EN1=P0^5; sbit EN2=P0^6;

int A,dongli[4]={1,2,3,4},i;

void delay(unsigned int z); void delay(unsigned int aa);

void delay_us(unsigned int aa) { while(aa--); }

void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=114;y>0;y--); }

void timer0Init() //定时器0 { EA=1; TR0=1; ET0=1; REN=1; //允许串口接收 TMOD|=0X01; TH0=0XED; TL0=0XFF;//设置延迟时间 }

void chuankou ()//串口初始化 完成 { EA=1; ES=1; SM0=0; SM1=1; REN=1; //允许串口接收,软件复位 TR1=1; //启动定时器1 TMOD |= 0x20;//定时器1,工作模式2 8位自动重装 TH1 = 0xfd; TL1 = 0xfd;//设置比特率38400 }

void send(int s) //发送数据 {

SBUF= s; while(!TI); }

void qianjin() //前进 { IN1=1; IN2=0; IN3=0; IN4=1; } void houtui() //后退 { IN1=0; IN2=1; IN3=1; IN4=0; } void zuozhuan() //左转 { IN1=0; IN2=1; IN3=0; IN4=1; } void youzhuan() //右转 { IN1=1; IN2=0; IN3=1; IN4=0; } void tingzhi() //停车 { IN1=0; IN2=0; IN3=0; IN4=0; }

void UART ()interrupt 4//串口中断函数 //串口中断中接收数据 { if(RI) { A=SBUF; RI=0; switch(A) { case 0x01 :qianjin() ;break; case 0x03 :houtui() ;break; case 0x05 :zuozhuan();break; case 0x07 :youzhuan();break; case 0x09 :tingzhi() ;break; } } if(TI) TI=0;

}

void main() { // qianjin(); // delay(2000); // houtui(); // delay(2000); // zuozhuan(); // delay(2000); // youzhuan(); // delay(2000); // tingzhi(); // delay(2000); // timer0Init(); // chuankou (); timer0Init(); chuankou (); }

这是我第一次作东西,还有许多需要改进的地方,希望大家发现了多多指出。

经验分享 程序员 微信小程序 职场和发展