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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)