php 控制蓝牙,蓝牙车;手机蓝牙控制;这么详细的代码已经很少见了!!!
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar t; //延时 t*50us
uchar L,R; //与t一体,为left、right绝对值
uchar Li,Ri; //等于left,right
sbit Ctl_L1=P2^0; //左轮控制端1 PWM
sbit Ctl_L2=P2^1; //左轮控制端2
sbit Ctl_R1=P2^2; //右轮控制端1 PWM
sbit Ctl_R2=P2^3; //右轮控制端2
//--0----1----2---3----4----5----6--
//后退 左转 右转 停止 前进 加速 减速
//参数left、right分别代表左右轮,值域为-100~100,当为0时,则停止,当为负数时,则反转,数值大小代表转动速度,值越大越快
void CarGo(int left,int right)
{
//纠正left、right区间
left=(left>100)?100:left;
left=(left
right=right>100?100:right;
right=(right
//赋值---用于加、减速
Li=left;
Ri=right;
//将绝对值赋予L、R---用于PWM
L=abs(left);
R=abs(right);
if(left!=0&&right!=0) //运动
{
Ctl_L2= left>0?0:1;
Ctl_R2=right>0?0:1;
}
else //停止
{
Ctl_L2=0;
Ctl_R2=0;
}
}
void InitCar()
{
t=0; //设定延时 t从0开始
//设定定时器参数
TMOD=0x21; //设定定时器0/1为 工作方式1/2
//延时50us
TH0=(65536-50)/256; //设定定时器0 高8位 计时器1-->TH1
TL0=(65536-50)%256; //设定定时器0 低8位
ET0=1; //中断 定时器0打开
TR0=1; //定时器0 启动
//50us时间到,跳转到中断程序中
SCON = 0x50;
TH1 = 0xFD; //波特率9600
TL1 = 0xFD;
PCON = 0x00; //SMOD=0
EA = 1; //开总中断
ES = 1; //开串口中断
TR1 = 1; //定时器中断启动
}
void timer() interrupt 1 //定时器0中断 延时50us
{
TH0=(65536-50)/256; //设定定时器0 高8位 计时器1-->TH1
TL0=(65536-50)%256; //设定定时器0 低8位
t++; //已延时t*50us
if(t>100)
{t=0;}
if(L!=0&&R!=0)
{
Ctl_L1=t[0-------L/R------100]
Ctl_R1=t
}
else
{
Ctl_L1=0;
Ctl_R1=0;
}
}
void GetSerial() interrupt 4
{
uchar New;
if(RI)
{
RI = 0;
New=SBUF;
switch(New)
{
case 0x00:CarGo(-50,-50);break; //后退
case 0x01:CarGo(-20,50);break; //左转
case 0x02:CarGo(50,-20);break; //右转
case 0x03:CarGo(0,0);break; //停止
case 0x04:CarGo(50,50);break; //前进
case 0x05: //加速
{
Li=Li>0?Li+10:Li-10;
Ri=Ri>0?Ri+10:Ri-10;
CarGo(Li,Ri);
}break;
case 0x06: //减速
{
Li=Li>0?Li-10:Li+10;
Ri=Ri>0?Ri-10:Ri+10;
CarGo(Li,Ri);
}break;
default: break;
}
SBUF=New;
while(!TI);
TI=0;
}
}
main()
{
CarGo(0,0); //刹车
InitCar();
while(1)
{}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
