标题:
基于51单片机智能小车手机APP蓝牙遥控
[打印本页]
作者:
高翔宇
时间:
2018-6-12 11:42
标题:
基于51单片机智能小车手机APP蓝牙遥控
我是初学者,才接触智能小车两个星期,希望我发的一些东西对初学者有一点帮助
/*手机软件按键对应的十六进制数*/
41 31 32 33
43 45 44 34 35 36
42 37 38 39
0.png
(38.86 KB, 下载次数: 50)
下载附件
2018-6-13 01:51 上传
单片机源程序如下:
/*手机遥控小车
左转大约是90度
右转是在原地转圈
*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*电机驱动IO定义*/
sbit IN1 = P1^2; //为1 左电机反转
sbit IN2 = P1^3; //为1 左电机正转
sbit IN3 = P1^6; //为1 右电机正转
sbit IN4 = P1^7; //为1 右电机反转
sbit EN1 = P1^4; //为1 左电机使能
sbit EN2 = P1^5; //为1 右电机使能
/*按键定义*/
sbit key_s2 = P2^1;
sbit key_s3 = P2^0;
sbit led1 = P0^1;
//sbit led2 = P0^3;
#define left_motor_en EN1 = 1 //左电机使能
#define left_motor_stops EN1 = 0 //左电机停止
#define right_motor_en EN2 = 1 //右电机使能
#define right_motor_stops EN2 = 0 //右电机停止
#define left_motor_go IN1 = 0, IN2 = 1//左电机正传
#define left_motor_back IN1 = 1, IN2 = 0//左电机反转
#define right_motor_go IN3 = 1, IN4 = 0//右电机正传
#define right_motor_back IN3 = 0, IN4 = 1//右电机反转
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
unsigned char pwm_left_val = 0;//左电机占空比值 取值范围0-170,0最快
unsigned char pwm_right_val = 0;//右电机占空比值取值范围0-170 ,0最快
unsigned char pwm_t;//周期
//小车初始化
void Che_init()
{
TMOD |= 0x02;//8位自动重装模块
TH0 = 220;
TL0 = 220;//11.0592M晶振下占空比最大比值是256,输出100HZ
TR0 = 1;//启动定时器0
ET0 = 1;//允许定时器0中断
EA = 1;//总中断允许
}
//蓝牙初始化
void UART_INIT()
{
SM0 = 0;
SM1 = 1;//串口工作方式1
REN = 1;//允许串口接收
EA = 1;//开总中断
ES = 1;//开串口中断
TMOD = 0x20;//8位自动重装模式
TH1 = 0xfd;
TL1 = 0xfd;//9600波特率
TR1 = 1;//启动定时器1
}
//小车前进
void forward()
{
ET0 = 1;
left_motor_go; //左电机前进
right_motor_go; //右电机前进
}
//小车左转
void left()
{
ET0 = 1;
delay(100);
left_motor_back;
right_motor_go;
delay(700);
forward();
}
//小车右转
void right()
{
ET0 = 1;
left_motor_go;
right_motor_back;
}
//小车后退
void back()
{
ET0 = 1;
left_motor_back;
right_motor_back;
}
//小车停止
void stop()
{
ET0 = 0;
EN1 = 0;
EN2 = 0;
}
//定时器0中断
void timer0() interrupt 1
{
pwm_t++;
if(pwm_t == 255)
pwm_t = EN1 = EN2 = 0;
if(pwm_left_val == pwm_t)
EN1 = 1;
if(pwm_right_val == pwm_t)
EN2 = 1;
}
//串口中断
void UART_SER() interrupt 4
{
if(RI)
{
RI = 0;//清除接收标志
switch(SBUF)
{
case 0x41: forward(); break;//前进
case 0x42: back(); break;//停止
case 0x43: left(); break;//左转
case 0x44: right(); break;//右转
case 0x45: stop(); break;//停止
case 0x31: led1 = 0; break;//右转
case 0x32: P0 = 0; break;//停止
case 0x33: led1 = 1; break;//右转
case 0x34: P0 = 0xff; break;//停止
}
}
}
void main()
{
UART_INIT();//串口初始化
Che_init();
while(1);
}
复制代码
所有资料51hei提供下载:
手机蓝牙遥控小车.zip
(839.87 KB, 下载次数: 193)
2018-6-12 11:42 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
MG_C
时间:
2018-12-5 19:55
可以发一下APP源代码吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1