一段c语言代码驱动小车实现循迹,停车5秒,请问有什么问题?想了两天了。没想出来。 谢谢!

一段c语言代码驱动小车实现循迹,停车5秒,请问有什么问题?想了两天了。没想出来。 谢谢!,第1张

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

}

}

}

for(i=0i<sizei++){

for(j=0j<numj++)

{

statement;

}

}

nest recycle 你的意思应该是巢状循环吧

j+1。。。。j+num

i++

j+1。。。。j+num

i++

i+size-1

j+1。。。。j+num

i+size

#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=xa>0a--)

for(b=125b>0b--)

}

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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12097076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存