|
/********************引腳定義*********************/
#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^1;
sbit sensor_3 = P1^3;
sbit Motor_1H = P2^0; //電機(jī)驅(qū)動(dòng)控制信號(hào)
sbit Motor_1L = P2^1;
sbit Motor_2H = P2^2;
sbit Motor_2L = P2^3;
sbit En_pwm1 = P2^4; //使能信號(hào)(RWM)
sbit En_pwm2 = P2^5;
uchar timer1; //定義變量
/***************主函數(shù)*********************/
void mian( )
{
TimelConfig();//定時(shí)器初始化
while(1)
{
if(Sensor_1==0 && Sensor_2==1 && Semsor_3==0) //狀態(tài):軌跡居中
Go_Straight(); //向前
else if(Sensor_1==0 && Sensor_2==0 && Semsor_3==1) //偏左
Turn_Right(); //右轉(zhuǎn)
else if(Sensor_1==1 && Sensor_2==0 && Semsor_3==0) //偏右
Turn_left(); //左轉(zhuǎn)
else if(Sensor_1==0 && Sensor_2==0 && Semsor_3==0) //偏離軌道
Go_Back(); //后退
else Go_Straight( ); //前進(jìn)
}
}
/**************設(shè)置定時(shí)器***********/
void Time1Config()
{
TMOD|= 0x10; //設(shè)置定時(shí)計(jì)數(shù)器T1工作在模式1
/***定時(shí)器賦初始值, 12MHZ下定時(shí)0.5ms***/
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í)器1的中斷號(hào)
{
timer1++;
if(timer1>Cyc1e) //PWM周期為100*0.5ms
{
timer1=0;
}
if(timer1 < Duty_cyc1e) //改變Duty_cyc1e這個(gè)值可以改變直流電機(jī)的速度
{
En_pwm1=1;
En_pwm2=1;
}
e1se
{
En_pwm1=0;
En_pwm2=0;
}
TH1 = 0xFE; //重新賦初值
TL1 = 0x0c;
} |
|