|
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit IN1=P1^0;//定义控制左边电机的单片机引脚
sbit IN2=P1^1;//定义控制左边电机的单片机引脚
sbit IN3=P1^2;//定义控制右边电机的单片机引脚
sbit IN4=P1^3;//定义控制右边电机的单片机引脚
sbit IN5=P2^0;//定义控制左边电机的单片机引脚
sbit IN6=P2^1;//定义控制左边电机的单片机引脚
sbit IN7=P2^2;//定义控制右边电机的单片机引脚
sbit IN8=P2^3;//定义控制右边电机的单片机引脚
uchar a=0;//定义一个变量a用来读取串口的数据
void UART_INIT()//初始化子程序
{
TMOD=0x20; //设置定时器T1为工作方式2
TH1=0xfd;
TL1=0xfd;//T1定时器装初值
TR1=1;//启动定时器T1
REN=1;//允许串口接收
SM0=0;
SM1=1;//设置串口工作方式1
EA=1; //开总中断
ES=1;//开串口中断
}
void QIAN()
{
IN1=0;
IN2=1;//左边轮子正转
IN3=0;
IN4=1;//右边轮子正转
IN5=0;
IN6=1;//左边轮子正转
IN7=0;
IN8=1;//右边轮子正转
}
void HOU()
{
IN1=1;
IN2=0;//左边轮子倒转
IN3=1;
IN4=0;//右边轮子倒转
IN5=1;
IN6=0;//左边轮子倒转
IN7=1;
IN8=0;//右边轮子倒转
}
void ZUO()//小车左转程序
{
IN1=1;
IN2=0; //左轮制动
IN3=0;
IN4=1; //右轮正转
IN5=1;
IN6=0; //左轮制动
IN7=0;
IN8=1; //右轮正转
}
void YOU()//小车右转程序
{
IN1=0;
IN2=1; // 左边轮子正转
IN3=0; //右轮停止
IN4=1;
IN5=0;
IN6=1; // 左边轮子正转
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();//调用初始化子程序
while(1) //死循环
{
switch(a)//判断a从串口读取到的数据
{
case 0x4f: //0x1f 前进
QIAN();
break;
case 0x3f: //0x2f 后退
HOU();
break;
case 0x2f: // 0x3f 左转
ZUO();
break;
case 0x1f: //0x4f右转
YOU();
break;
case 0x00: //0x00停止
TING();
break;
}
}
}
void UART_SER() interrupt 4//串口中断服务
{
RI=0;//软件清除串口响应
a=SBUF;//读取单片机串口接收的蓝牙模块发送的数据
}
|
|