求高手给一份c程序,用rpr220黑白循迹模块进行小车黑白循迹,有急用的!!!~~~谢谢了啊

作者&投稿:悟垄 (若有异议请与网页底部的电邮联系)
求51单片机控制智能小车的c语言程序、、、,是前轮转向,后轮驱动,黑白线传感器循迹的,谢谢了~

你给的题盲点很多啊。

小车的前后左右函数。
while(1)
{
io口定义及初始化;
通过io读取传感器返回值;
对小车轨迹进行初步判断;
调用前后左右函数。
}

我以前是这么做的

#include

#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);
/*
*/
}
}
这个是没有加传感器的,你试着加上传感器改一下,有问题可以发邮件 815735856@qq.com...

#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;
}


高手用C帮我编写几个程序,我学习参考。~!!
int b(char c[N]){

求C语言编程高手编写以下C程序,本人用VC++6.0调试。非常感谢
y1=pow(y,(double)1\/n);printf("%5.3f,%5,3\\n",x1,y1);} 输入时相邻的整数用空格隔开...写一起是可以的..它自己默认就是空格隔开的...或者回车也是行的..比如要求2的3次根..3的2次根.则输入 2 3 3 2回车..

求C语言高手 帮忙做个程序
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 情况,闰年且输入月份大于3时需考虑多加一天。2.程序源代码:main(){ int day,month,year,sum,leap;printf("\\nplease input year,month,day\\n");scanf("%d,%d,%d",&year,&month,&day);switch...

高手们,帮我编几个c语言的小程序!!谢谢.明天就要交!!
编一C程序,它能读入两个整数m与n,计算并输出m与n的绝对值的最大公约数及最小公倍数 解:源程序如下:int gys (int x,int y){ int j;j=(x<y)?x:y;for(;j>0;j--)if(x%j==0&&y%j==0)break;else continue;return (j);} int gbs (int z,int w){ int i;i=(z>w)?z:...

高手们,谁能帮我写一个C程序,作业急用!!
return (st->yinyu+st->shuxue+st->cyuyan+st->tiyu)\/4.0f;} \/\/输出学生信息到文件或屏幕(f==NULL时输出到屏幕)void outputstudent(student* st,FILE* f){ if(f==NULL)f=stdout;fprintf(f,"%s %s %.2f %.2f %.2f %.2f %.2f\\n",st->name,st->no,st->yinyu,st->shuxue,...

用C语言写一段程序,高手快来哦!
nEnd=nMiddle-1;else nStart=nMiddle+1;} return -1;} int main(void){ int x[RANGE], y = 0, i = 0;printf("请输入%d个整数:", RANGE);for(i = 0; i< RANGE; i++) scanf("%d", x + i);sort(x);printf("排序后为:\\n");for(i = 0; i < RANGE; i++) printf...

编写一个C程序,输入a,b,c三个值,输出其中最大者。
include<stdio.h> int main(){ int a,b,c,max;printf("请输入三个数:\\n");scanf("%d%d%d",&a,&b,&c);if(a>b)max=a;if(c>max)max = c;printf("三个数中最大的数为:%d",max);return 0;}

高手快来帮帮忙!(C程序)
unsigned short a[16],b[16],c[16],d[16],e[16],g[16],x,y,z=0,i;printf("input x y\\n");scanf("%u%u",&x,&y);c[0]=x,d[0]=y;for(i=1;i<=15;i++) c[i]=c[i-1]\/2;for(i=1;i<=15;i++) d[i]=d[i-1]\/2;for(i=0;i<=15;i++) a[i]=c[i]...

拜托哪位高手帮我写一下这道程序,是c语言的,谢谢啦
e,money;\/\/定义用电量为e,电费为moneyprintf("请输入用户的月用电量e: 千瓦时\\n");scanf("%lf",&e);if(e>0 && e<=50)money=0.53*e;else if(e>50)money=0.53*50+(0.53+0.05)*(e-50);printf("用户该支出的电费是%.2lf元\\n",money);return 0;}运行效果如图:...

跪求C语言编程高手帮忙编个小程序,大一年级的
tot=a+b+c+d+e;printf("字符串中共有:%d字符\\n大写字母:%d个\\n小写字母:%d个\\n数字:%d个\\n空格:%d个\\n其他字符:%d\\n",tot,a,b,c,d,e);for(i=0;i<tot-1;i++){ iPos = i;for(j=i+1;j<tot;j++)if(ch[j]<ch[iPos])iPos=j;iTemp = ch[i];ch[i] = ch[...

永仁县19173429930: 仅用RPR220(光电传感器)和一个TIP122(达林顿三极管)完成一个简单的壁障电路 -
单于媚美开: 1、需要接几个电阻限流,否则会烧器件.2、只用一个RPR220加一个TIP122做不到遇障碍灯亮,只能灯灭.3、调整R2的阻值可以调节检测距离.

永仁县19173429930: 紧急求助高手,用C语言编写一段程序,求两个集合的笛卡尔乘积.并对运行结果截图. -
单于媚美开: 程序:#include # define m 3# define n 2 void main() { int i,j,a[m],b[n]; for (i=0;i scanf("%d",&a[i]); for (j=0;j scanf("%d",&b[j]); printf("集合a:\n"); for (i=0;i printf("\n集合b:\n"); for (i=0;i printf("\n{"); for (i=0;i for (j=0;j printf(" ",a[i],b[j]); printf("}\n"); } 运行结果请看贴的图片

永仁县19173429930: C语言程序,error C2143,error C2059,求高手解决!
单于媚美开: void InitStack(SqStack &amp;s) 你这是引用变量,只有C++才支持变量的引用! .c是C的源程序扩展名 .cpp是C++的程序扩展名,所以,你要想编译通过,只能改成cpp vc vs都是根据文件扩展名来决定用c++编译还是用C编译

永仁县19173429930: 由键盘输入10个数,求出其中的最大值、最小值及平均值希望高手用C给写出程序来 ~~~谢谢 ~`~ -
单于媚美开:[答案] #include using namespace std; int max(int *p); int min(int *p); double avg(int *p); void main() { int a[10]; for(int i=0;i>a[i]; cout

永仁县19173429930: 求高手给个1到N各数阶乘分之一和的C语言算法 -
单于媚美开: #include<stdio.h> #include<math.h> int main() {int i,j,n,s1;double s;scanf("%d",&n);for(i=1,s=0;i<=n;i++){for(j=1,s1=1;j<=i;j++)s1=s1*j;s=s+1.0/s1;}printf("%f",s);return 0; }

永仁县19173429930: 我的C语言作业,同样的,求高人帮助,到底哪里错了?!!! -
单于媚美开: #include<stdio.h> int main() {int t;/*使用整数*/char y;scanf("%d",&t);/*t要传地址*/if(t>=0&&t<=100){if(t>=90) y='A';else if(t>=80) y='B';else if(t>=70) y='C';else if(t>=60) y='D';else if(t>=0) y='E';printf("%c\n",y);}else printf("Score is error!\n");return 0; }

永仁县19173429930: 跪求 :C语言编程高手 帮忙解决
单于媚美开: 参考答案:#include "stdio.h" int IsNumberEqual(int number); void ntos (int number, int c[]) ; void sort (int a[ ] ); int getmaxn(int a[ ]); int getminn(int b[ ]) ; void main() {int number,i,c[4],max,min,s; printf("请输入一个互不相等的4位数:"); ...

永仁县19173429930: 急!!!求c语言编程高手:c语言编程问题:巧分橘子.一家农户以果园为生,一天,父亲拿出一堆橘子,共2520个,准备分给他的6个儿子.父亲按事先写... -
单于媚美开:[答案] 主题思想:a[i]原有的橘子等于a[i]现有的加上给别人的再减去得到的;但是其中除了老大外都是先得到后给出,而老大是先给出后得到运算顺序要弄清楚!所以a[0]的计算方法不太一样!#includevoid main(){ int a[6],b[6],...

永仁县19173429930: 求高手教我一道简单的C语言题;编写程序,从键盘接收一个简单的四则运算表达式,计算结果再输出.记得是表达式啊,先多谢了!
单于媚美开: #include<stdio.h> void main() { float a,b,result; char ch; scanf("%f%c%f",&a,&ch,&b); switch(ch) { case '+':printf("%.2f%c%.2f=%f\n",a,ch,b,a+b);break; case '-':printf("%.2f%c%.2f=%f\n",a,ch,b,a-b);break; case '*':printf("%.2f%c%.2f=%f\n",...

永仁县19173429930: 求高手c语言题1. 用三种方法求1到100的累加和,即for循环、while循环、do - while循环2. 输入一个正数,利用while循环倒序输出该数,例如输入47812,那么... -
单于媚美开:[答案] //第一题 #include void main() { int i,sum=0; for(i=1;i sum+=i; printf("for循环结果:%d\n",sum); sum=0; i=100; while(i) { sum=sum+i; i--; } printf("while循环结果:%d\n",sum); sum=0; i=1; do { sum=sum+i; i++; }while(i printf("do_while循环结果:%d\n"...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网