|
//P1.0~P1.7分別對(duì)應(yīng)小車1N1~1N8。
∥傳感器杜邦線連接(兩個(gè))OUT1,OUT2分別接P3.4~P3.7
#include <REGX52.H> //頭文件
#define uint unsigned int //宏定義
#define uchar unsigned char
#define left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //小車方位定義
#define left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;}
#define left_moto_stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;}
#define right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;}
#define right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}
#define right_moto_stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}
#define left_moto_pwm P1_1 //pwm信號(hào)端定義
#define left_moto_pwm1 P1_3
#define right_moto_pwm P1_5
#define right_moto_pwm1 P1_7
#define left_led P3-4
#define right_led P3-5
uchar pwm_val_left=0; // 占空比有關(guān)變量
uchar push_val_left=0; // 左電機(jī)占空比 N/10
uchar pwm_val_right=0;
uchar push_val_right=0; //右
//小車前進(jìn)
void go(void)
{
left_moto_go ;
right_moto_go ;
}
//小車后退
void back(void)
{
left_moto_back ;
right_moto_back ;
}
//小車停止
void stop(void)
{
left_moto_stop;
right_moto_stop;
}
//小車左轉(zhuǎn)
void left(void)
{
left_moto_stop;
right_moto_go ;
}
//小車右轉(zhuǎn)
void right(void)
{
left_moto_go ;
right_moto_stop ;
}
/*
pwm調(diào)制電機(jī)轉(zhuǎn)速
*/
void pwm_moto_left(void) //左電機(jī)
{
if(pwm_val_left <= push_val_left) // 小于占空比
{
left_moto_pwm=1; //高電平
left_moto_pwm1=1;
}
else
{
left_moto_pwm=0;
left_moto_pwm1=0;
}
if(pwm_val_left>=11) //10個(gè)
pwm_val_left=0;
}
void pwm_moto_right(void) //右電機(jī)
{
if(pwm_val_right <= push_val_right )
{
right_moto_pwm=1;
right_moto_pwm1=1;
}
else
{
right_moto_pwm=0;
right_moto_pwm1=0;
}
if(pwm_val_right>=11)
pwm_val_right=0;
}
//主函數(shù)
void main()
{
TMOD=0X01;
TH0=0XFC;
TL0=0X66;
ET0=1;
TR0=1;
EA=1; //總中斷開(kāi)關(guān)
while(1) //無(wú)限循環(huán)
{
if(left_led==0&&right_led==0)∥同時(shí)壓線
go();
else
{
if(left_led==1&&right_led==0)∥左壓
left();
if(left_led==0&&right_led==1)∥右壓
right();
}
}
}
//定時(shí)器0中斷
void time0() interrupt 1
{
TH0=0xfc;
TL0=0x66;
push_val_left++; // 占空比增加
push_val_right++;
pwm_moto_left( ); //左電機(jī)調(diào)速調(diào)用
pwm_moto_right( );
} |
|