/*****************************************************/
/********版權(quán)所有:愛電工作室 任先生 **********/
/********** 藍(lán)牙小車程序 ************************/
// 接口連接:
// 電機(jī)接口(4電機(jī)兩兩相連 并為兩組)
// P0.4和P0.5-----左電機(jī)
// P0.6和P0.7-----右電機(jī)
#include <reg52.h>
void UsartConfiguration();
unsigned char num;
sbit zuo1=P0^4; //定義單片機(jī)控制左邊電機(jī)的引腳
sbit zuo2=P0^5; //定義單片機(jī)控制左邊電機(jī)的引腳
sbit you1=P0^6;//定義單片機(jī)控制右邊電機(jī)的引腳
sbit you2=P0^7; //定義單片機(jī)控制右邊電機(jī)的引腳
void delay(unsigned int i)
{ unsigned int k;
for (k=0;k<i;k++);
}
void main() //主函數(shù)
{
UsartConfiguration(); //調(diào)用藍(lán)牙接受的參數(shù)
while(1)
{
if(num == 'q') //如果藍(lán)牙接收到q字母,就執(zhí)行下面的指令
{
if(num == 'q') //前進(jìn)
{
zuo1=0;
zuo2=1;
you1=1;
you2=0; // 0 1 1 0
delay(50); //如果L298N是接12V的電源,那么馬達(dá)的電壓是12v,速度太快了,需要降速
}
}
if(num == 'h') //如果藍(lán)牙接收到h字母,就執(zhí)行下面的指令
{
if(num == 'h') //后退
{
zuo1=1;
zuo2=0;
you1=0;
you2=1; // 1 0 0 1 // 1 1 1 1 上面是低電平,下面是高電平,四個馬達(dá)都會向后開
delay(50);
}
}
if(num == 'z') //如果藍(lán)牙接收到z字母,就執(zhí)行下面的指令
{
if(num == 'z') //原地左轉(zhuǎn)
{
zuo1=1;
zuo2=0;
you1=1;
you2=0; //1 0 1 0
delay(50);
}
}
if(num == 'y') //如果藍(lán)牙接收到y(tǒng)字母,就執(zhí)行下面的指令
{
if(num == 'y') //原地右轉(zhuǎn)
{ zuo1=0;
zuo2=1;
you1=0;
you2=1; //0 1 0 1
delay(50);
}
}
//測試程序
if(num == 'b') //如果藍(lán)牙接收到b字母,就執(zhí)行下面的指令
{
if(num == 'b')
{
zuo1=0; //左轉(zhuǎn)
zuo2=1;
you1=0;
you2=1;
delay(500); //前進(jìn)
zuo1=0;
zuo2=1;
you1=1;
you2=0;
delay(800);
}
}
if(num == 'c') //如果藍(lán)牙接收到b字母,就執(zhí)行下面的指令
{
if(num == 'c')
{
zuo1=1; //右轉(zhuǎn)
zuo2=0;
you1=1;
you2=0;
delay(500); //前進(jìn)
zuo1=0;
zuo2=1;
you1=1;
you2=0;
delay(800);
}
}
if(num == '0') //停車 //如果藍(lán)牙接收到數(shù)字0,就執(zhí)行下面的指令
{
zuo1=0;
zuo2=0;
you1=0;
you2=0;
}
}
}
void UsartConfiguration()
{
SCON=0x50; //設(shè)置為工作方式1
TMOD=0x20; //設(shè)置為工作方式2
// PCON=0x80; //波特率加倍
TH1=0xFD; //計數(shù)器初值設(shè)置,波特率是4800
TL1=0xFD;
ES=1; //開中斷
EA=1;
TR1=1; //開計數(shù)器
}
void interrupt_uart() interrupt 4 //using1切換寄存器組到1,進(jìn)入中斷就要判斷是發(fā)送中斷TI,還是接收中斷RI。
{
if(TI) //判斷是否為發(fā)送端TI中斷,中斷結(jié)束之后,只需發(fā)送端清零,表示發(fā)送完成。
{
TI = 0;
REN = 1; // ******允許接收數(shù)據(jù)。 *******
}
if(RI) //判斷是否為接收端RI中斷,中斷結(jié)束之后,只需接收端清零,表示接收完成。
{
RI = 0; //只要數(shù)據(jù)接收端清零,就可以取出數(shù)據(jù)。
num = SBUF; //SBUF取數(shù)據(jù)
SBUF = num; //*******把數(shù)據(jù)num從SBUF送出去。************
REN = 0; //嚴(yán)謹(jǐn)?shù)膶懛ǎl(fā)送數(shù)據(jù)的時候禁止接收數(shù)據(jù)。
}
//發(fā)送的時候不接收數(shù)據(jù) - ,發(fā)送完了再接收數(shù)據(jù)。
}
|