基于51单片机超声波蓝牙遥控器汇编Word格式文档下载.docx
《基于51单片机超声波蓝牙遥控器汇编Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机超声波蓝牙遥控器汇编Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
#defineleft'
C'
#defineright'
D'
#defineup'
A'
#definedown'
B'
#definestop'
F'
charcodestr[]="
收到指令,向前!
\n"
;
charcodestr1[]="
收到指令,向后!
charcodestr2[]="
收到指令,向左!
charcodestr3[]="
收到指令,向右!
charcodestr4[]="
收到指令,停止!
bitflag_REC=0;
bitflag=0;
unsignedchari=0;
unsignedchardat=0;
unsignedcharbuff[5]=0;
//接收缓冲字节
voiddelay(unsignedintk)
{
unsignedintx,y;
for(x=0;
x<
k;
x++)
for(y=0;
y<
2000;
y++);
}
/************************************************************************/
//字符串发送函数
voidsend_str()
//传送字串
{
unsignedchari=0;
while(str[i]!
='
\0'
)
SBUF=str[i];
while(!
TI);
//等特数据传送
TI=0;
//清除数据传送标志
i++;
//下一个字符
}
}
voidsend_str1()
while(str1[i]!
SBUF=str1[i];
voidsend_str2()
while(str2[i]!
SBUF=str2[i];
voidsend_str3()
while(str3[i]!
SBUF=str3[i];
voidsend_str4()
while(str4[i]!
SBUF=str4[i];
//前速前进
voidrun(void)
{
Left_moto_go;
//左电机往前走
Right_moto_go;
//右电机往前走
//前速后退
voidbackrun(void)
Left_moto_back;
//左电机往后走
Right_moto_back;
//右电机往后走
//左转
voidleftrun(void)
//右转
voidrightrun(void)
//STOP
voidstoprun(void)
Left_moto_Stop;
Right_moto_Stop;
voidsint()interrupt4//中断接收3个字节
if(RI)//是否接收中断
RI=0;
dat=SBUF;
if(dat=='
O'
&
(i==0))//接收数据第一帧
buff[i]=dat;
flag=1;
//开始接收数据
else
if(flag==1)
i++;
if(i>
=2)
{i=0;
flag=0;
flag_REC=1;
}//停止接收
//以上修改
sbitLeftLed=P2^0;
//定义前方左侧指示灯端口
sbitRightLed=P0^7;
//定义前方右侧指示灯端口
sbitFontLled=P1^7;
sbitLeftIR=P3^5;
//定义前方左侧红外探头端口
sbitRightIR=P3^6;
//定义前方右侧红外探头端口
sbitFontIR=P3^7;
//定义前方正前方红外探头端口
sbitM1A=P0^0;
//定义左侧电机驱动A端
sbitM1B=P0^1;
//定义左侧电机驱动B端
sbitM2A=P0^2;
//定义右侧电机驱动A端
sbitM2B=P0^3;
//定义右侧电机驱动B端
sbitB1=P0^4;
//定义语音识识别传感器端口
sbitSB1=P0^6;
//定义蜂鸣器端口
sbitIRIN=P3^3;
//定义红外接收端口
//修改(超声波)
#defineTXP1_3
#defineRXP1_2
#defineForward_L_DATA180//当前进不能走直线的时候,请调节这两个参数,理想的时候是100,100,最大256,最小0。
0的时候最慢,256的时候最快
#defineForward_R_DATA180//例如小车前进的时候有点向左拐,说明右边马达转速过快,那可以取一个值大一点,另外一个值小一点,例如200190
//直流电机因为制造上的误差,同一个脉宽下也不一定速度一致的,需要自己手动调节
sbitL293D_IN1=P0^0;
sbitL293D_IN2=P0^1;
sbitL293D_IN3=P0^2;
sbitL293D_IN4=P0^3;
sbitL293D_EN1=P0^4;
sbitL293D_EN2=P0^5;
sbitBUZZ=P0^6;
voidDelay400Ms(void);
//延时400毫秒函数
unsignedchardisbuff[4]={0,0,0,0};
//用于分别存放距离的值0.1mm、mm、cm和m的值
voidCount(void);
//距离计算函数
unsignedinttime=0;
//用于存放定时器时间值
unsignedlongS=0;
//用于存放距离的值
//报错
bitcflag=0;
//量程溢出标志位
bitturn_right_flag;
//**********************************************************
//函数名称:
Delay1ms(unsignedinti)
//函数功能:
延时i*1ms的子程序(对应于22.1184Mhz晶振)
//形式参数:
unsignedinti
//行参说明:
无
//返回参数:
//使用说明:
i为要延时的时间长度,单位是MS,最大可以延时65536ms
//**********************************************************
voidDelay1ms(unsignedinti)
unsignedcharj,k;
do{
j=10;
do{
k=50;
_nop_();
}while(--k);
}while(--j);
}while(--i);
}
Delay10us(unsignedchari)
延时i*10us的子程序(对应于22.1184Mhz晶振)
i为要延时的时间长度,单位是US,最大可以延时250ms
voidDelay10us(unsignedchari)
unsignedcharj;
unsignedcharcodeLedShowData[]={0x03,0x9F,0x25,0x0D,0x99,//定义数码管显示数据
0x49,0x41,0x1F,0x01,0x19};
//0,1,2,3,4,5,6,7,8,9
unsignedcharcodeRecvData[]={0x