寫了一半的程序
#include<AT89X52.H> //包含51單片機頭文件,內部有各種寄存器定義
#include<QH_PWM.H> //包含HL-1藍牙智能小車驅動IO口定義等函數
//主函數
unsigned char pwm_val_left =0;//變量定義
unsigned char pwm_val_right =0;
unsigned char push_val_left =5;// 左電機占空比 N/20
unsigned char push_val_right=5;// 右電機占空比 N/20
bit Right_PWM_ON=1; //右電機 PWM 開關
bit Left_PWM_ON =1; //左電機 PWM 開關
void main(void)
{
sbit IN1=P1^2;
sbit IN2=P1^3;
sbit IN3=P1^4;
sbit IN4=P1^5;
sbit Left_1_led=P3^5; //定義前方左側紅外探頭端口
sbit Right_1_led=P3^6; //定義前方右側紅外探頭端口
unsigned char i;
P1=0X00; //關電機
TMOD=0X01;
TH0= 0XFc; //1ms定時
TL0= 0X18;
TR0= 1;
ET0= 1;
EA = 1; //開總中斷
while(1) //無限循環
{
//有信號為0 沒有信號為1
if(Left_1_led==0&&Right_1_led==0)
run(); //調用前進函數
else
{
if(Left_1_led==1&&Right_1_led==0) //左邊檢測到黑線
{
leftrun(); //調用小車左轉 函數
}
if(Right_1_led==1&&Left_1_led==0) //右邊檢測到黑線
{
rightrun(); //調用小車右轉 函數
}
if(Right_1_led==1&&Left_1_led==1) //懸空狀態 避懸崖
{
stop(); //調用小車停止
}
}
}
}
void run() //電機前進
{
push_val_left=5; //速度調節變量 0-20。。。0 最小,20 最大
push_val_right=5;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void leftrvn() //電機左轉彎
{
push_val_left=5; //速度調節變量 0-20。。。0 最小,20 最大
push_val_right=5;
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
void righturn() //電機右轉彎
{
push_val_left=5; //速度調節變量 0-20。。。0 最小,20 最大
push_val_right=5;
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
void stop() //電機停止
{
push_val_left=5; //速度調節變量 0-20。。。0 最小,20 最大
push_val_right=5;
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
// 左電機調速
/*調節 push_val_left 的值改變電機轉速,占空比*/
void pwm_out_left_moto(void)
{
if(Left_PWM_ON)
{
if(pwm_val_left<=push_val_left)
{
EN1=1;
}
else
{
EN1=0;
}
if(pwm_val_left>=20)
pwm_val_left=0;
}
else
{
EN1=0; //若未開啟 PWM 則 EN1=0 左電機 停止
}
}
/* 右電機調速 */
void pwm_out_right_moto(void)
{
if(Right_PWM_ON)
{
if(pwm_val_right<=push_val_right) //20ms 內 電 平 信 號 111 111
0000 0000 0000 00
{
EN2=1; //占空比 6:20
}
else
{
EN2=0;
}
if(pwm_val_right>=20)
pwm_val_right=0;
}
else
{
EN2=0; //若未開啟 PWM 則 EN2=0 右電機 停止
}
}
//TIMER0 中斷服務子函數產生 PWM 信號
void timer0()interrupt 1 using 2
{
TH0=0XFC; //1Ms 定時
TL0=0X66;
pwm_val_left++; //pwm jishi suanzi jia 1
pwm_val_right++; //you pwm jishi suanzi jia 1
pwm_out_left_moto(); //chansheng zuodianji EN pwm xinhao
pwm_out_right_moto(); //chansheng youdianji EN pwm xinhao
}
|