基于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 (); }
这是我第一次作东西,还有许多需要改进的地方,希望大家发现了多多指出。
