专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
求HC-06蓝牙代码!
2019-07-15 23:52
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
18718
10
944
买了个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) ;
}
}
}
加载中...
查看其它10个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#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) ;
}
}
}
一周热门 更多>