蓝牙遥控小车程序.docx

上传人:b****1 文档编号:19025423 上传时间:2023-04-24 格式:DOCX 页数:12 大小:31.22KB
下载 相关 举报
蓝牙遥控小车程序.docx_第1页
第1页 / 共12页
蓝牙遥控小车程序.docx_第2页
第2页 / 共12页
蓝牙遥控小车程序.docx_第3页
第3页 / 共12页
蓝牙遥控小车程序.docx_第4页
第4页 / 共12页
蓝牙遥控小车程序.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

蓝牙遥控小车程序.docx

《蓝牙遥控小车程序.docx》由会员分享,可在线阅读,更多相关《蓝牙遥控小车程序.docx(12页珍藏版)》请在冰豆网上搜索。

蓝牙遥控小车程序.docx

蓝牙遥控小车程序

 

多功能小车程序

 

——成旺荣

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;//消隐

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1