说明:犹豫不想要太麻烦所以采用的最小系统板是直接购买的。
蓝牙小车采用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 ();
}
这是我第一次作东西,还有许多需要改进的地方,希望大家发现了多多指出。
版权声明:本文为CSDN博主「四景浩荡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_58870406/article/details/121953809
说明:犹豫不想要太麻烦所以采用的最小系统板是直接购买的。
蓝牙小车采用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 ();
}
这是我第一次作东西,还有许多需要改进的地方,希望大家发现了多多指出。
版权声明:本文为CSDN博主「四景浩荡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_58870406/article/details/121953809
暂无评论