蓝牙遥控智能车制作 单片机+SG90舵机扫描

发布者:脑洞狂想最新更新时间:2020-08-04 来源: 51hei关键字:蓝牙遥控  智能车  单片机  SG90  舵机扫描 手机看文章 扫描二维码
随时随地手机看文章

遥控车是基于STC89C52RC单片机开发,车体组成有底盘,直流电机33GB-520-18.7,L298N电机驱动模块,LM2596降压模块,12V DC电源,HC-05蓝牙模块。其中HC-05蓝牙模块与单片机是串口通信所以要注意连线,STC89C52RC中P3^0,P3^1为串口引脚,具体连线如下示意图:


本次制作目的是:通过手机蓝牙调试器发送信号控制车辆的前进,后退,原地左转,原地右转,单独左转,单独右转,舵机扫描以及寻迹模式的切换(在这里声明一下,本次代码的寻迹模式切换模式还不太完善,未达到理想效果,电子发烧友们可以多多指点。在下学艺不精,在接下来的解说中如有错误望大佬纠正。)手机采用蓝牙调试器,需要自己进行按键编辑以及字符发送。

程序编译好后即可烧录,对手机上的蓝牙调试器进行相应字符编辑即可进行操作。对于想基于此程序继续开发的朋友们,如果加入更多功能函数时操作未响应,建议你们逐条加入排除问题。


谢谢大家的认真阅读,有更好的逻辑可以留言。

 

将硬件设备搭建完成后,我们即将开始软件的编程:
话不多说,单片机代码走起!!!哈哈

#include    //头文件

#include

sbit blackorwhite1=P2^5;//黑白传感器定义引脚

sbit blackorwhite2=P2^6;

sbit blackorwhite3=P2^7;

sbit motor1=P1^0;

sbit motor2=P1^1;//电机1定义引脚

sbit motor3=P1^3;

sbit motor4=P1^4;//电机2定义引脚

sbit PWM1=P2^0;//SG90信号定义引脚



typedef unsigned char uc;

typedef unsigned int ui;    //复杂名称函数的替代

uc Com;

int i;


void Init();  //在这里一定要注意在main()函数后的子函数要进行声明,不声明虽然不会报错但有可能会忽略子函数导致一些功能不能实现

void Send(uc a);

void Cont();  

void qianjin();

void houtui();

void youzhuan();

void zuozhuan();

void xunji();

//void L2_0();  

void L2_45();

void L2_90();

void L2_135();

//void L2_180();

void delay(int t);

void delayx1ms(int x);

void delay1ms();

void delay500us();

void ZUO();

void YOU();


void delay(int t)                          //延迟函数

{

        int a,b;

        for(a=0;a                for(b=0;b<120;b++);

}

void delayx1ms(int x)

{

        unsigned char a,b;

        for(x;x>0;x--)

                for(b=102;b>0;b--)

                        for(a=3;a>0;a--);

}

void delay1ms()

{

        unsigned char a,b;

        for(b=102;b>0;b--)

                for(a=3;a>0;a--);

}

void delay500us()

{

        unsigned char a,b;

        for(b=1;b>0;b--)

                for(a=227;a>0;a--);

}


void main()   //    主函数

{

Init();         //     串口初始化函数调用

while (1)

{

  if (RI==1)   //    判断是否有数据

  {

   RI = 0;     // 置0

   Com = SBUF;    // 暂时存放接收的数据

   Cont();             // 调用数据处理函数

  }

}

}

void Init()    //串口初始化

{

ES=0;                     //中断关闭

SCON = 0x50;         //   串行控制寄存器   01010000串口工作方式1并允许中断接收数据

TMOD = 0x20;        //    定时器/计[color=rgb(34, 34, 34)][backcolor=rgb(248, 248, 248)][font=PingFang SC,Arial,5FAE软雅黑,5B8B体,simsun,sans-serif][size=0.48] [/font][/backcolor][/color]数器1设置为工作方式

TH1=TL1=0xFD;     //   设置波特率9600=110592*1000000/12/(0x100-0xfd)/32   本次实验晶振(11.0592)

PCON &= 0x7f;       //    波特率不倍增

TR1 = 1;         //   开启定时器1

TI=0;             //   发送中断位

RI=0;             //   接收中断位

ES=1;            //   开启串口中断

motor1=0;

motor2=0;     //   电机初始化

motor3=0;

motor4=0;

}

   

void Send(uc a)   //单字节数据发送

{

TI=0;             // TI是串口接收标志位

SBUF=a;         //SBUF---即串口数据缓冲寄存器   将数据存入

while (TI==0) ;//等待发送结束

TI=0;             //清零

}

void qianjin()   //前进功能函数

{

      motor1=1;

      motor2=0;

      motor3=1;

      motor4=0;

}

void zuozhuan()   //原地左转功能函数

{

      motor1=0;

      motor2=1;

      motor3=1;

      motor4=0;

}

void youzhuan()  //原地右转功能函数

{

      motor1=1;

      motor2=0;

      motor3=0;

      motor4=1;

}

void houtui()  //后退功能函数

{

      motor1=0;

      motor2=1;

      motor3=0;

      motor4=1;

}

void ZUO()  // 单独左转功能函数

{

      motor1=0;

      motor2=0;

      motor3=1;

      motor4=0;

}

void YOU()  // 单独右转功能函数

{

      motor1=1;

      motor2=0;

      motor3=0;

      motor4=0;

}

void xunji()  //寻迹模式切换 功能函数

{

// while(1)

{

   if((blackorwhite1==1)&& (blackorwhite2==0)&&(blackorwhite3==1))

  qianjin();

  else if ((blackorwhite1==0&&blackorwhite2==0&&blackorwhite3==1)||(blackorwhite1==0&&blackorwhite2==1&&blackorwhite3==1))

  zuozhuan();

   else if((blackorwhite1==1&&blackorwhite2==1&&blackorwhite3==0)||(blackorwhite1==1&&blackorwhite2==0&&blackorwhite3==0))

  youzhuan();

  else if ((blackorwhite1==0)&&(blackorwhite2==0)&&(blackorwhite3==0))

   qianjin();

  else

  houtui();

                             

}

}

//void L2_0()                                                  SG90舵机0度函数  若需要可以解禁此功能

/{

//        int i,j;

//        for(j=0;j<43;j++)

//        {

//                PWM1=1;

//                delay500us();

//       //      delay1ms();

//                PWM1=0;

//                for(i=0;i<19;i++)

//                delay1ms();

//                delay500us();

//                PWM1=0;

//                for(i=0;i<20;i++)

//                delay1ms();

//        }

//}

void L2_45()                                                    //舵机45度旋转函数

{

        int i,j;

        for(j=0;j<43;j++)

        {

                PWM1=1;

        //     delay500us();

                delay1ms();

                PWM1=0;

                for(i=0;i<20;i++)

                delay1ms();

        //     delay500us();

                PWM1=0;

                for(i=0;i<21;i++)

                delay1ms();

        }

}

void L2_90()                                              //舵机90度旋转函数

{

        int i,j;

        for(j=0;j<43;j++)

   {

                PWM1=1;

                delay1ms();

                delay500us();

                PWM1=0;

                for(i=0;i<18;i++)

                delay1ms();

                delay500us();

                PWM1=0;

                for(i=0;i<20;i++)

                delay1ms();

         }

}

void L2_135()                                              //舵机135度旋转函数

{

        int i,j;

        for(j=0;j<43;j++)

   {

                PWM1=1;

                delay1ms();

                delay1ms();

       //      delay500us();

                PWM1=0;

                for(i=0;i<18;i++)

                delay1ms();

           //  delay500us();

                PWM1=0;

                for(i=0;i<20;i++)

                delay1ms();

         }

}

//void L2_180()                                              //舵机180度旋转函数,有需要可解禁此功能

//{

//        int i,j;

//        for(j=0;j<43;j++)

//   {

//                PWM1=1;

//                delay1ms();

[1] [2]
关键字:蓝牙遥控  智能车  单片机  SG90  舵机扫描 引用地址:蓝牙遥控智能车制作 单片机+SG90舵机扫描

上一篇:Proteus仿真LCD12864液晶显示极详细的教程
下一篇:基于51单片机的串口控制led灯的亮灭源程序

推荐阅读最新更新时间:2024-11-13 11:53

MCU的每一位都恰到好处,是门学问
市场研究机构IC Insights的数据显示,2019年全球微控制器(MCU)营收预计将成长9%,达到204亿美元,并在未来五年以7.2%的年复合增长率高速成长。面对层出不穷的应用需求,MCU厂商该如何主动出击寻求变化?MCU的下一个风口在哪里? 长盛不衰的8位MCU STM8是意法半导体(ST)在十年前设计的产品,但目前来看还是能满足多方面应用需求的。究其原因,ST微控制器市场产品经理PATRICE HAMARD认为一是客户的使用习惯,这些客户一直在使用8位MCU产品;其次是出于成本的控制,很多成本敏感型应用需要更低价的MCU;第三是STM8更简单、易用。 左:ST微控制器市场产品经理PATRICE HA
[嵌入式]
让<font color='red'>MCU</font>的每一位都恰到好处,是门学问
51单片机-SPI接口
SPI(Serial Peripheral Interface)接口是同步串行接口,利用时钟线对数据位进行同步,时钟的上升沿和下降沿锁存数据。SPI的两种类型: 四线制SPI:CS,SCK(同步时钟),MOSI(master out slaver in),MISO:全双工 三线制SPI:CS,SCK,DIO:半双工,只能分时进行收发 SPI时序图举例:四线制,低电平使能,上升沿锁存,先发送最高位。 DS1302的接口时序:三线制,高电平使能,写上升沿锁存,读下降沿锁存,先发送最低位。 DS1302是典型的三线制SPI接口,DS1302的时间信息以寄存器的形式存储在芯片内部,通过SPI接口,对相应的寄
[单片机]
51<font color='red'>单片机</font>-SPI接口
国内车规级MCU厂家名单一览表
汽车所需的半导体器件主要有模拟IC、逻辑IC、存储IC、分离器件、微控制IC、光学半导体、传感器和执行器等七大类。 汽车芯片本来也不应成为一个问题,这些芯片的生产工艺十分成熟,成本也不高,它们的制造难度无法与手机芯片相提并论。目前汽车的 MCU(微控制单元)普遍还处于8位到32位的过渡阶段,28nm 制程芯片已经堪称顶尖,很多甚至还只有 180nm。 MCU 芯片的低成本,让车企并不重视它的生产稳定性,为了进一步降低成本,车企和供应商都采用了垂直分工模式,即生产和研发分离,将产能外包。根据IHS 的统计,台积电承包了全球 70%的 MCU 产量,但台积电自己的财报表明,汽车芯片仅占台积电销售额的 5%,并不处于战略核
[嵌入式]
国内车规级<font color='red'>MCU</font>厂家名单一览表
51单片机IO口输入输出方式
传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路。 灌电流方式:LED正极接VCC,负极接IO口。IO为高电平是LED两极电平相同,没有电流,LED熄灭;IO为低电平时,电流从VCC流入IO,LED点亮。但是当你吧LED正极接在IO接口,负极接GND时,将IO接口置于高电平,LED会亮,但因为IO接口上拉能力不足而使亮度不理想,可以用下面介绍的方式解决这个问题。 推挽工作方式:LED正负极分别接在两个IO口上,然后设置正极IO接口为推挽输出,负极IO接口为标准双向灌电流输入。推挽方式具有强上拉能力,可以实现高电平驱动LED。 IO口的四种使用方法
[单片机]
51<font color='red'>单片机</font>IO口输入输出方式
单片机UART升级固件流程
单片机是嵌入式系统中最基础和常用的芯片种类之一。随着技术的不断发展,单片机的功能和性能得到了越来越大的提升,同时固件的规模和复杂度也在不断增加。为了保障单片机的正常运行,需要对其进行固件升级。本文将介绍单片机UART升级固件的基本流程。 1. 确定升级方式 单片机的固件升级方式通常有多种,包括串口、USB、SD卡等。其中,串口升级是最为常用的一种方式,可以通过引脚上的TX和RX两个信号线实现数据传输,具有简单、方便、快捷等优点。 2. 准备工作 在进行单片机UART升级之前,需要进行一些准备工作。首先,需要准备好电脑、单片机芯片以及相关的软硬件工具。其次,需要查看单片机芯片的数据手册,确定需要升级的固件版本和升级方
[单片机]
[nrf51][nrf52][单片机] ble蓝牙无限广播 持续广播
1、实现无限非连接广播 ①BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE改为BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE,广播超时后,仍能继续发送。 ②APP_ADV_TIMEOUT_IN_SECONDS设置为0
[单片机]
Atmel 新款M0+核MCU SAM D20 整合多项特性
爱特梅尔(Atmel)推出全新 Atmel SAM D20,是以 ARM Cortex-M0+ 处理器核心为基础的新系列嵌入式快闪微控制器中的首款产品系列,锁定家庭自动化、消费、智慧型计量和工业应用。 新产品系列充分发挥了爱特梅尔在微控制器发展所累积的二十年经验,以及该公司易于使用且建基于AVR和ARM产品的成功经验,再结合创新的和经过验证的技术,包括带有爱特梅尔事件系统(Event System)的智慧周边设备以及用于按键、滑动式控制钮和转盘功能及接近感测的电容式触控支援。 SAM D20系列还有最新版本Atmel Studio和Atmel Software Framework的支援,后者是一整合式的开发平台,可用来开发
[单片机]
STC89C52单片机外部中断0实验
///////////////////////////////////////////////////////////////////////// 实现功能: 设置外部中断0,然后通过点亮与单片机P1口第一个引脚相连的D1来 显示系统进入了外部中断0 实验板型号:BS-XYD-C52 实验名称: 外部中断0测试 编写人: 谢应东 编写日期: 2012-4-27 ///////////////////////////////////////////////////////////////////////// #include reg52.h #include intrins
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved