51蓝牙小车,通过蓝牙APP发送指令让小车前进后退,左转,右转。
模块化的插件,让你低成本,低基础,完成这个设计。

电路原理图如下:
{H9HJ{R(S(@KS1GN7CWP})Q.png

单片机源程序如下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char tmp;
unsigned int c=0;
uint Count;
uint Degree=50;
sbit PWMA=P2^0;
sbit AIN2=P2^1;
sbit AIN1=P2^2;         
sbit STBY=P2^3;
sbit BIN1=P2^4;
sbit BIN2=P2^5;
sbit PWMB=P2^6;
sbit beep=P2^7;                        //蜂鸣器
void init();   //串口初始化
void send(unsigned char a);        //单字节发送函数
void ctrl(); //接收处理函数
void delay(unsigned int x)
{
        unsigned int i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
void Initialize_time(void)
{        
                                EA=1;
        ET0=1;                                       //EA=1;ET0=1;开启总中断、定时器0
//    TMOD=0x22;                               //M1=1,M1=0;方式2
                        TH0 = 0XA3;                                   //定时时间为100us     
                        TL0 = 0XA3;                                                                                          
        TR0=1;                         //启动定时器0,开始计数
}
void timer0 (void) interrupt 1            //定时中断0子程序
{                                                                                                                                                                                      
        Count++;        
        if(Count>=0 && Count<=Degree)
        {
                PWMA=0;
                PWMB=0;
        }   
        else
        {
                PWMA=1;
                PWMB=1;
        }
        if(Count==200)        
           Count=0;                                                                                               
}
void init()        //串口初始化
{
                  ES=0;                                //关中断
                  SCON = 0x50;                        // REN=1允许串行接受状态,串口工作模式1,
                                                                                                                                                                                                                 //10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率
                  TMOD = 0x22;                      // 定时器1工作于方式2,8位自动重载模式, 用于产生波特率
                                                                        TH1=TL1=0xFD;                   // 波特率9600 (本次测试采用晶振为11.0592)

                                                                        PCON &= 0x7f;                          // 波特率不倍增
                                                                        TR1 = 1;                                                                                                                        //定时器1开始工作,产生波特率
                                                                                                                                                                                                                         //发送标志位置0
                  TI=0;                               //接收标志位置0
                  RI=0;
                  PT1=1;
                                                                        ES=1;

}
void send(unsigned char a)        //单字节数据发送
{                                //注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。本次测试需要接上拉电阻
        TI=0;        
        SBUF=a;
        while(TI==0);
        TI=0;

}

void ctrl()                            //接收处理函数
{
                                    switch(tmp)
                                  {
                                              case '1':
                                                {
                                                                                                                AIN1=1;
                                                                                                                AIN2=0;        
                                                                                                                BIN1=1;
                                                                                                                BIN2=0;               
                                                PWMA=1;
                                                PWMB=1;
                                                send(tmp);


                                                break;        
                                                        }                                
                                        case '8':
                                        {                                         
                                                                                                 PWMA=0;
                         PWMB=0;
                                                 send(tmp);
                                                   }

                                                  break;        

                                                 case '3':
                                        {                                         
                                                                                                AIN1=0;
                        AIN2=0;        
                        BIN1=1;
                        BIN2=0;               
                                                PWMA=1;
                                                PWMB=1;
                                                 send(tmp);
                                                 }        
                                                   break;        
                                                                  case '4':
                                        {                                         
                                                                                                AIN1=1;
                        AIN2=0;        
                        BIN1=0;
                        BIN2=0;               
                                                PWMA=1;
                                                PWMB=1;
                                                 send(tmp);


                                                 }         
                                                   break;
                                                                           case '5':
                                        {                                         
                                                                                                AIN1=0;
                        AIN2=1;        
                        BIN1=0;
                        BIN2=1;               
                                                PWMA=1;
                                                PWMB=1;
                                                 send(tmp);

                                                 }        
                                                  break;        
                              case '6':
                                        {                                         
                                             beep=0;
                                                 delay(50);
                                                 beep=1;
                                                 send(tmp);
                                                         }
                                                 break;        
                                                             case '7':
                                        {                                         
                                             Degree++;
                                                if(Degree==180)
                                                {
                                                Degree=0;
                                                 }
                                                 send(tmp);
                                                         }
                                                 break;                                                        

                                  }
}

void main()                                                   
{                 

                                                                PWMA=1;
                                                                PWMB=1;
                STBY=1;

                init();
//             Initialize_time();

          while(1)
          {               

                  if(RI==1)                     // 是否有数据到来
                  {
                   RI = 0;
                  tmp = SBUF;                   // 暂存接收到的数据
                                                                        ctrl();
                                                                        }      
          }
}

[1] [1]
关键字:51单片机  蓝牙小车  TB6612控制 引用地址:51单片机蓝牙小车+TB6612控制

上一篇:单片机控制步进电机,LCD1602显示
下一篇:PCF8574 STC15单片机的驱动程序 LCD1602显示

推荐阅读

    “目前全球65个国家的156个运营商正在测试或试运行5G网络,或已被许可进行5G支持和候选,其中,至少有36个国家的60个运营商明确其5G网络部署时间与计划。”在近日举行的“2018 5G网络创新研讨会”上,TD产业联盟秘书长杨骅用数字表明5G的临近。国内第三阶段测试年底完成杨骅介绍,预计到2021年年底,全球包括移动和固定宽带服务在内的5G用户数将...
能代替消防员进入易燃易爆、缺氧、浓烟等危险灾害事故现场的特种机器人,能给患者做手术也能给患者端茶送药的医疗机器人,在生产线上精准地拧紧一颗螺丝钉的工业机器人。8月25日,以“智能新生态、开放新时代”为主题的2019世界机器人大会在北京闭幕,全球180多家企业展出700余件(套)展品,展示了机器人在诸多领域的新技术、新产品、新应用,也给观众...
中断服务函数列表IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数EXTI0_IRQHandler EXTI1_IRQHandlerEXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler EXTI9_5_IRQHandler EXTI15_10_IRQHandler 外部中断一般步骤1、开启IO口时钟,初始化IO...
俄罗斯贵金属矿业集团的首席执行官Vitaly Nesis警告称,全球汽车制造商遭遇的芯片短缺问题,即将蔓延至自然资源领域,这对早已面临通胀压力的行业来说无疑是雪上加霜。据英国《金融时报》报道, Vitaly Nesis在接受采访时指出,丰田 (Toyota)等车厂面临的供应链问题,将很快冲击采矿工具及机械制造商。他表示,丰田并非个例,芯片短缺是非常真实的存在。...

史海拾趣

问答坊 | AI 解惑

2008年北京市电子竞赛题详解

2008年北京市大学生电子设计大赛,基于CPLD对交流参数的设计。…

查看全部问答∨

奇怪的问题?

//部分代码如下: /*以下为从U盘读数据发送到 串口部分 */ #define        MAX_BYTE_IO                6        /* 以字节为单位单次读写文件时的最大长度,默 ...…

查看全部问答∨

【招聘】汇编语言入门图书兼职作者

【招聘】汇编语言入门图书兼职作者 本公司是业内知名IT图书策划出版公司,正在运作一本汇编语言入门相关图书。想征求关于汇编语言的设计高手参与编写。有意者请将个人介绍和联系方式(QQ或MSN)发到本人邮箱macuilhy@sina.cn。…

查看全部问答∨

闪烁的问题

各位: 键盘程序中,我用二个键同时按下选择进入数据设定,现在想使打算改变的数据位闪烁(LCD),应怎么处理,请教…

查看全部问答∨

学习CC2420的一些困惑

本人刚刚开始学习CC2420,买了一套开发板,安装了IAR软件和ZIGBEE2007协议栈,但不知道该怎么入手学习,怎样更加有效率,少走弯路,就是想弄明白我们应用的时候一般怎么改?改协议栈里的哪些内容? 期待大家的交流学习,谢谢大家!谢谢你的分享!…

查看全部问答∨

EMC职业的未来

小弟目前在华硕从事笔记本电脑EMC设计工作,最近手上项目告一段落,闲来想想EMC这一行业的发展前景。 从技术上来讲,笔记本电脑EMC设计已趋向于一个成熟的技术,各种bug的解决方法似乎已成为一种固定的解决模式。要想开辟一种新的技术似乎很难 ...…

查看全部问答∨

基于G2553和CC1100E的无线透传程序

学习了一段时间G2XX的片子,写了一个基于G2553和CC1100E的无线透传程序 测试下来效果还不错,传上来共享一下 串口与RF接收采用中断方法,与CC1100E通信的SPI使用的模拟方式,很容易移植到其他片子 这个是完整的透传程序,不是网上那些掩饰的单收 ...…

查看全部问答∨

如何在verilog中调用vhdl模块,最好给个例子,万分感谢啊!

如何在verilog中调用vhdl模块,最好给个例子,求大神指点!…

查看全部问答∨

二手淘了快MSP430G2553没有数码管、9键键盘等,想要去哪买?

得到的就那块红色板子。知道配件能用的型号也谢谢了~ 我发现G2553的配件好难买,淘宝也没有………

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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