|
這是他定義的模塊。然后我將主程序定義為一個名為xunji的模塊放在這里面。將主程序改寫成可以完成要求賽道的程序,后來發(fā)現(xiàn)可以調(diào)用xunji但當(dāng)再定義一個和循跡相似的倒車模塊時程序就亂掉了,注:我將傳感器加到了五個,中間一個計數(shù),前后各兩個以分別用來完成前進(jìn)和倒車循跡。
#ifndef _LED_H_
#define _LED_H_
//定義小車驅(qū)動模塊輸入IO口
sbit L293D_IN1=P1^2;
sbit L293D_IN2=P1^3;
sbit L293D_IN3=P1^4;
sbit L293D_IN4=P1^5;
sbit L293D_EN1=P1^6;
sbit L293D_EN2=P1^7;
/***蜂鳴器接線定義*****/
sbit BUZZ=P2^3;
#define Left_1_led P3_7 //左傳感器
#define Right_1_led P3_6 //右傳感器
#define Left_moto_pwm P1_6 //PWM信號端
#define Right_moto_pwm P1_7 //PWM信號端
#define Left_moto_go {P1_2=1,P1_3=0;} //左電機(jī)向前走
#define Left_moto_back {P1_2=0,P1_3=1;} //左邊電機(jī)向后轉(zhuǎn)
#define Left_moto_Stop {P1_2=0,P1_3=0;} //左邊電機(jī)停轉(zhuǎn)
#define Right_moto_go {P1_4=1,P1_5=0;} //右邊電機(jī)向前走
#define Right_moto_back {P1_4=0,P1_5=1;} //右邊電機(jī)向后走
#define Right_moto_Stop {P1_4=0,P1_5=0;} //右邊電機(jī)停轉(zhuǎn)
unsigned char pwm_val_left =0;//變量定義
unsigned char push_val_left =0;// 左電機(jī)占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右電機(jī)占空比N/20
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned int time=0;
/************************************************************************/
//延時函數(shù)
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前進(jìn)
void run(void)
{
push_val_left=12; //速度調(diào)節(jié)變量 0-20。。。0最小,20最大
push_val_right=12;
Left_moto_go ; //左電機(jī)往前走
Right_moto_go ; //右電機(jī)往前走
}
//后退函數(shù)
void backrun(void)
{
push_val_left=12; //速度調(diào)節(jié)變量 0-20。。。0最小,20最大
push_val_right=12;
Left_moto_back; //左電機(jī)往后走
Right_moto_back; //右電機(jī)往后走
}
//左轉(zhuǎn)
void leftrun(void)
{
push_val_left=5;
push_val_right=15;
Right_moto_go ; //右電機(jī)往前走
Left_moto_back ; //左電機(jī)后走
}
//右轉(zhuǎn)
void rightrun(void)
{
push_val_left=16;
push_val_right=8;
Left_moto_go ; //左電機(jī)往前走
Right_moto_back ; //右電機(jī)往后走
}
//停止
void stop(void)
{
Right_moto_Stop ; //右電機(jī)停止
Left_moto_Stop ; //左電機(jī)停止
}
/************************************************************************/
/* PWM調(diào)制電機(jī)轉(zhuǎn)速 */
/************************************************************************/
/* 左電機(jī)調(diào)速 */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比 */
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
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>=20)
pwm_val_left=0;
}
else
{
Left_moto_pwm=0;
// Left_moto_pwm1=0;
}
}
/******************************************************************/
/* 右電機(jī)調(diào)速 */
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
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>=20)
pwm_val_right=0;
}
else
{
Right_moto_pwm=0;
// Right_moto_pwm1=0;
}
}
/***************************************************/
///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號*/
void timer0()interrupt 1 using 2
{
TH0=0XFc; //1Ms定時
TL0=0X18;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/*********************************************************************/
#endif
|
|