找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3266|回复: 1
打印 上一主题 下一主题
收起左侧

蓝牙遥控/循迹智能小车(手机切换)程序 “蓝牙串口”APP

[复制链接]
跳转到指定楼层
楼主
ID:417109 发表于 2018-12-21 21:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                                                  
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int


uchar Buffer[7] = {0}; //从串口接收的数据
uint i,j;
uint lan,xun;

sbit y1=P1^0;//定义单片机连接循迹板右1光电管的引脚
sbit y2=P1^1;//定义单片机连接循迹板右2光电管的引脚
sbit z1=P1^2;//定义单片机连接循迹板左1光电管的引脚
sbit z2=P1^3;//定义单片机连接循迹板左2光电管的引脚

sbit zuo1=P2^2;
sbit zuo2=P2^3;
sbit you1=P2^1;
sbit you2=P2^0;


void Delay_1ms(uint i)//1ms延时
{
        uchar m,n;
        for(n=0;n<i;n++)
        for(m=0;m<=148;m++);
}

void delay(int z)//pwm中使用的延时函数
{
        int i,j;
        for(i=2;i>0;i--)
        for(j=z;j>0;j--);       
}

void Com_Int(void) interrupt 4
{       
        EA = 0;
        if(RI == 1) //当硬件接收到一个数据时,RI会置位
                {
                if(SBUF==51) //这里减去48是因为从电脑中发送过来的数据是ASCII码。 Buffer[0] = SBUF - 48;
                  {
                          Buffer[0] = 3;           //        A
                  }
                if(SBUF==52)
                  {
                          Buffer[0] = 4;           //   D
                  }
                if(SBUF==50)
                  {
                          Buffer[0] = 2;          //        S
                  }
                if(SBUF==49)
                  {
                          Buffer[0] = 1;           //        W
                  }
                if(SBUF==53)
                  {
                          Buffer[0] = 5;           //        E 2
                  }
                if(SBUF==54)
                  {
                          Buffer[0] = 6;
                    lan=1;
                        xun=0;
                  }
                if(SBUF==55)
                  {
                          Buffer[0] = 7;
                    lan=0;
                        xun=1;
                  }
                if(SBUF==56)
                  {
                          Buffer[0] = 8;          
                  }
                if(SBUF==57)
                  {
                          Buffer[0] = 9;          
                  }

                RI = 0;
                }
        EA = 1;
}

void Com_Init(void)
{
        TMOD = 0x20;
        PCON = 0x00;
        SCON = 0x50;
        TH1 = 0xFd; //设置波特率 9600
        TL1 = 0xFd;
        TR1 = 1; //启动定时器1
        ES = 1; //开串口中断
        EA = 1; //开总中断
}

void qianjin()
{
        you1=0;
        you2=1;
        zuo1=0;
        zuo2=1;
}

void houtui()
{
        you1=1;
        you2=0;
        zuo1=1;
        zuo2=0;
}

void zuozhuan()
{
        you1=0;
        you2=1;
        zuo1=1;
        zuo2=0;
}

void youzhuan()
{
        you1=1;
        you2=0;
        zuo1=0;
        zuo2=1;
}


void tingche()
{
        you1=0;
        you2=0;
        zuo1=0;
        zuo2=0;
}


void qian()//左右轮协同前进子函数
{
        you1=0;
        you2=1;
        zuo1=0;
        zuo2=1;
        delay(5);//pwm调速 此为pwm有效值,前进时速度为全速的90%
        you1=1;
        you2=1;
        zuo1=1;
        zuo2=1;
        delay(10-5);        
}
void you()//左右轮协同  右转子函数
{
        you1=0;
        you2=1;
        zuo1=1;
        zuo2=0;
        delay(5);//pwm调速 此为pwm有效值,前进时速度为全速的80%
        you1=1;
        you2=1;
        zuo1=1;
        zuo2=1;
        delay(10-5);
}
void zuo()//左右轮协同  左转子函数
{
        you1=1;
        you2=0;
        zuo1=0;
        zuo2=1;
        delay(5);//pwm调速 此为pwm有效值,前进时速度为全速的80%
        you1=1;
        you2=1;
        zuo1=1;
        zuo2=1;
        delay(10-5);
}
void ting()//左右轮都停止转动
{
        you1=1;
        you2=1;
        zuo1=1;
        zuo2=1;
        delay(50000);
}

void main()
{
    while(1)
{
        if(xun==0)
       {Delay_1ms(100);
        Com_Init();//串口初始化                                                                                       
                switch(Buffer[0])
                {
                        case 5: tingche(); break;
                        case 1: qianjin(); break;
                        case 2: houtui(); break;
                        case 3: zuozhuan(); break;
                        case 4: youzhuan(); break;
                        default:break;
          }
        }
        while(lan==0)
        {  
           Com_Init();
           y1=1;
           y2=1;
           z1=1;
           z2=1;
                                                                  
                                qian();//调用前进子函数,使小车光电管不满足以下几个条件时都处于前进状态
                                while(((z1==1)&&(z2==1)&&(y1==0)&&(y2==0))||((z1==1)&&(z2==0)&&(y1==0)&&(y2==0))||((z1==0)&&(z2==1)&&(y2==0)&&(y2==0)))//判断当左边光电管遇到黑线时
                                {                                                       
                                        zuo();//调用左转子函数
                                }
                                while(((z1==0)&&(z2==0)&&(y1==1)&&(y2==1))||((z1==0)&&(z2==0)&&(y1==0)&&(y2==1))||((z1==0)&&(z2==0)&&(y1==1)&&(y2==0)))//判断当右边光电管遇到黑线时
                                {       
                                        you();//调用右转子函数
                                }
                                while((z1==1)&&(z2==1)&&(y1==1)&&(y2==1))//判断当左、右光电管均遇到黑线,前光电管时
                                {
                               
                                        ting();                          //即遇到T字路口时 停止
                                       
                                }
                                               
        }
}
}

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:342461 发表于 2018-12-23 15:23 | 只看该作者
求分享一波
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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