C51蓝牙小车制作及代码

C51蓝牙小车

1.材料:
4WD板子,L298N电机驱动模块,稳压模块,C51(2)芯片,芯片底座,HC-05蓝牙模块,杜邦线,三节3.7V充电电池,一个DC电池盒。
注意:4WD底板有4个130马达,所以L298N需要两个,单片机供电为5V,蓝牙模块供电为3.6到6V之间,故用稳压模块是为蓝牙模块和C51芯片供电。130马达可以承受11V左右的电压但建议用PWM降压让它维持在8V左右的电压。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.关于接线:在这里插入图片描述
我圈起来的就是重点了,首先一个L298N直接将11V电压接入(先了解下L298N的工作原理)再并联一个L298N,其他的控制线接入单片机底座,接着就是蓝牙模块的RXD对应TXD,TXD对应RXD接入。
3.关于蓝牙模块:
首先拿到模块后用软件修改波特率,主要是自己能知道是多少的波特率(建议9600pbs)。CSDN有专门的软件下载,这里不过多讲解。
4.代码:

/*
晶振Fosc: 11.0592Mhz ,{ Tm = 12 * T(晶振)  =====>>>> Fm = Fosc/12 }
芯片:STC89C52 
*/
#include <reg52.h>
//right
sbit IN5 = P1^0;
sbit IN6 = P1^1;
sbit IN7 = P1^2;
sbit IN8 = P1^3;
//left
sbit IN1 = P0^0;   //0000 1010正转
sbit IN2 = P0^1;   //0000 0101
sbit IN3 = P0^2;  
sbit IN4 = P0^3;
char buffer = 0;   //从蓝牙处接受数据 
int demu = 7,num;  //demu是设置占空比的参数 
void init()        //初始化:波特率的设置与要蓝牙的波特率一致 
{                                                     
    SCON =0x50;    //10位串口,可变波特率                 
    TMOD =0x20;    
    //PCON=0x00;   //SMOD == 0,波特率不加倍
    TH1=0xfd;		//9600bps
    TL1=0xfd;
    //TH0=0xff;     
    //TH0=0x17; 
    TH0 = (65536 - 461)/256;    //定时500us,发生PWM
	TL0 = (65536 - 461)%256;	//T0计数器的初始值是多少,不用太关心 
    EA=1;
    ES=1;
    ET0=1; 
    TR0=0;        //刚上电时避免转动 
    TR1=1; 
}
void adjust()    //控制方向 
{
	 switch(buffer)
	 {
		 case 'S':  //停止 
			P0 = 0x00;
            P1 = 0X00;
		    TR0 = 0;
		 break;
		 case 'G':   //前进 
			TR0 = 1;
		    P0 = 0X0A;
		    P1 = 0X0A;
		 break;
		 case 'B':  //后退 
			TR0 = 1;
			P0 = 0X05;  //0000 0101
		    P1 = 0x05;
		 break;
		 case 'L':  //左转 
			TR0 = 1;
			P0 = 0X0A;
		    P1 = 0X00;
		 break;
		 case 'R':  //右转 
			TR0 = 1;
		    P1 = 0X0A;   //0000 1010
		    P0 = 0X00;
		 break;
		 case '1':	 //档位 
			TR0 = 1;
			demu = 7;
	        P0 = 0X00;
		    P1 =0X00;
		 break;
		 case '2':  
		    TR0 = 1;
		    demu = 10;
	        P0 = 0X00;
		    P1 =0X00;
		 break;
		  case '3':
			TR0 = 1;
			demu = 14;
	        P0 = 0X00;
		    P1 =0X00;
		 break; 
	 }
}
main()
{
	 init();
   while(1)
	 {
		  adjust();
	 }		 
}
void UartIsr() interrupt 4
{
	 if(RI)		//TI和RI只能用软件清零
	 {
	     RI=0;
		 buffer = SBUF;		//SBUF是数据缓存寄存器
	 }
}
void timer0() interrupt 1
{
	  TH0 = (65536 - 461)/256;    // 461 * Tm = 500us
	  TL0 = (65536 - 461)%256;
	 ++num; 
	if(num<=demu)    //高电平由adjust函数来决定 
	{
 }
	else
	{
	  P1 = 0X00;
		P0 = 0X00;
	}
	if(num==20)      //周期:10ms 
		num = 0;
}		

5.结束语:程序有什么不懂的欢迎留言,第一次做小车还是有很多收获。只要坚持你所热爱的,你就会得到你意想不到的收获。
链接: [link]https://blog.csdn.net/qq_45955402

  • 17
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
根据提供的引用内容,我们可以得知该问题是关于C51智能小车红外循迹代码的。下面是一个简单的C51智能小车红外循迹代码的例子: ```c #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit IN1 = P1^0; //定义IN1为P1.0口 sbit IN2 = P1^1; //定义IN2为P1.1口 sbit IN3 = P1^2; //定义IN3为P1.2口 sbit IN4 = P1^3; //定义IN4为P1.3口 sbit IR1 = P3^2; //定义IR1为P3.2口 sbit IR2 = P3^3; //定义IR2为P3.3口 sbit IR3 = P3^4; //定义IR3为P3.4口 sbit IR4 = P3^5; //定义IR4为P3.5口 sbit IR5 = P3^6; //定义IR5为P3.6口 void delay(uint xms) //延时函数 { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void main() { while(1) { if(IR3==0&&IR4==0) //当IR3和IR4都检测到黑线时,小车直行 { IN1 = 1; IN2 = 0; IN3 = 1; IN4 = 0; } else if(IR3==0&&IR4==1) //当IR3检测到黑线,IR4检测到白线时,小车左转 { IN1 = 0; IN2 = 0; IN3 = 1; IN4 = 0; } else if(IR3==1&&IR4==0) //当IR3检测到白线,IR4检测到黑线时,小车右转 { IN1 = 1; IN2 = 0; IN3 = 0; IN4 = 0; } else //当IR3和IR4都检测到白线时,小车停止 { IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 0; } delay(10); //延时10ms } } ``` 该代码使用了P1口和P3口来控制小车的电机和红外传感器。当IR3和IR4都检测到黑线时,小车直行;当IR3检测到黑线,IR4检测到白线时,小车左转;当IR3检测到白线,IR4检测到黑线时,小车右转;当IR3和IR4都检测到白线时,小车停止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ho_Yim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值