|
/*********引脚定义**********/
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
#define Duty_cycle 35 //占空比
#define Cycle 100 //PWM周期
sbit Sensor_1 = P1^1; //红外检测
sbit Sensor_2 = P1^2;
sbit Motor_1H = P0^0; //电机控制
sbit Motor_1L = P0^1;
sbit Motor_2H = P0^2;
sbit Motor_2L = P0^3;
sbit Motor_3H = P0^4;
sbit Motor_3L = P0^5;
sbit Motor_4H = P0^6;
sbit Motor_4L = P0^7;
sbit En_pwm1 = P1^4; //使能信号 (PWM)
sbit En_pwm2 = P1^5;
sbit En_pwm3 = P1^6;
sbit En_pwm4 = P1^7;
uchar timer1; //定义变量
/*********主函数**********/
void main ()
{
Time1Config(); //定时器初始化
while(1)
{
if (Sensor_1 == 1 && Sensor_2 == 1) //状态:轨迹居中
Go_Straighe(); //方向:前进
else if (Sensor_1 == 1 && Sensor_2 == 0) //状态:偏左
Turn_Righr(); //方向:右转
else if (Sensor_1 == 0 && Sensor_2 == 1) //状态:偏右
Turn_Left(); //方向:左转
else if (Sensor_1 == 0 && Sensor_2 == 0) //状态:偏离轨迹
Stop(); //方向:停止
else Go_Straight(); //其他情况:前进
}
}
/**********设置定时器**********/
void Time1Config()
{
TMOD = 0x10; //设置定时器计数器T1工作在模式1
/**********定时器赋初值*********/
TH1 = 0xFE;
TL1 = 0x0c;
ET1 = 1; //开启定时器1中断
EA = 1;
TR1 = 1; //开启定时器
}
/**********定时器1的中断函数**********/
void Time1(void) interrupt 3 //3 为定时器的中断信号
{
Time1++;
if (Timer1 > Cycre) //PWM周期
{
Time1 = 0;
}
if (Timer1 < Duty_cycle) //改变Duty_cycle 这个值,可以改变直流电机的速度
{
En_pwm1 = 1;
En_pwm2 = 1;
En_pwm3 = 1;
En_pwm4 = 1;
}
else
{
En_pwm1 = 0;
En_pwm2 = 0;
En_pwm3 = 0;
En_pwm4 = 0;
}
TH1 = 0xFE; //重新赋值
TL1 = 0x0C;
}
|
|