本人之前是一个人单片机小白,之前在贴吧上看见大神们做遥控小车,觉得好厉害,自己也在网上买了元件来制作。今天就来给大家分享我的小车制作过程。 一、材料准备 一块木板,大小按自己想做的小车的底盘 大小来。 四个电机、小车轮。 蓝牙模块HC-05一块 L298N电机驱动模块一块 单片机最小系统 STC89C52单片机一块 杜邦线 公对公 公对母若干 导线若干 二、组装过程 将之前准备好的木板用小锯片锯好, 然后将单片机最小系统。电机驱动模块,还有蓝牙模块组装好,
请忽略焊接点的,随手的 注意蓝牙模块的接收端与发射端不能接反,之前我接反了找了半天才找出问题来 有些电机驱动模块当输入电机电压高于8伏的的时候,模块自身就会有5伏的电压产生,此电压可输出给单片机及蓝牙模块用,我用的电池是拆充电宝的,一节3.7伏,两节电池串联起来, 请看视频
单片机源程序:
- #include <REGX52.H>
- sbit mal=P1^7; //第一电机左拐
- sbit mar=P1^6; //第一电机右拐
- sbit mbl=P1^5; //第二电机左拐
- sbit mbr=P1^4; //第二电机右拐
- sbit mc=P1^3; //第三个动力
- sbit md=P1^2; //第四个动力
- sbit d1=P3^5;
- sbit d2=P3^4;
- sbit led=P3^7;
- unsigned char numz=0;
- //舵机正脉宽500us~2500us,负脉宽为(20000us-正脉宽)
- //对应到定时器值461-2=459,到2713-2=2711 ,变化范围2252,如果每档变化125,可以有18档
- unsigned char d11=0,d10=0,d21=0,d20=0,da=0,db=0;
- void delayms(unsigned char ms)
- {
- unsigned char i;
- while(ms--)
- {
- for(i = 0; i < 120; i++);
- }
- }
- void main()
- {unsigned char i;
- for (i=0;i<=10;i++) //闪烁,以示主板工作正常
- {
- led=~led; delayms(2000);
- }
- TMOD=0x21; //使用定时器1和0
- SCON=0x50; //串口使用工作方式1
- TH1=0xfd; //串口的波特率,9600
- TL1=0xfd;
- //定时器0初始化
- TH0=0xff;
- TL0=0x82; //初始值125,cpu工作频率为11.0592M
- ET0=1; //允许定时中断
- TR0=1; //启动定时器0
- TR1=1; //打开定时器1
- EA=1; //打开中断总开关
- ES=1; //打开串口中断开关
- while(1){ }
- }
- void ck() interrupt 4
- {
- unsigned char a=0;
- EA=0;
- if(RI)
- { a=SBUF;
- switch(a)
- {
- case 'Z':numz++;break;
- case 'A':{if(numz==6){mal=1;mar=0;mbl=0;mbr=1;numz=0;led=~led;}}break; //前进
- case 'B':{if(numz==6){mal=1;mar=0;mbl=1;mbr=0;numz=0;led=~led;}}break; //左拐
- case 'C':{if(numz==6){mal=1;mar=1;mbl=1;mbr=1;numz=0;led=~led;}}break;//停
- case 'D':{if(numz==6){mal=0;mar=1;mbl=0;mbr=1;numz=0;led=~led;}}break;//右拐
- case 'E':{if(numz==6){mal=0;mar=1;mbl=1;mbr=0;numz=0;led=~led;}}break;//后退
- case 'F':{if(numz==6){md=~md; led=~led;}}break;
- case 'G':{if(numz==6){mc=~mc;led=~led;}}break;
- case 'H':{if(numz==6){ led=~led;}}break;
- case 'I':{if(numz==6){ numz=0;led=~led;}}break;
- case 'J':{if(numz==6){ numz=0;led=~led;}}break;
- case 'K':{if(numz==6){ numz=0;led=~led;}}break;
- case 'Y':numz=0;break;
- default:numz=0;
- }
- }
- RI=0; EA=1;
- }
- void time0(void) interrupt 1//定时器中断函数
- {
- TH0=0xff; //定时值125
- TL0=0x82;
- }
复制代码
所有资料51hei提供下载:
|