|
/*********引腳定義**********/
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
#define Duty_cycle 35 //占空比
#define Cycle 100 //PWM周期
sbit Sensor_1 = P1^1; //紅外檢測(cè)
sbit Sensor_2 = P1^2;
sbit Motor_1H = P0^0; //電機(jī)控制
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; //使能信號(hào) (PWM)
sbit En_pwm2 = P1^5;
sbit En_pwm3 = P1^6;
sbit En_pwm4 = P1^7;
uchar timer1; //定義變量
/*********主函數(shù)**********/
void main ()
{
Time1Config(); //定時(shí)器初始化
while(1)
{
if (Sensor_1 == 1 && Sensor_2 == 1) //狀態(tài):軌跡居中
Go_Straighe(); //方向:前進(jìn)
else if (Sensor_1 == 1 && Sensor_2 == 0) //狀態(tài):偏左
Turn_Righr(); //方向:右轉(zhuǎn)
else if (Sensor_1 == 0 && Sensor_2 == 1) //狀態(tài):偏右
Turn_Left(); //方向:左轉(zhuǎn)
else if (Sensor_1 == 0 && Sensor_2 == 0) //狀態(tài):偏離軌跡
Stop(); //方向:停止
else Go_Straight(); //其他情況:前進(jìn)
}
}
/**********設(shè)置定時(shí)器**********/
void Time1Config()
{
TMOD = 0x10; //設(shè)置定時(shí)器計(jì)數(shù)器T1工作在模式1
/**********定時(shí)器賦初值*********/
TH1 = 0xFE;
TL1 = 0x0c;
ET1 = 1; //開(kāi)啟定時(shí)器1中斷
EA = 1;
TR1 = 1; //開(kāi)啟定時(shí)器
}
/**********定時(shí)器1的中斷函數(shù)**********/
void Time1(void) interrupt 3 //3 為定時(shí)器的中斷信號(hào)
{
Time1++;
if (Timer1 > Cycre) //PWM周期
{
Time1 = 0;
}
if (Timer1 < Duty_cycle) //改變Duty_cycle 這個(gè)值,可以改變直流電機(jī)的速度
{
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;
}
|
|