本篇文章给大家谈谈c语言循迹程序,以及c语言循环指令对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、求高手给一份c程序,用rpr220黑白循迹模块进行小车黑白循迹,有急用的!!!~~~谢谢了啊2、单片机小车C语言行走程序,注释3、c51 PWM波 c语言 循迹程序 讲解4、一段c语言代码驱动小车实现循迹,停车5秒,请问有什么问题?想了两天了。没想出来。 谢谢!5、C语言怎么在原有的循迹程序上加一个匀加速运动6、回溯算法,用c语言实现
求高手给一份c程序,用rpr220黑白循迹模块进行小车黑白循迹,有急用的!!!~~~谢谢了啊
#includereg52.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;a0;a–)
for(b=125;b0;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;
}
单片机小车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==0z1==1)
turnright();
// if(z0==0 y1==1)
// turnleft();
// if( y0==0z0==1)
// turnright();
}
void yanshi(unsigned int i)
{
unsigned int j;
while(–i)
for(j=0;j12000;j++);
}
void wzhongduan()
{
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()
{
wzhongduan();
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++;
}
c51 PWM波 c语言 循迹程序 讲解
静下心来仔细看看就能懂,最好自己写个简单的试试,靠别人讲理解不深,别做伸手党。这是智能车竞赛的程序?飞思卡尔还是瑞萨什么的?不过飞思卡尔貌似不让用51
一段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;
}
}
}
C语言怎么在原有的循迹程序上加一个匀加速运动
for(i=0;isize;i++){
for(j=0;jnumj++)
{
statement;
}
}
nest recycle 你的意思应该是巢状循环吧
j+1。。。。j+num
i++
j+1。。。。j+num
i++
。
。
。
i+size-1
j+1。。。。j+num
i+size
回溯算法,用c语言实现
这个算法应该不难,基本和全排列的算法类似,只不过判断条件不是n=1, 而是在判断已经取得的数的和=M为终止条件。
具体的算法,我给个大概流程吧
int lst[N]; //保存选取的数
int index = 0; //lst中最后的一个数的位置
func(W, N)
{
if(N == 0) //遍历完毕 返回
return;
for(i=0 to N)
{
if( W[i][1] != -1 ) //判断是否已经读取当前值
{
lst[index++] = W[i][0] //当前值加入到保存数组
W[i][1] = -1; //设置当前值已经读取,不可再读
if(check() == 0)
{
func(W, N-1); //大小不够M,继续往下读
}
else if(check() == 1)
{
print(lst); //和为M,输出
}
lst[–index] = 0; //回溯,寻找下一组解
W[i][1] = 0;
}
}
}
check()
{
if(sum(lst) W)
return -1;
if(sum(lst) W)
return 0;
return 1;
}
关于c语言循迹程序和c语言循环指令的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。