找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5135|回复: 4
收起左侧

新手必看(STC89C52)单片机寻迹避障蓝牙四轮小车的简单实现

  [复制链接]
ID:494288 发表于 2019-7-20 09:47 | 显示全部楼层 |阅读模式

一、 关于材料的选择           

      
     1.L289驱动电机x2
     2.1.5V电池(可以买充电电池,我用了几十个电池了!!!)我是用8节1.5v构成12v电池单独给4个电机供电,另外3节1.5v给单片机供电,4.5v与           5v差不多。
     3.底板加4马达(电机)。
     4.有条件可以用电钻(我是在各个店单独购买的,所以底板孔与器件孔不搭配,自己钻的)
     5.若干杜邦线,公对公 母对母 公对母都买X3应该足够了,最短就好了不需要那么长,但是有钱可以买X1
     6.淘宝上的板子STC89C52,有各种现成的接口,适合新手学习,学习过后可以自己焊板子。
     7.4个红外避障模块,2个寻迹模块,一个蓝牙模块。
     8.手机商城下个蓝牙串口来操作控制。
二、关于环境
     1.我用的 keil4 (能够编译查看代码是否正确。)
     2.下载stc-isp来烧程序(先断单片机电 然后烧 再开电,不然烧不起吧。)
     3.烧的程序名后缀是.Hex。
     4.usb-单片机线一根,我的是淘宝送的。
三、关于一些细节
     1.我用的是H桥来控制电机,比较普遍。
     2.因为我的小车电机是单独供电的,所以地线(12v的负极)要接在单片机的地线接口上!!
     3.杜邦线与线接口要处理好确保通电。
四、部分代码
sbit IN2 = P0^1;
sbit IN3 = P0^2;
sbit IN4 = P0^3;
sbit IN5 = P0^4;
sbit IN6 = P0^5;
sbit IN7 = P0^6;
sbit IN8 = P0^7;
                  

sbit Left_bizhang = P3^0;
sbit Right_bizhang = P3^1;
sbit Left_led=P3^2;
sbit Right_led=P3^3;

unsigned char pwm_val =0;
unsigned char push_val =0;

void delay(unsigned int k)
{
      unsigned int x,y;
          for(x=0;x<k;x++)
          {
             for(y=0;y<2000;y++);
           }
}

void run(void)
{
      push_val=3;
IN1=0;
IN2=1;        
IN3=0;
IN4=1;
IN5=1;        
IN6=0;
IN7=1;
IN8=0;        
}

void backrun(void)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
IN5=0;
IN6=1;
IN7=0;
IN8=1;
}

void leftrun(void)
{
      IN1=0;
IN2=0;
IN3=1;
IN4=0;
IN5=0;
IN6=1;
IN7=0;
IN8=0;
}
void rightrun(void)
{
     IN1=1;
IN2=0;
IN3=0;
IN4=0;
IN5=0;
IN6=0;
IN7=0;
IN8=1;
}
void stop(void)
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
IN5=0;
IN6=0;
IN7=0;
IN8=0;
}
void Che_init()
{
      P1=0x00;
          TMOD=0x01;
          TH0=0xFC;
          TH0=0x18;
          TR0=1;
          EA=1;
}
void UART_INIT()
{
        SM0 = 0;
        SM1 = 1;//串口工作方式1
        REN = 1;//允许串口接收
        EA = 1;//开总中断
        ES = 1;//开串口中断
        TMOD = 0x20;//8位自动重装模式
        TH1 = 0xfd;
        TL1 = 0xfd;//9600波特率
        TR1 = 1;//启动定时器1
}

void xunji(){

       while(1){
                        if(Left_led==1&&Right_led==1)
                {
                        ET0=1;
                        run();
                }
                else
                {
                        if(Left_led==0&&Right_led==1)
                        {
                                    IN1=0;
                                       
IN2=0;
IN3=0;
IN4=1;
IN5=1;
IN6=0;
IN7=0;
IN8=0;
                        }
                        if(Right_led==0&&Left_led==1)
                        {
                        
                                     IN1=0;
IN2=1;
IN3=0;
IN4=0;
IN5=0;
IN6=0;
IN7=1;
IN8=0;
                        }
                        
                }
                }
}
void bizhang(){

                  while(1)
        {
                run();
               
                 if(Left_bizhang==1&&Right_bizhang==1)
                 {
                         run();

                 }
                 else

                 {
                         if(Left_bizhang==1&&Right_bizhang==0)
                         {

                                 backrun();
                                 delay(50);
                                 leftrun();
                                delay(100);
                         }
                         if(Left_bizhang==0&&Right_bizhang==1)
                         {
                                 backrun();
                                 delay(50);
                                 rightrun();
                                delay(100);
                         }
                 }
        
        }
}
篇幅有限,完整代码请下载附件!!!!!!如下
寻迹避障蓝牙4轮小车代码.zip (1.26 KB, 下载次数: 115)

评分

参与人数 2黑币 +60 收起 理由
ycpiu + 10
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:654439 发表于 2019-12-2 17:07 | 显示全部楼层
我想问一下进入定时器中断0和1之后怎么跳回主函数啊。。。
回复

使用道具 举报

ID:642752 发表于 2019-12-2 20:25 | 显示全部楼层
每句后面有备注的话,就更好了。
回复

使用道具 举报

ID:810687 发表于 2020-8-2 23:06 | 显示全部楼层
资料很好,值得安利
回复

使用道具 举报

ID:526281 发表于 2020-10-30 08:24 来自手机 | 显示全部楼层
碎梦如烟丶 发表于 2019-12-2 17:07
我想问一下进入定时器中断0和1之后怎么跳回主函数啊。。。

如果是C程序的话,会自动返回(类似于跳出子程序);如果是汇编程序的话,读到“RETI”会返回
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表