|
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit IN1=P1^0;//定義控制左邊電機(jī)的單片機(jī)引腳
sbit IN2=P1^1;//定義控制左邊電機(jī)的單片機(jī)引腳
sbit IN3=P1^2;//定義控制右邊電機(jī)的單片機(jī)引腳
sbit IN4=P1^3;//定義控制右邊電機(jī)的單片機(jī)引腳
sbit IN5=P2^0;//定義控制左邊電機(jī)的單片機(jī)引腳
sbit IN6=P2^1;//定義控制左邊電機(jī)的單片機(jī)引腳
sbit IN7=P2^2;//定義控制右邊電機(jī)的單片機(jī)引腳
sbit IN8=P2^3;//定義控制右邊電機(jī)的單片機(jī)引腳
uchar a=0;//定義一個(gè)變量a用來(lái)讀取串口的數(shù)據(jù)
void UART_INIT()//初始化子程序
{
TMOD=0x20; //設(shè)置定時(shí)器T1為工作方式2
TH1=0xfd;
TL1=0xfd;//T1定時(shí)器裝初值
TR1=1;//啟動(dòng)定時(shí)器T1
REN=1;//允許串口接收
SM0=0;
SM1=1;//設(shè)置串口工作方式1
EA=1; //開總中斷
ES=1;//開串口中斷
}
void QIAN()
{
IN1=0;
IN2=1;//左邊輪子正轉(zhuǎn)
IN3=0;
IN4=1;//右邊輪子正轉(zhuǎn)
IN5=0;
IN6=1;//左邊輪子正轉(zhuǎn)
IN7=0;
IN8=1;//右邊輪子正轉(zhuǎn)
}
void HOU()
{
IN1=1;
IN2=0;//左邊輪子倒轉(zhuǎn)
IN3=1;
IN4=0;//右邊輪子倒轉(zhuǎn)
IN5=1;
IN6=0;//左邊輪子倒轉(zhuǎn)
IN7=1;
IN8=0;//右邊輪子倒轉(zhuǎn)
}
void ZUO()//小車左轉(zhuǎn)程序
{
IN1=1;
IN2=0; //左輪制動(dòng)
IN3=0;
IN4=1; //右輪正轉(zhuǎn)
IN5=1;
IN6=0; //左輪制動(dòng)
IN7=0;
IN8=1; //右輪正轉(zhuǎn)
}
void YOU()//小車右轉(zhuǎn)程序
{
IN1=0;
IN2=1; // 左邊輪子正轉(zhuǎn)
IN3=0; //右輪停止
IN4=1;
IN5=0;
IN6=1; // 左邊輪子正轉(zhuǎn)
IN7=0; //右輪停止
IN8=1;
}
void TING()//停止程序
{
IN1=1;
IN2=1;
IN3=1;
IN4=1;
IN5=1;
IN6=1;
IN7=1;
IN8=1;
}
void main()//主程序
{
init();//調(diào)用初始化子程序
while(1) //死循環(huán)
{
switch(a)//判斷a從串口讀取到的數(shù)據(jù)
{
case 0x4f: //0x1f 前進(jìn)
QIAN();
break;
case 0x3f: //0x2f 后退
HOU();
break;
case 0x2f: // 0x3f 左轉(zhuǎn)
ZUO();
break;
case 0x1f: //0x4f右轉(zhuǎn)
YOU();
break;
case 0x00: //0x00停止
TING();
break;
}
}
}
void UART_SER() interrupt 4//串口中斷服務(wù)
{
RI=0;//軟件清除串口響應(yīng)
a=SBUF;//讀取單片機(jī)串口接收的藍(lán)牙模塊發(fā)送的數(shù)據(jù)
}
|
|