文章目录
整体思路:
这里的接收到的数据可以有自己进行配置。
一、蓝牙调试app
app名称:手机蓝牙调试器,可以通过它的发送端给蓝牙发送数据
打开手机蓝牙,就会看到HC-05,然后连接,就可以在蓝牙调试器里面进行相应的操作了。
这个app有一个缺点就是苹果手机不能下载。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、蓝牙模块HC-05
HC-05的传输距离有10米这里我们把HC-05的正极与单片机的+5V相连,GND与单片机GND相连,TXD与单片机的P30口相连,RXD与单片机的P31口相连。
这个HC-05有一个缺点就是苹果手机不能连接。
三、舵机
舵机的正极(红线)与单片机的+5V相连,负极(棕色线)与单片机的GND 相连,信号线与单片机的I/O口相连,这里建议使用P1.0-P1.7口进行连接。本项目中使用的是P1.1口。
四、单片机控制程序
1.UART串口初始化
void UART_Init()
{
SCON=0x50;
PCON |= 0x80;
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
2.定时器T0初始化,用于产生PWM波控制舵机
void Time0_Init() //定时器初始化
{
TMOD = 0x01; //定时器0工作在方式1
EA = 1;
ET0 = 1;
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
TR0 = 1; //定时器开始
}
3.所有程序
#include <REG52.H>
/* 自定义变量类型 */
typedef unsigned char uchar; //0~255
typedef unsigned int uint; //0~65535
uchar Turn_angle, deng;
sbit PWM = P1 ^ 1; //信号线
uchar kk = 0;
//延迟1ms
void delay_ms(uint c) //误差 0us
{
uint a, b;
for(; c > 0; c--)
for(b = 102; b > 0; b--)
for(a = 3; a > 0; a--);
}
//串口初始化,用于与hc-05进行串口通信
void UART_Init()
{
SCON=0x50;
PCON |= 0x80;
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void Time0_Init() //定时器初始化
{
TMOD = 0x01; //定时器0工作在方式1
EA = 1;
ET0 = 1;
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
TR0 = 1; //定时器开始
}
void main()
{
Time0_Init();
UART_Init();
//PWM = 0;
while (1)
{
kk = 0;
Turn_angle = 3; //归零 1--0 2--45 3--90 4--135 5--180
delay_ms(300);
while(RI == 0);
RI = 0;
deng = SBUF;
if(deng == 0x41)
{
kk = 0;
Turn_angle = 1; //旋转
delay_ms(300);
kk = 0;
Turn_angle = 3; //旋转
delay_ms(300);
}
if(deng == 0x43)
{
kk = 0;
Turn_angle = 4.9; //旋转
delay_ms(300);
kk = 0;
Turn_angle = 3; //旋转
delay_ms(300);
}
}
}
void timer0() interrupt 1
{
TR0 = 0; //关闭计时
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
if(kk <= Turn_angle) //1---0度 2---45度 3---90 4--- 135度 5---180度
{
PWM = 1;
}
else
{
PWM = 0;
}
if(kk == 40) //一个周期20ms
{
kk = 0;
}
kk ++;
TR0 = 1; //开启计时
}
总结
不善于总结