找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2093|回复: 0
收起左侧

蓝牙+避障+转速的小车程序

[复制链接]
ID:236125 发表于 2017-11-24 21:23 | 显示全部楼层 |阅读模式
没有下载到实际小车中,不知道哪儿有错误,请帮我指出一下谢谢#include<reg51.h>
#define  uint  unsigned int
#define  uchar unsigned char

unsigned char dj1=0;
unsigned char dj2=0;

sbit IN3=P0^1;                //右轮
sbit IN4=P0^2;  
sbit ENB=P0^0;                //使能端A

sbit IN1=P1^1;                //左轮
sbit IN2=P1^2;  
sbit ENA=P1^0;                 //使能端B

sbit left_ir=P3^2;//避障
sbit right_ir=P3^3;
int a,i,t;
//正转
void zhengzhuan()
{

        IN1=0;
        IN2=1;
        IN4=0;
        IN3=1;
        dj1=10;
    dj2=10;
}
void  houtui()//后退
{
    IN1=1;
        IN2=0;
        IN4=1;
        IN3=0;
    dj1=9;
    dj2=9;
}
void  stop()//停止
{
   IN1=0;
   IN2=0;
   IN4=0;
   IN3=0;
   dj1=0;
   dj2=0;
}
void left()//左转
{
   IN1=0;
   IN2=0;
   IN4=0;
   IN3=1;
   dj1=9;
   dj2=26;
}
void right()//右转
{
   IN1=0;
   IN2=1;
   IN4=0;
   IN3=0;
   dj1=28;
   dj2=9;
}
void  bizhang()//避障
{
     if(left_ir==0&&right_ir==0)
         {
                   houtui();
         }
         else if(left_ir==0&&right_ir==1)
         {
             right();
        }
        else if(left_ir==1&&right_ir==0)
        {
            
             left();
        }
        else
        {
            zhengzhuan();
        }
}
void init()//初始化
{
        IP=0x20;
        TMOD=0x20;//设置定时器T1为工作方式2
        TH1=0xfd;
        TL1=0xfd;//T1定时器装初值
        TR1=1;//启动定时器T1
        REN=1;//允许串口接收
        SM0=0;
        SM1=1;//设置串口工作方式1
        EA=1;//开总中断
        ES=1;//开串口中断
}
void init_T0()
{
         IP=0x10;
     TMOD=0x22;
     TH0=(65536-250)/256;
     TL0=(65536-250)%256;
     TR0=1;
     ET0=1;
}

void main()
{
   init_T0();
    init();
        while(1)
        {
                    bizhang();
                        if(a==0x14||a==0x15||a==0x54||a==0x55||a==0x64||a==0x65)//如果是就前进
                   zhengzhuan();
                            if(a==0x16||a==0x17||a==0x56||a==0x57||a==0x66||a==0x67)//如果是就后退
                   houtui();
                            if(a==0x18||a==0x19||a==0x58||a==0x59||a==0x68||a==0x69)//如果是就停止
                   stop();
                if(a==0x1a||a==0x1b||a==0x5a||a==0x5b||a==0x6a||a==0x6b)//如果是就左转
                    left();
                 if(a==0x1c||a==0x1d||a==0x5c||a==0x5d||a==0x6c||a==0x6d)//如果是就右转
                    right();
        }
}
void T1_time() interrupt 4
{
       RI=0;
           a=SBUF;
}
void timer0() interrupt 1                //定时器0中断
{
        TH0=(65536-250)/256;
        TL0=(65536-250)%256;
        t++;
        if(t<dj1)        
        ENA=1;
        else        
        ENA=0;
        if(t<dj2)
        ENB=1;
        else        
        ENB=0;
        if(t>=50)
        {
           t=0;
        }
}
          

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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