在这期间对电路的接线改了一下,所以和上面的相比会有些变化,这个接口是用来充电和下载程序的。对了,那块黑黑的电池原来是 palm 手机的,单独用来给小电机供电。
装上外壳,准备收工了
蓝牙模块和接口放在炮塔里,虽然充电和下载有点麻烦,先不管那么多了
装好了!跟买回来的时候没啥两样。嘿嘿
尾部原来充电的地方改成了指示灯
当打开电源的时候,指示灯就按照设定的频率一闪一闪的,表示单片机正在工作,如果灯不闪或者闪烁有异常,说明电量不足或者单片机有问题了
来一个帅气的侧面照
霸气测漏的炮管。。。
虽然它各种霸气外漏,但归根到底还是一个死物,所以我们要用程序让它动起来
首先是 drive.h 头文件,声明了几个接口,分别是左转,右转,前进,后退。具体由drive.c来实现相应的功能。
- #ifndef __DRIVE_H__
- #define __DRIVE_H__
- void Left();
- void Right();
- void Forward();
- void Backward();
- void Stop();
- #endif
然后是 drive.c,里面负责控制相应的电路,来实现小电机的转向,从而实现小坦克的左右转,前后退等
- #include <reg52.h>
- #include "drive.h"
- sbit L_A = P1^7;
- sbit L_B = P1^6;
- sbit R_A = P1^5;
- sbit R_B = P1^4;
- void Left()
- {
- L_A = 1;
- L_B = 0;
- R_A = 0;
- R_B = 1;
- }
- void Right()
- {
- L_A = 0;
- L_B = 1;
- R_A = 1;
- R_B = 0;
- }
- void Forward()
- {
- L_A = 1;
- L_B = 0;
- R_A = 1;
- R_B = 0;
- }
- void Backward()
- {
- L_A = 0;
- L_B = 1;
- R_A = 0;
- R_B = 1;
- }
- void Stop()
- {
- L_A = 0;
- L_B = 0;
- R_A = 0;
- R_B = 0;
- }
- #include<reg51.h>
- #include "drive.h"
- sfr P1M1 = 0x91; //这两个是让P1口设置为推挽输出
- sfr P1M0 = 0x92;
- sbit L_A = P1^7; //定义L9110所接的引脚,关于L9110的详细驱动方式见其PDF(其实跟L298差不多)
- sbit L_B = P1^6;
- sbit R_A = P1^5;
- sbit R_B = P1^4;
- sbit led_pin = P3^5; //定义led所接的引脚
- unsigned char cmd; //全局变量,用于存放蓝牙传过来的命令
- void led() interrupt 1 //led闪烁函数,由定时器T0产生中断,大约1.5秒闪烁一下
- {
- unsigned char i;
- i++;
- if(i==15)
- {
- led_pin = !led_pin;
- i=0;
- }
- TH0 = (65536-50000)/256;
- TL0 = (65536-50000)%256;
- }
- void com() interrupt 4 //串口中断函数,当蓝牙传命令过来的时候执行
- {
- RI = 0;
- cmd = SBUF; //把收到的命令放到全局变量里面
- }
- void com_init() //串口初始化函数,波特率9600bps
- {
- TMOD = 0x00;
- TMOD = 0x21;
- TH1 = 0xfd;
- TL1 = 0xfd;
- TR1 = 1;
- REN = 1;
- SM0 = 0;
- SM1 = 1;
- EA = 1;
- ES = 1;
- }
- void led_init() //定时器0初始化函数,用于led闪烁
- {
- TH0 = (65536-50000)/256;
- TL0 = (65536-50000)%256;
- ET0 = 1;
- TR0 = 1;
- }
- void main() //主函数
- {
- P1M1 = 0x00; //设置P1口为推挽输出模式
- P1M0 = 0xff;
- com_init(); //串口初始化
- led_init(); //led闪烁定时器初始化
- while(1) //死循环,等待蓝牙传命令过来
- {
- switch(cmd) //判断收到的命令是干嘛的,其中 1 是前进 2是后退 3是右转 4是左转,0是停止,以后还可以扩展其他的功能
- {
- case 1:Forward();break; //前进
- case 2:Backward();break; //后退
- case 3:Right();break; //右转
- case 4:Left();break; //左转
- case 0:Stop();break; //停止
- }
- }
- }
程序写完后在keil 里编译一下,然后下载到单片机就OK了。