當前位置:首頁 » 編程語言 » 循跡小車c語言程序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

循跡小車c語言程序

發布時間: 2023-01-17 18:40:21

Ⅰ STC的89C52做的循跡小車L298N的電機驅動急求一個c語言的驅動程序做循跡小車的有三個黑白關電

#include<reg51.h>

#define sen_port P1

sbit SEN1=P1^0;
sbit SEN2=P1^1;

sbit EN1=P2^2;
sbit IN1=P2^3;
sbit IN2=P2^4;

sbit EN2=P2^5;
sbit IN3=P2^6;
sbit IN4=P2^7;

void delay(int n) //延時子程序
{
unsigned char i,j,k;
for(i=n;i>0;i--)
for(j=100;j>0;j--)
for(k=200;k>0;k--);
}

unsigned char sensor_inp()
{
unsigned char sensor;
sensor = sen_port;
sensor &= 0x03;
P0 = sensor;
return sensor;
}

void forward() //two motos are runing forward
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
EN1=1;
EN2=1;
}

void backward() //two motos are runing backward
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
EN1=1;
EN2=1;
}
void turn_left() //left moto is runing, but right moto is brake
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
EN1=1;
EN2=1;
}
void rotate_left() //right moto is runing forward, and left moto is running backward
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
EN1=1;
EN2=1;
}
void turn_right() //right moto is runing, but left moto is brake
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
EN1=1;
EN2=1;
}
void rotate_right() //left moto is running forward, and right moto is running backward
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
EN1=1;
EN2=1;
}
void free() //two motos is free
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
EN1=0;
EN2=0;
}
void stop() //two motos stop
{
IN1=1;
IN2=1;
IN3=1;
IN4=1;
EN1=1;
EN2=1;
}
void main(void)
{
delay(10);
P0=0x55;
while(1)
{
// P0=P1;
// delay(100); forward();
// delay(100); stop();
delay(100); backward();
delay(100); stop();
delay(100); turn_left();
delay(100); stop();
delay(100); turn_right();
delay(100); stop();
delay(100); rotate_left();
delay(100); stop();
delay(100); rotate_right();
delay(100); stop();
delay(100); stop();
delay(20); forward();
delay(20); backward();
delay(20);
/*
*/
}
}
這個是沒有加感測器的,你試著加上傳感器改一下,有問題可以發郵件 [email protected]...

Ⅱ 基於89C51單片機,L298N驅動的循跡小車C語言程序幫忙寫一個

這個是lcd驅動程序啊,不是循跡小車驅動 配套程序: 接線方法程序里有

Ⅲ 求高手給一份c程序,用rpr220黑白循跡模塊進行小車黑白循跡,有急用的!!!~~~謝謝了啊

#include<reg52.h>

#define uchar unsigned char; //char單位元組整型數據或字元型數據
#define uint unsigned int; //int聲明基本整型數據

#define PON 0
#define POFF 1

#define ON 1
#define OFF 0

#define SPEED2 100
#define SPEED1 50

uchar ito=0;
uchar m=0;
uchar time=0;
uchar PWM1=0;
uchar PWM2=0;
sbit p=P2^0; //控制左輪
sbit q=P2^1; //控制右輪

sbit p_green=P2^2;
sbit p_red=P2^3;

sbit TCRD1=P2^4;//此處是感測器RPR220管腳位聲明
sbit TCRD2=P2^5;
sbit TCRD3=P2^6;
sbit TCRD4=P2^7;

int count1=0;//用於定時計數的兩個全局變數位聲明
int count2=0;
int x[4];

uchar table1[]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,關顯示,數碼管碼表,高電平有效

unsigned char code table2[]=
{0xfe,0xfd,0xfb, //11111110,11111101,11111011
0xf7,0xef,0xdf,0xbf,0x7f,}; //11110111,11101111,11011111,10111111,01111111

unsigned char dp=0x7f; //Use AND to add the decimal point/clock point.
unsigned char cp;

int s=0;
int sec=0; //定義路程,時間
char a;
int idi=0;
int j=0;

bit rup3=0;
int GAO=4000;
int T=0;//處理時間中斷3

int timeCount;//計時標志
int wheelCount;//測距標志
//int white=0;//測交叉線

void delay(int x)
{
int a;

int b;
for(a=x;a>0;a--)
for(b=125;b>0;b--);
}

void display()//顯示時間和路程
{

//顯示時間
P0=table1[x[idi]];
P1=table2[idi];
idi++;
if(idi==4)
idi=0;
delay(1);

}

void forward_turn1()//電機1前進
{
if(PWM1)
p=PON;
else
p=POFF;
}

void forward_turn2()//電機2前進
{
if(PWM2)
q=PON;
else
q=POFF;
}

void stop_turn1()//電機停止
{
P=POFF;
q=POFF;
}
void speed1(int ct,int sd)//電機1速度控制函數,其中參數 sd為生成 PWM 波
{
if(ct>=sd)
PWM1=0;
else
PWM1=1;
}

void speed2(int ct,int sd)//電機2速度控制函數,其中參數 sd為生成 PWM 波
{
if(ct>=sd)
PWM2=0;
else
PWM2=1;
}

void advance(int ct1,int sd1,int ct2,int sd2)//小車直線前進函數

{
forward_turn1();
forward_turn2();

speed1(ct1,sd1);
speed2(ct2,sd2);
}
//*************以下是方案1, 通過使兩輪一快一慢來實現轉向*********
void left_turn1(int ct1,int sd1,int ct2,int sd2)//小車左轉
{
forward_turn1();
forward_turn2();

speed1(ct1,sd1);
speed2(ct2,sd2);
}

void right_turn1(int ct1,int sd1,int ct2,int sd2)//小車右轉
{
forward_turn1();
forward_turn2();

speed1(ct1,sd1);
speed2(ct2,sd2);
}

//*************以下是方案2, 通過使兩輪一慢傳,一停轉來實現轉向***
void left_turn2(int ct1,int sd1,int ct2,int sd2)//小車左轉
{

forward_turn1();
forward_turn2();

speed1(ct1,sd1);
speed2(ct2,sd2);
}

void right_turn2(int ct1,int sd1,int ct2,int sd2)//小車右轉
{
forward_turn1();
stop_turn1();

speed1(ct1,sd1);
speed2(ct2,sd2);
}

void main()
{
p=1;
q=1;
TMOD=0x11;//中斷模式設置
TH0=(65536-1000)/256;//定時器1初始化
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;

TH1=(65536-1000)/256;//定時器2初始化
TL1=(65536-1000)%256;
EA=1;
ET1=1;
TR1=1;
while(1)

{
..............
}
}

void time0()interrupt 1
{
TH0=(65536-5000)/256;//定時 5ms
TL0=(65536-5000)%256;
count1++;
ito++;
if(ito==200)
{
ito=0;
s++;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
}
x[0]=m/10;
x[1]=m%10;
}
x[2] =s/10;
x[3] =s%10;
}
display();

if(count1==SPEED2)//周期是1s
count1=0;
count2++;
if(count2==SPEED2)//周期是1s
count2=0;
}

Ⅳ 急求基於MSP430單片機編寫的智能循跡小車C語言程序。要求小車能按圓形軌跡和8字形軌跡行駛。

MSP430
專門的教材
MSP430
有本署名

Ⅳ 下面一段c語言代碼驅動小車實現三路循跡,停車5秒,壁障,尋光,但是下載到單片機中,驅動小車存在問題。

三個問題:
1. 你的flag沒有初始化。
2. while(flag!=1){}中的代碼有些問題。有幾處應加上{ },給你改了一下:
while(flag!=1)
{
if(a5==0)
qianjin();
else
{ if(a4==0)
zuozhuan();
else
{ if(a6==0)
youzhuan();
else
flag=1;
}
}
}
3. 為什麼不在最外層設置大循環?

Ⅵ 單片機小車C語言行走程序,注釋

程序需要結合硬體,不同硬體程序也不一樣,就算硬體一樣,連線方法不同程序也不一樣。程序所實現的功能也不同,所以就算有程序,移植性也比較差。下面是我的小車黑白循跡的程序,包含前行轉彎等,希望能幫到你
#include <reg52.h>
sbit z0 = P1^0;
sbit z1 = P1^1;
sbit y0 = P1^2;
sbit y1 = P1^3;
sbit x = P1^4;
sbit m = P3^2;
sbit zm0 = P2^0;
sbit zm1 = P2^1;
sbit ym0 = P2^2;
sbit ym1 = P2^3;
unsigned int line=0,j=0;
void turnright()
{
ym0=1;
ym1=1;
zm0=1;
zm1=0;
}
void turnleft()
{
ym0=0;
ym1=1;
zm0=1;
zm1=1;
}
void zuozq()
{
ym0=0;
ym1=1;
zm0=0;
zm1=1;
}
void youzq()
{
ym0=1;
ym1=0;
zm0=1;
zm1=0;
}
void qianxing()
{
ym0=0;
ym1=1;
zm0=1;
zm1=0;
}
void stop()
{
ym0=1;
ym1=1;
zm0=1;
zm1=1;
}
void xunji()
{

if(z1==1&& y0==1) //檢測到黑線為低電位
qianxing();
if(z1==0&& y0==0)
qianxing();
if(z1==0&& y0==1)
turnleft();
if( y0==0&&z1==1)
turnright();
// if(z0==0&& y1==1)
// turnleft();
// if( y0==0&&z0==1)
// turnright();
}
void yanshi(unsigned int i)
{
unsigned int j;
while(--i)
for(j=0;j<12000;j++);
}
void wzhongan()
{
IT0=1;
EA=1;
EX0=1;
}
void youzhuan90()
{
youzq();
yanshi(3);
while(1)
{
youzq();
if(x==0)
break;
}
}

void case2()
{
youzq();
yanshi(5);
while(1)
{
if(m==0)
{
stop();
yanshi(10);
//
break;
}
}
zuozq();
yanshi(5);
while(1)
{
if(x==0)
{
qianxing();
yanshi(5);
break;
}
}
}
void zhuanshen()
{
EA=0;
while(1)
{
youzq();
yanshi(2);
if(m==0)
{
yanshi(2);
j++;
}
if(j>=4)
if(x==0)
{
xunji();
yanshi(3);
break;
}

}
EA=1;

}
void main()
{
wzhongan();
while(1)
{
switch(line)
{
case 2:EA=0; case2();EA=1;break;
case 4:EA=0; case2();EA=1;break;
case 7: EA=0;youzhuan90();youzhuan90();youzhuan90();youzhuan90();EA=1;break;
case 10:EA=0; case2();EA=1;break;
case 12:EA=0; case2();EA=1;break;
case 15: EA=0;youzhuan90();youzhuan90();youzhuan90();youzhuan90();EA=1;break;
default :xunji();
}

}
}
void w0 () interrupt 0
{
line++;
}