求HC-06蓝牙代码!

2019-07-15 23:52发布

买了个HC-06蓝牙模块,用msp430控制,求可用的代码,51的也可以!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
sbook
2019-07-16 09:11
#include "reg52.h"

#define Left_moto_go      {a=0,b=1;} //P3_4 P3_5 接IN1  IN2  当 P3_4=0,P3_5=1; 时左电机前进
#define Left_moto_back    {a=1,b=0;} //P3_4 P3_5 接IN1  IN2  当 P3_4=1,P3_5=0; 时左电机后退   
#define Left_moto_stp     {a=1,b=1;} //P3_4 P3_5 接IN1  IN2  当 P3_4=1,P3_5=1; 时左电机停转               
#define Right_moto_go     {c=0,d=1;} //P3_6 P3_7 接IN1  IN2         当 P3_6=0,P3_7=1; 时右电机前转
#define Right_moto_back   {c=1,d=0;} //P3_6 P3_7 接IN1  IN2         当 P3_6=1,P3_7=0; 时右电机后退
#define Right_moto_stp    {c=1,d=1;} //P3_6 P3_7 接IN1  IN2         当 P3_6=1,P3_7=0; 时右电机停转

sbit a = P3^4;
sbit b = P3^5;
sbit c = P3^6;
sbit d = P3^7;

sbit beep = P2^4;
sbit v = P2^5;
/*********************************位定义*************************************************/
sbit Left_moto_pwm =  P1^6;           //接驱动模块ENA        使能端,输入PWM信号调节速度
sbit Right_moto_pwm = P1^7;           //接驱动模块ENB

unsigned int pwm_val_left  =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/10
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/10
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned  int  time=0;

/******************************小车前进,左转,右转PWM调节控制函数开始*******************************************
//小车延时
void delay(unsigned int k)           //延时函数
{   
     unsigned int x,y;
         for(x=0;x<k;x++)
         for(y=0;y<2000;y++);
}

/************************************************************************/
/*                    PWM调制电机转速                                   */
/************************************************************************/
/*                    左电机调速                                        */
/******************调节push_val_left的值改变电机转速,占空比**************/
void pwm_out_left_moto(void)
{  
   if(Left_moto_stop)
   {
    if(pwm_val_left<=push_val_left)
               Left_moto_pwm=1;
        else
               Left_moto_pwm = 0;
        if(pwm_val_left>=10)
        pwm_val_left=0;
   }
   else  Left_moto_pwm=0;
}
/******************************************************************/
/*                    右电机调速                                  */  
   void pwm_out_right_moto(void)
{
  if(Right_moto_stop)
   {
    if(pwm_val_right<=push_val_right)
               Right_moto_pwm=1;
        else
               Right_moto_pwm=0;
        if(pwm_val_right>=10)
        pwm_val_right=0;
   }
   else    Right_moto_pwm=0;
}
//前进
void  run(void)        //前进函数
{
   //  P2 = 0x00;
   v = 0;
   beep = 0;
         push_val_left  =5 ; //PWM 调节参数1-10   1为最慢,10是最快  改这个值可以改变其速度
         push_val_right =5;         //PWM 调节参数1-10   1为最慢,10是最快         改这个值可以改变其速度
         Left_moto_go ;                 //左电机前进
         Right_moto_go;          //右电机前进
}

//左转
void  left(void)        //左转函数
{
   ///  P2 = 0x00;
   v = 0;
   beep = 0;
         push_val_left  = 4;  //PWM 调节参数1-10   1为最慢,10是最快  改这个值可以改变其速度
         push_val_right = 4;         //PWM 调节参数1-10   1为最慢,10是最快         改这个值可以改变其速度
         Right_moto_go;                //右电机继续
         Left_moto_back;                 //左电机停走
}
//右转
void  right(void)        //右转函数
{
//         P2 = 0x00;
v = 0;
beep = 0;
     push_val_left  = 5;  //PWM 调节参数1-10   1为最慢,10是最快  改这个值可以改变其速度
         push_val_right = 5        ; //PWM 调节参数1-10   1为最慢,10是最快         改这个值可以改变其速度
         Right_moto_back;                //右电机停走
         Left_moto_go;                //左电机继续
}
//后退
void  back(void) //后退函数
{
        // P2 = 0x00;
        v = 0;
        beep = 0;
         push_val_left  = 5;  //PWM 调节参数1-10   1为最慢,10是最快  改这个值可以改变其速度
         push_val_right = 5        ; //PWM 调节参数1-10   1为最慢,10是最快         改这个值可以改变其速度
         Right_moto_back;                //右电机后退
         Left_moto_back;                //左电机后退       

}
//停止函数
void stop()
{
            P2 = 0xff;
         push_val_left  = 5;  //PWM 调节参数1-10   1为最慢,10是最快  改这个值可以改变其速度
         push_val_right = 5        ; //PWM 调节参数1-10   1为最慢,10是最快         改这个值可以改变其速度
         Right_moto_stp;                //右电机后退
         Left_moto_stp;                //左电机后退

}

/******************************小车前进,左转,右转PWM调节控制函数结束*******************************************/
void zd1() interrupt 1         using 2  //使用定时器中断0来进行pwm信号调节
{
         TH0=0XF8;          //1Ms定时
         TL0=0X30;
         time++;
         pwm_val_left++;
         pwm_val_right++;
         pwm_out_left_moto();
         pwm_out_right_moto();       
}
void send(unsigned char send)
{
        SBUF = send;
        while(!TI);
        TI = 0;
}
void main()
{
        unsigned char temp;

//串口通信  使用定时器1作为串口通信的波特率发生器                使用工作方式2
//PWM调节速度  使用定时器0                  使用工作方式1
        TMOD = 0X21; //        工作方式
//PWM信号
        //定时器中断0初始化设置       
        TH0= 0XF8;                  //1ms定时
        TL0= 0X30;
        TR0= 1;//启动定时器中断0
        ET0= 1; //定时器中断0允许使用
               

//串行通信初始化
        TH1 = 0XFD;         //9600波特率计算初值
        TL1 = 0XFD;       
        SCON = 0X50; //穿行口设置   工作方式1   REN  = 1   允许接收
        PCON = 0X00; //波特率不加倍
        TR1 = 1; //定时器中断1  未开则晶振无法计数                                                                                                                         
        ES = 1;
        ET1 = 1;
        EA = 1;
        while(1)
        {
       
               
                if(RI == 1)
                {
                        RI = 0;
                    temp =        SBUF ;
                    switch (temp)
                        {
                           case '1':run();break;
                           case '0':stop();break;
                           case '2':back();break;
                           case '3':left();break;
                           case '4':right();break;
                           case '5':stop();break;
                        }
                    send(temp) ;
                }
       
       
        }  


}

一周热门 更多>