#include<reg52.h>
sbit r1=P2^7;
sbit r2=P2^6;
sbit l1=P2^4;
sbit l2=P2^3;
sbit z=P1^4;//定義單片機連接循跡板右邊光電管的引腳
sbit y=P1^1;//定義單片機連接循跡板左邊光電管的引腳
sbit q1=P1^3;
sbit q2=P1^2;
void delay(int z)//pwm中使用的延時函數
{
int i,j;
for(i=2;i>0;i--)
for(j=z;j>0;j--);
}
void qian()//左右輪協同前進子函數
{
r1=0;
r2=1;
l1=1;
l2=0;
delay(8);//pwm調速 此為pwm有效值,前進時速度為全速的90%
r1=1;
r2=1;
l1=1;
l2=1;
delay(10-8);
}
void turnright()//左右輪協同 右轉子函數
{
r1=1;
r2=0;
l1=1;
l2=0;
delay(7);//pwm調速 此為pwm有效值,前進時速度為全速的80%
r1=1;
r2=1;
l1=1;
l2=1;
delay(10-7);
}
void turnleft()//左右輪協同 左轉子函數
{
r1=0;
r2=1;
l1=0;
l2=1;
delay(7);//pwm調速 此為pwm有效值,前進時速度為全速的80%
r1=1;
r2=1;
l1=1;
l2=1;
delay(10-7);
}
void ting()//左右輪都停止轉動
{
r1=1;
r2=1;
l1=1;
l2=1;
delay(50000);
}
void main()//主函數
{
z=1;
y=1;
q1=1;
q2=1;
while(1)//單片機不間斷監測 (是個死循環)
{
qian();//調用前進子函數,使小車光電管不滿足以下幾個條件時都處于前進狀態
while((q1==1)&&(q2==0))//判斷當左邊光電管遇到黑線時
{
turnleft();//調用左轉子函數
}
while((q1==0)&&(q2==1))//判斷當右邊光電管遇到黑線時
{
turnright();//調用右轉子函數
}
while((z==1)&&(y==1)&&(q1==1)&&(q2==1))//判斷當左、前、右光電管均遇到黑線時
{
qian(); //即遇到十字路口時 繼續前進
}
while((z==1)&&(y==1)&&(q1==0)&&(q2==0))//判斷當左、右光電管均遇到黑線,前光電管時
{
ting(); //即遇到T字路口時 停止
}
以上代碼51hei打包下載:
循跡小車16種.zip
(932 Bytes, 下載次數: 59)
2019-8-1 19:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|