標(biāo)題:
藍(lán)牙單片機(jī)控制小車地盤源程序
[打印本頁]
作者:
ta1689
時間:
2018-7-3 17:25
標(biāo)題:
藍(lán)牙單片機(jī)控制小車地盤源程序
/************************************
課題:藍(lán)牙控制小車
效果:小車能與手機(jī)藍(lán)牙連接,實現(xiàn)前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、開燈、鳴笛、轉(zhuǎn)向燈、重力感應(yīng)控制等功能。
作者:change
店鋪:穿山乙電子
硬件鏈接:
左電機(jī)控制端口:P0.0、P0.1
右電機(jī)控制端口:P0.2、P0.3
*************************************/
#include<reg52.h>//聲明頭文件
#define uchar unsigned char//宏定義
#define uint unsigned int//宏定義
#define aa 35//左輪速度調(diào)節(jié)值
#define bb 35//右輪速度調(diào)節(jié)值
sbit deng=P2^0;//前車燈
sbit y=P2^1;//右轉(zhuǎn)向燈
sbit z=P2^2;//左轉(zhuǎn)向燈
sbit BEEP=P2^3;//蜂鳴器
sbit you1=P0^3;//右輪正轉(zhuǎn)信號端
sbit you2=P0^2;//右輪倒轉(zhuǎn)信號端
sbit zuo1=P0^1;//左輪正轉(zhuǎn)信號端
sbit zuo2=P0^0;//左輪倒轉(zhuǎn)信號端
uchar a=0;//定義一個變量a,用來讀取串口的數(shù)據(jù)
void delay(uint z)//一個帶參數(shù)的延時程序
{
int i,j;//定義兩個變量
for(i=10;i>0;i--)
for(j=z;j>0;j--);//將參數(shù)z賦值給j
}
void init()//初始化子程序
{
TMOD=0x20;//設(shè)置定時器T1為工作方式2
TH1=0xfd;
TL1=0xfd;//T1定時器裝初值
TR1=1;//啟動定時器T1
REN=1;//允許串口接收
SM0=0;
SM1=1;//設(shè)置串口工作方式1
EA=1;//開總中斷
ES=1;//開串口中斷
}
void go1()//前進(jìn)子程序
{
zuo1=1;
zuo2=0;//左邊輪子正轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo2=1;//關(guān)閉左邊輪子
you1=1;
you2=0; //右邊輪子正轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you2=1;//關(guān)閉右邊輪子
delay(100);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void go2()//前進(jìn)子程序
{
zuo1=1;
zuo2=0;//左邊輪子正轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo2=1;//關(guān)閉左邊輪子
you1=1;
you2=0; //右邊輪子正轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you2=1;//關(guān)閉右邊輪子
delay(80);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void go3()//前進(jìn)子程序
{
zuo1=1;
zuo2=0;//左邊輪子正轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo2=1;//關(guān)閉左邊輪子
you1=1;
you2=0; //右邊輪子正轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you2=1;//關(guān)閉右邊輪子
delay(60);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void go4()//前進(jìn)子程序
{
zuo1=1;
zuo2=0;//左邊輪子正轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo2=1;//關(guān)閉左邊輪子
you1=1;
you2=0; //右邊輪子正轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you2=1;//關(guān)閉右邊輪子
delay(40);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void go5()//前進(jìn)子程序
{
zuo1=1;
zuo2=0;//左邊輪子正轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo2=1;//關(guān)閉左邊輪子
you1=1;
you2=0; //右邊輪子正轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you2=1;//關(guān)閉右邊輪子
delay(20);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void go6()//前進(jìn)子程序
{
zuo1=1;
zuo2=0;//左邊輪子正轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo2=1;//關(guān)閉左邊輪子
you1=1;
you2=0; //右邊輪子正轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you2=1;//關(guān)閉右邊輪子
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void hui1()//小車后退的子程序
{
zuo1=0;
zuo2=1;//左邊輪子倒轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo1=1;//關(guān)閉左邊輪子
you1=0;
you2=1; //右邊輪子倒轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you1=1;//關(guān)閉右邊輪子
delay(100);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void hui2()//小車后退的子程序
{
zuo1=0;
zuo2=1;//左邊輪子倒轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo1=1;//關(guān)閉左邊輪子
you1=0;
you2=1; //右邊輪子倒轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you1=1;//關(guān)閉右邊輪子
delay(80);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void hui3()//小車后退的子程序
{
zuo1=0;
zuo2=1;//左邊輪子倒轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo1=1;//關(guān)閉左邊輪子
you1=0;
you2=1; //右邊輪子倒轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you1=1;//關(guān)閉右邊輪子
delay(60);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void hui4()//小車后退的子程序
{
zuo1=0;
zuo2=1;//左邊輪子倒轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo1=1;//關(guān)閉左邊輪子
you1=0;
you2=1; //右邊輪子倒轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you1=1;//關(guān)閉右邊輪子
delay(40);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void hui5()//小車后退的子程序
{
zuo1=0;
zuo2=1;//左邊輪子倒轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo1=1;//關(guān)閉左邊輪子
you1=0;
you2=1; //右邊輪子倒轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you1=1;//關(guān)閉右邊輪子
delay(20);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void hui6()//小車后退的子程序
{
zuo1=0;
zuo2=1;//左邊輪子倒轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo1=1;//關(guān)閉左邊輪子
you1=0;
you2=1; //右邊輪子倒轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you1=1;//關(guān)閉右邊輪子
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void turnleft()//小車左轉(zhuǎn)彎子程序
{
z=~z;//左轉(zhuǎn)向燈打開
zuo1=1;
zuo2=1;//左邊輪子停止轉(zhuǎn)動
you1=1;
you2=0; //右邊輪子正轉(zhuǎn)
delay(bb);//pwm有用值,越大右邊的輪子越快
you2=1;//右邊輪子停止
delay(50);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void turnright()//小車右轉(zhuǎn)彎子程序
{
y=~y;//右轉(zhuǎn)向燈打開
zuo1=1;
zuo2=0;//左邊輪子正轉(zhuǎn)
delay(aa);//pwm有用值,越大左邊方向的輪子越快
zuo2=1;//左邊輪子停止
you1=1;
you2=1; //右邊輪子停止
delay(50);//pwm無用值,越大,小車跑的越慢
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void down()//停止子程序
{
zuo1=1;
zuo2=1;
you1=1;
you2=1; //左右輪全部停止
z=1;
y=1;//關(guān)閉轉(zhuǎn)向燈
}
void main()//主程序
{
init();//調(diào)用初始化子程序
while(1)//死循環(huán)
{
if(a==0x14||a==0x15||a==0x54||a==0x55||a==0x64||a==0x65)//如果是就前進(jìn)
go1();
if(a==0x16||a==0x17||a==0x56||a==0x57||a==0x66||a==0x67)//如果是就前進(jìn)
go2();
if(a==0x18||a==0x19||a==0x58||a==0x59||a==0x68||a==0x69)//如果是就前進(jìn)
go3();
if(a==0x1a||a==0x1b||a==0x5a||a==0x5b||a==0x6a||a==0x6b)//如果是就前進(jìn)
go4();
if(a==0x1c||a==0x1d||a==0x5c||a==0x5d||a==0x6c||a==0x6d)//如果是就前進(jìn)
go5();
if(a==0x1e||a==0x1f||a==0x5e||a==0x5f||a==0x6e||a==0x6f)//如果是就前進(jìn)
go6();
if(a==0x24||a==0x25||a==0x74||a==0x75||a==0x84||a==0x85)//如果是就后退
hui1();
if(a==0x26||a==0x27||a==0x76||a==0x77||a==0x86||a==0x87)//如果是就后退
hui2();
if(a==0x28||a==0x29||a==0x78||a==0x79||a==0x88||a==0x89)//如果是就后退
hui3();
if(a==0x2a||a==0x2b||a==0x7a||a==0x7b||a==0x8a||a==0x8b)//如果是就后退
hui4();
if(a==0x2c||a==0x2d||a==0x7c||a==0x7d||a==0x8c||a==0x8d)//如果是就后退
hui5();
if(a==0x2e||a==0x2f||a==0x7e||a==0x7d||a==0x8e||a==0x8f)//如果是就后退
hui6();
if(a==0x3f)//如果是0x3f就左轉(zhuǎn)
turnleft();
if(a==0x4f)//如果是0x4f就右轉(zhuǎn)
turnright();
if(a==0x00)//如果是0x00就停止
down();
if(a==0xa0)//如果是0xa0車燈打開
deng=0;
if(a==0xb0)//如果是0xb0車燈關(guān)閉
deng=1;
if(a==0xc0)//如果是0xc0蜂鳴器鳴響
BEEP=0;
if(a==0xd0)//如果是0xd0蜂鳴器關(guān)
BEEP=1;
else
down();
}
}
void chuan() interrupt 4//串口中斷服務(wù)程序
{
RI=0;//軟件清除串口響應(yīng)
a=SBUF;//讀取單片機(jī)串口接受的藍(lán)牙模塊發(fā)送的數(shù)據(jù)
}
/******************************************
知識產(chǎn)權(quán)聲明:本程序為穿山乙電子原創(chuàng)作品,
擁有絕對的知識產(chǎn)權(quán)。未經(jīng)授權(quán),任何單位和個
人不得公開發(fā)布或用于任何商業(yè)用途,特此聲明!
*******************************************/
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1