找回密码
 立即注册

QQ登录

只需一步,快速开始

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

蓝牙小车程序_1

  [复制链接]
跳转到指定楼层
楼主
ID:80183 发表于 2015-5-16 19:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>//声明头文件
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义

sbit deng=P2^0;//定义车灯的控制引脚
sbit z=P2^1;//定义左转向灯的控制引脚
sbit y=P2^2;//定义右转向灯的引脚
sbit BEEP=P2^3;//定义蜂鸣器的引脚

sbit zuo1=P0^0;//定义控制左边电机的单片机引脚
sbit zuo2=P0^1;//定义控制左边电机的单片机引脚
sbit you1=P0^2;//定义控制右边电机的单片机引脚
sbit you2=P0^3;//定义控制右边电机的单片机引脚
uchar a=0;//定义一个变量a,用来读取串口的数据

void delay(uint z)//一个带参数的延时程序
{
        int i,j;//定义两个变量
        for(i=10;i>0;i--)
        for(j=z;j>0;j--);//将参数z赋值给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 go1()//前进子程序
{
        zuo1=0;
        zuo2=1;//左边轮子正转
        delay(24);//pwm有用值,越大左边方向的轮子越快
        zuo1=1;//关闭左边轮子

        you1=0;
        you2=1;        //右边轮子正转
        delay(26);//pwm有用值,越大右边的轮子越快
        you1=1;//关闭右边轮子

        delay(100);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}

void go2()//前进子程序
{
        zuo1=0;
        zuo2=1;//左边轮子正转
        delay(24);//pwm有用值,越大左边方向的轮子越快
        zuo1=1;//关闭左边轮子

        you1=0;
        you2=1;        //右边轮子正转
        delay(26);//pwm有用值,越大右边的轮子越快
        you1=1;//关闭右边轮子

        delay(80);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}

void go3()//前进子程序
{
        zuo1=0;
        zuo2=1;//左边轮子正转
        delay(24);//pwm有用值,越大左边方向的轮子越快
        zuo1=1;//关闭左边轮子

        you1=0;
        you2=1;        //右边轮子正转
        delay(26);//pwm有用值,越大右边的轮子越快
        you1=1;//关闭右边轮子

        delay(60);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}

void go4()//前进子程序
{
        zuo1=0;
        zuo2=1;//左边轮子正转
        delay(24);//pwm有用值,越大左边方向的轮子越快
        zuo1=1;//关闭左边轮子

        you1=0;
        you2=1;        //右边轮子正转
        delay(26);//pwm有用值,越大右边的轮子越快
        you1=1;//关闭右边轮子

        delay(40);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}

void go5()//前进子程序
{
        zuo1=0;
        zuo2=1;//左边轮子正转
        delay(24);//pwm有用值,越大左边方向的轮子越快
        zuo1=1;//关闭左边轮子

        you1=0;
        you2=1;        //右边轮子正转
        delay(26);//pwm有用值,越大右边的轮子越快
        you1=1;//关闭右边轮子

        delay(20);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}

void go6()//前进子程序
{
        zuo1=0;
        zuo2=1;//左边轮子正转
        delay(24);//pwm有用值,越大左边方向的轮子越快
        zuo1=1;//关闭左边轮子

        you1=0;
        you2=1;        //右边轮子正转
        delay(26);//pwm有用值,越大右边的轮子越快
        you1=1;//关闭右边轮子

        z=1;
        y=1;//关闭转向灯
}

void hui1()//小车后退的子程序
{
        zuo1=1;
        zuo2=0;//左边轮子倒转
        delay(23);//pwm有用值,越大左边方向的轮子越快
        zuo2=1;//关闭左边轮子

        you1=1;
        you2=0;        //右边轮子倒转
        delay(26);//pwm有用值,越大右边的轮子越快
        you2=1;//关闭右边轮子

        delay(100);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}

void hui2()//小车后退的子程序
{
        zuo1=1;
        zuo2=0;//左边轮子倒转
        delay(23);//pwm有用值,越大左边方向的轮子越快
        zuo2=1;//关闭左边轮子

        you1=1;
        you2=0;        //右边轮子倒转
        delay(26);//pwm有用值,越大右边的轮子越快
        you2=1;//关闭右边轮子

        delay(80);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}

void hui3()//小车后退的子程序
{
        zuo1=1;
        zuo2=0;//左边轮子倒转
        delay(23);//pwm有用值,越大左边方向的轮子越快
        zuo2=1;//关闭左边轮子

        you1=1;
        you2=0;        //右边轮子倒转
        delay(26);//pwm有用值,越大右边的轮子越快
        you2=1;//关闭右边轮子

        delay(60);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}

void hui4()//小车后退的子程序
{
        zuo1=1;
        zuo2=0;//左边轮子倒转
        delay(23);//pwm有用值,越大左边方向的轮子越快
        zuo2=1;//关闭左边轮子

        you1=1;
        you2=0;        //右边轮子倒转
        delay(26);//pwm有用值,越大右边的轮子越快
        you2=1;//关闭右边轮子

        delay(40);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}
void hui5()//小车后退的子程序
{
        zuo1=1;
        zuo2=0;//左边轮子倒转
        delay(23);//pwm有用值,越大左边方向的轮子越快
        zuo2=1;//关闭左边轮子

        you1=1;
        you2=0;        //右边轮子倒转
        delay(26);//pwm有用值,越大右边的轮子越快
        you2=1;//关闭右边轮子

        delay(20);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
}
void hui6()//小车后退的子程序
{
        zuo1=1;
        zuo2=0;//左边轮子倒转
        delay(23);//pwm有用值,越大左边方向的轮子越快
        zuo2=1;//关闭左边轮子

        you1=1;
        you2=0;        //右边轮子倒转
        delay(26);//pwm有用值,越大右边的轮子越快
        you2=1;//关闭右边轮子

        z=1;
        y=1;//关闭转向灯
}

void turnleft()//小车左转弯子程序
{
        zuo1=1;
        zuo2=1;//左边轮子停止转动

        you1=0;
        you2=1;        //右边轮子正转
        delay(24);//pwm有用值,越大右边的轮子越快
        you1=1;//右边轮子停止

        delay(100);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
        z=~z;//左转向灯打开
}

void turnright()//小车右转弯子程序
{
        zuo1=0;
        zuo2=1;//左边轮子正转
        delay(25);//pwm有用值,越大左边方向的轮子越快
        zuo1=1;//左边轮子停止

        you1=1;
        you2=1;        //右边轮子停止
        delay(100);//pwm无用值,越大,小车跑的越慢
        z=1;
        y=1;//关闭转向灯
        y=~y;//右转向灯打开
}
void down()//停止子程序
{
        zuo1=1;
        zuo2=1;
        you1=1;
        you2=1;        //左右轮全部停止
        z=1;
        y=1;//关闭转向灯
}


void main()//主程序
{
        init();//调用初始化子程序
        while(1)//死循环
        {

                    if(a==0x14||a==0x15||a==0x54||a==0x55||a==0x64||a==0x65)//如果是就前进
                        go1();
                        if(a==0x16||a==0x17||a==0x56||a==0x57||a==0x66||a==0x67)//如果是就前进
                        go2();
                        if(a==0x18||a==0x19||a==0x58||a==0x59||a==0x68||a==0x69)//如果是就前进
                        go3();
                        if(a==0x1a||a==0x1b||a==0x5a||a==0x5b||a==0x6a||a==0x6b)//如果是就前进
                        go4();
                        if(a==0x1c||a==0x1d||a==0x5c||a==0x5d||a==0x6c||a==0x6d)//如果是就前进
                        go5();
                        if(a==0x1e||a==0x1f||a==0x5e||a==0x5f||a==0x6e||a==0x6f)//如果是就前进
                        go6();

                    if(a==0x24||a==0x25||a==0x74||a==0x75||a==0x84||a==0x85)//如果是就后退
                        hui1();
                        if(a==0x26||a==0x27||a==0x76||a==0x77||a==0x86||a==0x87)//如果是就后退
                        hui2();
                        if(a==0x28||a==0x29||a==0x78||a==0x79||a==0x88||a==0x89)//如果是就后退
                        hui3();
                        if(a==0x2a||a==0x2b||a==0x7a||a==0x7b||a==0x8a||a==0x8b)//如果是就后退
                        hui4();
                        if(a==0x2c||a==0x2d||a==0x7c||a==0x7d||a==0x8c||a==0x8d)//如果是就后退
                        hui5();
                        if(a==0x2e||a==0x2f||a==0x7e||a==0x7d||a==0x8e||a==0x8f)//如果是就后退
                        hui6();

                        if(a==0x3f)//如果是0x3f就左转
                        turnleft();

                        if(a==0x4f)//如果是0x4f就右转
                        turnright();

                        if(a==0x00)//如果是0x00就停止
                        down();

                        if(a==0xa0)//如果是0xa0车灯打开
                        deng=0;

                        if(a==0xb0)//如果是0xb0车灯关闭
                        deng=1;

                        if(a==0xc0)//如果是0xc0蜂鸣器鸣响
                        BEEP=0;
                       
                        if(a==0xd0)//如果是0xd0蜂鸣器关
                        BEEP=1;
                       
                        else
                        down();

                }       
}       

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


评分

参与人数 2黑币 +54 收起 理由
386115360 + 4 共享资料的黑币奖励!
admin + 50 共享资料的积分奖励!

查看全部评分

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

使用道具 举报

沙发
ID:144138 发表于 2016-10-30 20:12 | 只看该作者
为什么前进后退那里有那么多行的代码?有什么深刻的用意吗?
回复

使用道具 举报

板凳
ID:144383 发表于 2016-10-30 20:32 | 只看该作者
这个好像是我以前发过的呢
回复

使用道具 举报

地板
ID:144383 发表于 2016-10-30 20:33 | 只看该作者
你觉得好用吗???
回复

使用道具 举报

5#
ID:162969 发表于 2017-1-26 18:02 | 只看该作者
我改了下定义,结果只能前进,怎么回事
回复

使用道具 举报

6#
ID:163075 发表于 2017-1-29 13:25 | 只看该作者
可以很强的
回复

使用道具 举报

7#
ID:200955 发表于 2017-5-15 15:09 | 只看该作者
不能用,别看了
回复

使用道具 举报

8#
ID:139785 发表于 2017-5-16 15:24 来自手机 | 只看该作者
思路比较混乱
回复

使用道具 举报

9#
ID:206443 发表于 2017-5-31 18:04 | 只看该作者

 为什么前进后退那里有那么多行的代码?有什么深刻的用意吗?
回复

使用道具 举报

10#
ID:200488 发表于 2017-6-3 01:47 来自手机 | 只看该作者
而我 发表于 2017-5-31 18:04
 为什么前进后退那里有那么多行的代码?有什么深刻的用意吗?

带重力模式
回复

使用道具 举报

11#
ID:274511 发表于 2018-1-11 17:23 来自手机 | 只看该作者
这是两轮的?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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