|
小白剛開(kāi)始學(xué)習(xí)單片機(jī) 下面是我寫(xiě)的智能小車(chē)代碼 要求是能在黑色停止線停幾秒 但是我停下來(lái)就不走了 那個(gè)大佬幫幫我...
單片機(jī)代碼如下:
#ifndef _LED_H_
#define _LED_H_
//定義小車(chē)驅(qū)動(dòng)模塊輸入IO口
sbit L293D_IN1=P1^2; //左邊輪在高電位前轉(zhuǎn)
sbit L293D_IN2=P1^3; //左邊輪在高電位后轉(zhuǎn)
sbit L293D_IN3=P1^4; //右邊輪高電位前轉(zhuǎn)
sbit L293D_IN4=P1^5; //右邊輪在高電位后轉(zhuǎn)
/***蜂鳴器接線定義*****/
sbit BUZZ=P2^3;
#define Left_1_led P3_6//左傳感器
#define Right_1_led P3_7 //右傳感器
#define Left_2_led P3_4
#define Right_2_led P2_0
#define Left_3_led P3_5
#define Right_3_led P2_1
#define Left_moto_pwm P1_6 //PWM信號(hào)端
#define Right_moto_pwm P1_7 //PWM信號(hào)端
#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;// 0左電機(jī)占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;//0// 右電機(jī)占空比N/20
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned int time=0;
/************************************************************************/
//延時(shí)函數(shù)
void delayMs(int count)
{
int i;
int n=count/50;
for(i;i<n;i++)
{
time=0;
while(time<=n);
}
}
/************************************************************************/
//前速前進(jìn)
void car_run(unsigned int left_value,unsigned int right_value)
{
if(pwm_val_left<=left_value)
{
Left_moto_pwm=1;
P1_2=1;
}
else
{
Left_moto_pwm=0;
P1_2=0;
}
if(pwm_val_right<=right_value)
{
Right_moto_pwm=1;
P1_4=1;
}
else
{
Right_moto_pwm=0;
P1_4=0;
}
L293D_IN2=0;
L293D_IN4=0;
}
void run(unsigned int value)
{
car_run(value,value);
}
//左轉(zhuǎn)
void leftrun(void)
{
Right_moto_go ; //右電機(jī)往前走
Left_moto_back ; //左電機(jī)后走
}
//右轉(zhuǎn)
void rightrun(void)
{
Left_moto_go ; //左電機(jī)往前走
Right_moto_back ; //右電機(jī)往后走
}
//停止
void stop(void)
{
Right_moto_Stop ; //右電機(jī)停止
Left_moto_Stop ; //左電機(jī)停止
}
#endif
主函數(shù)如下:
#include<AT89X52.H>
#include<ZY-4WD_PWM.H>
//主函數(shù)
void main(void)
{
unsigned char i;
P1=0X00; //關(guān)電機(jī)
TMOD=0X01;
TH0= 0XFc; //1ms定時(shí)
TL0= 0X18;
TR0= 1;
ET0= 1;
EA = 1; //開(kāi)總中斷
while(1) //無(wú)限循環(huán)
{
//有信號(hào)為0 沒(méi)有信號(hào)為1
if(Left_1_led==0&&Right_1_led==0)
{
run(50); //調(diào)用前進(jìn)函數(shù)
}
else if(Right_1_led==1&&Left_1_led==1&&(Right_2_led==1||Left_2_led==1)) //停車(chē)線,停車(chē)
{
stop(); //調(diào)用小車(chē)停止
delayMs(1000);
run(50);
}
else if(Left_1_led==1&&Right_1_led==0) //左邊檢測(cè)到黑線
{
leftrun(); //調(diào)用小車(chē)左轉(zhuǎn) 函數(shù)
}
else if(Right_1_led==1&&Left_1_led==0) //右邊檢測(cè)到黑線
{
rightrun(); //調(diào)用小車(chē)右轉(zhuǎn) 函數(shù)
}
}
}
|
|