完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人新手,接触C语言一星期左右,弄了个小车代码但是发现好多问题。看来看去还是发现不了问题所在心累了。。请大神来看下代码然后告诉我哪里错了,还有就是要是可以的话告诉下怎么改。 小车流程是这样:先探测前方小车是否动,动了就跟着前方小车一起动(速度已知,而且同时要红外探黑线)。随后前方小车停止,我方小车也要停止。当前方小车再动时,我方小车要超车,然后回到原本轨道,跟着黑线走到终点。
我写的代码是这样的: |
|
相关推荐
5 个讨论
|
|
#include
#include #define RX P1_5 #define TX P1_4 unsigned int time=0; unsigned int timer=0; unsigned char posit=0; unsigned long S=0; unsigned char k=0; unsigned char mode; unsigned char i; ***it IN1=P2^0; ***it IN2=P2^1; ***it IN3=P2^2; ***it IN4=P2^3; //bit flag =0; //unsigned char const discode[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/}; unsigned char const positon[3]={ 0xdf,0xef,0xf7}; unsigned char di***uff[4] ={ 0,0,0,0,}; #define shuma P0 //定义P0口为数据口 ***it R1=P0^0; ***it R2=P0^1; ***it L1=P0^3; ***it L2=P0^2; ***it LED_4=P1^0; ***it LED_5=P1^1; ***it LED_6=P1^2; ***it LED_7=P1^3; void delay(unsigned int x); //声明延时函数 void display2();//unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4); //声明数码管显示函数 /定义段码=====0-9=====A-G=====*/ unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; /********************************************************/ /********************************************************/ void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100; //算出来是CM if(S>=700) //超出范围显示“-” { di***uff[0]=10; //“-” di***uff[1]=10; //“-” di***uff[2]=10; //“-” } else { di***uff[0]=S%1000/100; di***uff[1]=S%1000%100/10; di***uff[2]=S%1000%10 %10; } } /*******************o函数功能:定时器初始化和变量初始化************************/ void init_sys(void) //定时器初始化函数 { TMOD=0X01; TH0=0; TL0=0; EA=1; //开启中断 ET0=1; //允许T0中断 EX0=1; IT0=1; } /******************************3超声波工作时序********************************/ void StartModule() //启动模块 { TX=1; //启动一次模块 _nop_(); //延时1个(机器)指令周期 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } void delayx(unsigned long o) { while(o--);;; } void cejuxianshi() { StartModule(); //启动超声波模块 while(!RX); //当RX为0时等待 TR0=1; //开始计数 while(RX); //当RX为1时计数等待 TR0=0; //关闭计数 Conut(); //计算 display2(); } void main() { init_sys(); while(1) { cejuxianshi(); while(S<20&&k==0) { cejuxianshi(); IN1=IN2=IN3=IN4=0; } while(S>=20&&k==0) { cejuxianshi(); mode=1; if(L2) mode=2; if(R2) mode=3; if(mode==2 && L2==0) mode=1; if(mode==3 && R2==0) mode=1; delayx(800); if(S==20) k=1; } while(S<=20&&k==1) { cejuxianshi(); IN1=IN2=IN3=IN4=0; delayx(800); if(S>20) k=2; } while(k==2) { cejuxianshi(); mode=4; } while(k==3) { cejuxianshi(); IN1=IN3=1; IN2=IN4=0; if(L1==1||L2==1) mode=2; if(R1==1||R2==1) mode=3; } switch(mode) { case 1: for(i=0;i<255;i++) { if(i<=65) { IN1=1;IN2=0;IN3=1;IN4=0; } else { IN1=IN2=IN3=IN4=0; } break; } case 3: for(i=0;i<255;i++) { if(i<=55) { IN1=1;IN2=0;IN3=1;IN4=0; } if(i>55&&i<=75) { IN3=1;IN1=IN2=IN4=0; } else { IN1=IN2=IN3=IN4=0; } break; } case 2: for(i=0;i<255;i++) { if(i<=55) { IN1=1;IN2=0;IN3=1;IN4=0; } if(i>55&&i<=75) { IN1=1;IN3=IN2=IN4=0; } } break; case 4: { IN1=IN2=IN4=0;IN3=1;//原地左转 delayx(11000); IN3=1; IN4=0; IN1=1; IN2=0; //直走 delayx(8000); IN1=1; IN4=0; IN2=0; IN3=0; //原地右转 delayx(15000); IN3=1; IN2=0; IN3=1; IN4=0; //直走(超车) delayx(20000); IN1=1; IN4=0; IN3=0; IN2=0; //原地右转 delayx(10000); k=3; } break; } } } void delay(unsigned int x) { unsigned int i; //x?a?óê±3¤?è,?éò?éè?? for(i=0;i void display2()//unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4) { shuma=a[di***uff[0]]; //选中第五位,发送第一位段码 LED_4=0; delay(100); LED_4=1; shuma=a[di***uff[1]]; //选中第六位,发送第二位段码 LED_5=0; delay(100); LED_5=1; shuma=a[di***uff[2]]; //选中第七位,发送第三位段码 LED_6=0; delay(100); LED_6=1; //shuma=a[d4]; //选中第八位,发送第四位段码 //LED_7=0; //delay(100); //LED_7=1; } |
|
|
|
|
|
#include
#include #define RX P1_5 #define TX P1_4 unsigned int time=0; unsigned int timer=0; unsigned char posit=0; unsigned long S=0; unsigned char k=0; unsigned char mode; unsigned char i; ***it IN1=P2^0; ***it IN2=P2^1; ***it IN3=P2^2; ***it IN4=P2^3; //bit flag =0; //unsigned char const discode[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/}; unsigned char const positon[3]={ 0xdf,0xef,0xf7}; unsigned char di***uff[4] ={ 0,0,0,0,}; #define shuma P0 //定义P0口为数据口 ***it R1=P0^0; ***it R2=P0^1; ***it L1=P0^3; ***it L2=P0^2; ***it LED_4=P1^0; ***it LED_5=P1^1; ***it LED_6=P1^2; ***it LED_7=P1^3; void delay(unsigned int x); //声明延时函数 void display2();//unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4); //声明数码管显示函数 /定义段码=====0-9=====A-G=====*/ unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; /********************************************************/ /********************************************************/ void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100; //算出来是CM if(S>=700) //超出范围显示“-” { di***uff[0]=10; //“-” di***uff[1]=10; //“-” di***uff[2]=10; //“-” } else { di***uff[0]=S%1000/100; di***uff[1]=S%1000%100/10; di***uff[2]=S%1000%10 %10; } } /*******************o函数功能:定时器初始化和变量初始化************************/ void init_sys(void) //定时器初始化函数 { TMOD=0X01; TH0=0; TL0=0; EA=1; //开启中断 ET0=1; //允许T0中断 EX0=1; IT0=1; } /******************************3超声波工作时序********************************/ void StartModule() //启动模块 { TX=1; //启动一次模块 _nop_(); //延时1个(机器)指令周期 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } void delayx(unsigned long o) { while(o--);;; } void cejuxianshi() { StartModule(); //启动超声波模块 while(!RX); //当RX为0时等待 TR0=1; //开始计数 while(RX); //当RX为1时计数等待 TR0=0; //关闭计数 Conut(); //计算 display2(); } void main() { init_sys(); while(1) { cejuxianshi(); while(S<20&&k==0) { cejuxianshi(); IN1=IN2=IN3=IN4=0; } while(S>=20&&k==0) { cejuxianshi(); mode=1; if(L2) mode=2; if(R2) mode=3; if(mode==2 && L2==0) mode=1; if(mode==3 && R2==0) mode=1; delayx(800); if(S==20) k=1; } while(S<=20&&k==1) { cejuxianshi(); IN1=IN2=IN3=IN4=0; delayx(800); if(S>20) k=2; } while(k==2) { cejuxianshi(); mode=4; } while(k==3) { cejuxianshi(); IN1=IN3=1; IN2=IN4=0; if(L1==1||L2==1) mode=2; if(R1==1||R2==1) mode=3; } switch(mode) { case 1: for(i=0;i<255;i++) { if(i<=65) { IN1=1;IN2=0;IN3=1;IN4=0; } else { IN1=IN2=IN3=IN4=0; } break; } case 3: for(i=0;i<255;i++) { if(i<=55) { IN1=1;IN2=0;IN3=1;IN4=0; } if(i>55&&i<=75) { IN3=1;IN1=IN2=IN4=0; } else { IN1=IN2=IN3=IN4=0; } break; } case 2: for(i=0;i<255;i++) { if(i<=55) { IN1=1;IN2=0;IN3=1;IN4=0; } if(i>55&&i<=75) { IN1=1;IN3=IN2=IN4=0; } } break; case 4: { IN1=IN2=IN4=0;IN3=1;//原地左转 delayx(11000); IN3=1; IN4=0; IN1=1; IN2=0; //直走 delayx(8000); IN1=1; IN4=0; IN2=0; IN3=0; //原地右转 delayx(15000); IN3=1; IN2=0; IN3=1; IN4=0; //直走(超车) delayx(20000); IN1=1; IN4=0; IN3=0; IN2=0; //原地右转 delayx(10000); k=3; } break; } } } void delay(unsigned int x) { unsigned int i; //x?a?óê±3¤?è,?éò?éè?? for(i=0;i } void display2()//unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4) { shuma=a[di***uff[0]]; //选中第五位,发送第一位段码 LED_4=0; delay(100); LED_4=1; shuma=a[di***uff[1]]; //选中第六位,发送第二位段码 LED_5=0; delay(100); LED_5=1; shuma=a[di***uff[2]]; //选中第七位,发送第三位段码 LED_6=0; delay(100); LED_6=1; //shuma=a[d4]; //选中第八位,发送第四位段码 //LED_7=0; //delay(100); //LED_7=1; } |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1709个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
35817 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
3997 浏览 0 评论
5551 浏览 1 评论
6390 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
3864 浏览 0 评论
338浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
305浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
317浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
391浏览 2评论
398浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-10 03:10 , Processed in 0.821629 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号