找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1683|回复: 1
收起左侧

单片机蓝牙小车程序(带详细注释)

[复制链接]
ID:147069 发表于 2019-4-10 15:04 | 显示全部楼层 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit zuo1=P2^0;//定义控制左边电机的单片机引脚
sbit zuo2=P2^1;//定义控制左边电机的单片机引脚
sbit you1=P2^2;//定义控制右边电机的单片机引脚
sbit you2=P2^3;//定义控制右边电机的单片机引脚
uchar a=0;//定义一个变量a用来读取串口的数据
void delay(uint z)//一个带参数的延时程序
{
        int i,j;
        for(i=10;i>0;i--)
                for(j=z;j>0;j--);               
}
void init()//初始化子程序
{
        TMOD=0x20; //设置定时器T1为工作方式2
        TH1=0xfd;
        TL1=0xfd;//T1定时器装初值
        TR1=1;//启动定时器T1                                                   
        REN=1;//允许串口接收
        SM0=0;
        SM1=1;//设置串口工作方式1
        EA=1; //开总中断
        ES=1;//开串口中断
}
void go()
{
        zuo1=0;
        zuo2=1;//左边轮子正转
        delay(60);//PWM有用值,越大左边轮子转得越快
        zuo1=1;//关闭左边轮子

        you1=0;
        you2=1;//右边轮子正转
        delay(60);//PWM有用值,越大右边的轮子越快
        you1=1;//关闭6右边轮子
        delay(100);//PWM无用值,越大,小车跑的越慢
}
void hui()
{
        zuo1=1;
        zuo2=0;//左边轮子倒转
        delay(60);//PWM有用值,越大左边轮子越快
        zuo2=1;//关闭左边轮子

        you1=1;
        you2=0;//右边轮子倒转
        delay(60);//PWM有用值,越大右边轮子越快
        you2=1;//关闭右边轮子
        delay(100);//PWM无用值,越大,小车跑的越慢
}
void turnleft()//小车左转程序
{
        zuo1=1;
        zuo2=0;        //左轮制动
        delay(35);
        zuo2=1;

        you1=0;
        you2=1;        //右轮正转
        delay(35); //PWM有用值,越大,右轮越快
        you1=1;           //右轮停止

        delay(100);//PWM无用值,越大,小车跑的越慢
}

void turnright()//小车右转程序
{
        zuo1=0;
        zuo2=1;        // 左边轮子正转
        delay(35);//PWM有用值,越大,左边轮子越快

        zuo1=1;        // 左轮停止

        you1=1;
        you2=0;          //右轮停止
        delay(35);
        you2=1;

        delay(100);//        PWM无用值,越大,小车跑的越慢
}

void down()//停止程序
{
        zuo1=1;
        zuo2=1;
        you1=1;
        you2=1;
}

void main()//主程序
{

        init();//调用初始化子程序
        while(1) //死循环
        {
                switch(a)//判断a从串口读取到的数据
                {
                case 0x4f: //0x1f 前进
                go();
                break;
               
                case 0x3f: //0x2f 后退
                hui();
                break;
               
                case 0x2f: // 0x3f 左转
                turnleft();
                break;
               
                case 0x1f: //0x4f右转
                turnright();
                break;
               
                case 0x00: //0x00停止
                down();
                break;
                }
                        
        }
}

void chuan()interrupt 4//串口中断服务
{
        RI=0;//软件清除串口响应
        a=SBUF;//读取单片机串口接收的蓝牙模块发送的数据
}

蓝牙小车.zip

34.75 KB, 下载次数: 21, 下载积分: 黑币 -5

回复

使用道具 举报

ID:1 发表于 2019-4-10 18:26 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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