蓝牙遥控小车程序文件.docx
《蓝牙遥控小车程序文件.docx》由会员分享,可在线阅读,更多相关《蓝牙遥控小车程序文件.docx(13页珍藏版)》请在冰豆网上搜索。
蓝牙遥控小车程序文件
多功能小车程序
——成旺荣
2015-4-6
//main.c
#include"allhead.h"
#defineucharunsignedchar
#defineuintunsignedint
floatdis=0;//原始距离
intdistance=0;//距离整数
charchangeint[4]={'0','1','2','3'};
voidmain()
{
maininit();//全部初始化
while
(1)
{
//beer=0;
dis=MeasureDistance();//测量距离
distance=(int)(dis*1);//单位mm
disapple(distance);//数码管显示
change_int_to_char(distance);//把距离变成四位字符
send_and_control();//发送距离的四位字符
Car(s1,s2);delayms(10);
}
}
//mainint.c初始化
#include"allhead.h"
voidmaininit()
{
s1=0;
s2=0;
SCON=0X50;//设置串口工作方式为工作方式1包含SM0SM1SM2REN01010000
//SM0=0;
//SM1=1;
//REN=1;
PCON=0X80;//波特率加倍
TMOD=0X21;//计时器0工作1,计时器1工作2
TH0=0;//计数器0
TL0=0;
TH1=0XFA;//计数器1初始值设置,注意波特率是9600的
TL1=0XFA;
IT0=1;//下降沿触发
EX0=1;//开外部中断
ET0=1;//开定时器0中断
TR0=0;//未打开计数器
ES=1;//打开接收中断
EA=1;//开总中断
TR1=1;//打开计数器
}
//hc04.c蓝牙模块
#include"allhead.h"
#include"main.h"
unsignedcharflag;
charreceiveData;//蓝牙接收数据
voidsendout()
{
inti;
for(i=0;i<4;i++)
{
SBUF=changeint[i];
while(!
TI);//等待发送数据完成
TI=0;//清除发送完成标志位
}
for(i=0;i<2;i++)
{
SBUF='m';
while(!
TI);//等待发送数据完成
TI=0;
}
SBUF='\n';
while(!
TI);//等待发送数据完成
TI=0;
}
/*******************************************************************************
*函数名:
Usart()interrupt4
*函数功能:
中断输入函数
*输入:
无
*输出:
无
*******************************************************************************/
voidUsart()interrupt4
{
inti;
//charreceiveData;//蓝牙接收数据
receiveData=SBUF;//出去接收到的数据
RI=0;//清除接收中断标志位
flag=1;
}
//eat.c超声波模块
#include"allhead.h"
floati=0.0;
floatMeasureDistance()
{
TH0=0;
TL0=0;
Echo=0;
Trig=1;//延时
Delay10us();
Trig=0;
while(Echo==0);
TR0=1;
delayms(20);
return(i);
}
voidcounter0(void)interrupt0
{
TR0=0;
i=((float)TH0*256+(float)TL0)*0.17;//距离,返回值为mm值
TH0=0;
TL0=0;
if(i<300)
{
beer=1;
delayms
(1);
beer=0;
delayms(5);
}
}
voidTimer0()interrupt1
{
}
//send_and_control.c输出与控制
#include"allhead.h"
unsignedints1,s2;
voidsend_and_control()
{
if(distance<300)
{
s1=2;
}
if(flag==1)
{
ES=0;
switch(receiveData)
{
case'1':
s1=1;break;//前进
case'2':
s1=2;break;//后退
case'3':
s1=3;break;//左拐
case'4':
s1=4;break;//右拐
case'5':
s1=5;break;//后退
case'6':
s2+=5;
if(s2>=30)s2=0;break;//减速
case'7':
s2-=5;
if(s2<=0)s2=10;break;//加速
case'8':
{
sendout();
break;
}//case
default:
s1=5;break;
}//switch
ES=1;
flag=0;
}//if
}
//car.c
#include"allhead.h"
voidCar(unsignedintc,unsignedintd)
{
switch(c)
{
case1:
Go();
delayms(10);Stop();delayms(d);
Go();break;
case2:
Back();
delayms(10);Stop();delayms(d);
Back();break;
case3:
Turn_left();
delayms(5);Stop();delayms(10);
Turn_left();break;
case4:
Turn_Right();
delayms(5);Stop();delayms(10);
Turn_Right();break;
case5:
Stop();break;
}
}
voidTurn_left(void)
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
}
voidTurn_Right(void)
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
}
voidGo(void)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
voidBack(void)
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
voidStop(void)
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
//displayable.c数码管显示
#include"allhead.h"
/*
//--定义全局变量--//
unsignedcharcodeDIG_PLACE[8]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制查表的方法控制
unsignedcharcodeDIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
*/
unsignedcharcodeDIG_PLACE[4]={/*0x01,0x02,0x04,0x08*/0xfe,0xfd,0xfb,0xf7};
unsignedcharcodeDIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
//共阴极
unsignedcharDisplayData[4];
//用来存放要显示的4位数的值
intapple[4]={0};
/*******************************************************************************
*函数名:
disapple
*函数功能:
转换函数
*输入:
无
*输出:
无
*******************************************************************************/
voiddisapple(intj)
{
unsignedchari;
unsignedintk;
inta1,a2,a3,a4;
a1=j/1000;
a2=(j%1000)/100;
a3=(j%100)/10;
a4=j%10;
apple[0]=a1;
apple[1]=a2;
apple[2]=a3;
apple[3]=a4;
DisplayData[0]=DIG_CODE[a1];
DisplayData[1]=DIG_CODE[a2];
DisplayData[2]=DIG_CODE[a3];
DisplayData[3]=DIG_CODE[a4];
for(i=0;i<4;i++)
{
GPIO_PLACE=DIG_PLACE[i];//发送位选
GPIO_DIG=DisplayData[i];//发送段码
k=10;//扫描间隔时间设定
while(k--);
GPIO_DIG=0x00;//消隐
}
}