#include<reg52.h>
#include"touwenjian.h"
sbit IN1=P1^2;
sbit IN2=P1^3;
sbit IN3=P1^6;
sbit IN4=P1^7;
sbit EN1=P1^4;
sbit EN2=P1^5;
//定义按键
sbit K4=P3^7;
//sbit K3=P3^6;
//蜂鸣器驱动口定义
sbit FM=P2^3;
//循迹LED指示灯定义
sbit Left_1_led=P3^3; //左循迹红外传感器
sbit Right_1_led=P3^2; //右循迹红外传感器
//避障LED指示灯定义
sbit Left_2_led=P3^4; //左避障红外传感器
sbit Right_2_led=P3^5; //右避障红外传感器
#define left_go {IN1=0,IN2=1;} //左电机向前走
#define left_back {IN1=1,IN2=0;} //左边电机向后转
#define left_stop {EN1=0;IN1=0,IN2=0;} //左边电机停转
#define right_go {IN3=1,IN4=0;} //右边电机向前走
#define right_back {IN3=0,IN4=1;} //右边电机向后走
#define right_stop {EN2=0;IN3=0,IN4=0;} //右边电机停转
unsigned char pwm_kong_left =0;
unsigned char pwm_kong_right =0;
unsigned char push_kong_left =6;
unsigned char push_kong_right =6;
bit right_pwm_on =1;
bit left_pwm_on =1;
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void qianjin(void)
{
right_go;
left_go;
}
void houtui(void)
{
right_back;
left_back;
}
void zuozhuan(void)
{
right_go;
left_stop;
}
void youzhuan(void)
{
right_stop;
left_go;
}
void tingzhi(void)
{
right_stop;
left_stop;
}
void pwm_tiaosu_right(void)
{
if(right_pwm_on)
{
if(pwm_kong_right<=push_kong_right)
{
EN1=1;
}
else
{
EN1=0;
}
if(pwm_kong_right==20)
{
pwm_kong_right=0;
}
}
else
{
EN1=0;
}
}
void pwm_tiaosu_left(void)
{
if(right_pwm_on)
{
if(pwm_kong_left<=push_kong_right)
{
EN2=1;
}
else
{
EN2=0;
}
if(pwm_kong_left==20)
{
pwm_kong_left=0;
}
}
else
{
EN2=0;
}
}
void timer0()interrupt 1 using 2
{
TH0=0XFC;
TL0=0X66;
pwm_kong_right++;
pwm_kong_left++;
pwm_tiaosu_right();
pwm_tiaosu_left();
}
//判断案件是否按下,按下就前进
void keyscan(void) //按键扫描函数
{
A: if(K4==0) //判断是否有按下信号
{
delay(10); //延时10ms
if(K4==0) //再次判断是否按下
{
FM=0; //蜂鸣器响
while(K4==0); //判断是否松开按键
FM=1; //蜂鸣器停止
}
else
{
goto A; //跳转到A重新检测
}
}
else
{
goto A; //跳转到A重新检测
}
}
void main(void)
{
P1=0x00;
// keyscan();
delay(1000);
TMOD=0X01;
TH0= 0XFC; //1ms定时
TL0= 0X66;
TR0= 1;
ET0= 1;
EA = 1;
while(1) //无限循环
{
//有信号为0 没有信号为1
if(Left_1_led==0&&Right_1_led==0)
qianjin(); //调用前进函数
else if(Left_1_led==1&&Right_1_led==0) //左边检测到黑线
{
zuozhuan(); //调用小车左转函数
}
else if(Right_1_led==1&&Left_1_led==0) //右边检测到黑线
{
youzhuan(); //调用小车右转函数
}
else
tingzhi();
}
}
|