基于STC89C52单片机的智能循迹小车设计(3)
时间:2025-07-11
时间:2025-07-11
第7卷第31期(2011年11月)ComputerKnowledgeandTechnology电脑知识与技术{delay(10);while(1){switch(sensor_inp()){case0x02:forward();break;case0x04:turn_left();break;case0x01:turn_right();break;default:break;}}}程序开始,进入主函数。调用延迟函数delay(),用以使系统达到稳定状态。在KEIL软件下进行断点运行,测得这里的de lay(10)在11.0592MHz的晶振下可以延迟100ms。之后进入while循环,条件始终为真,表示小车将一直运行while函数中的语句,直至外界迫使小车停下。在switch分支语句中,case0x02将使程序跳转至forward();,其中0x02即为二进制的00000010,这表示三个传感器中,只有中间的传感器输出的是高电平,左右两个传感器都输出低电平,故小车沿直线行走。case0x04将使程序跳转至turn_left();,其中0x04即为二进制的00000100,这表示三个传感器中,只有左边的传感器输出的是高电平,中间和右边的传感器输出的均为低电平,故小车左拐。case0x01将使程序跳转至turn_right();,其中0x01即为二进制的00000001,这表示三个传感器中,只有右边的传感器输出的是高电平,左边和中间的传感器均输出低电平,故小车右拐。
3.2小车前进子程序模块
voidforward(){IN1=1;IN2=0;IN3=1;IN4=0;EN1=1;EN2=1;}该程序中,L293D芯片的两个使能端EN1和EN2一直保持高电平。IN1=1,IN2=0说明右边电机向前转动;IN3=1,IN4=0说明左边电机也向前转动。故两个电机同时向前转动,从而驱动小车向前行进。
3.3小车左转子程序模块
voidturn_right(){IN1=1;IN2=0;IN3=0;IN4=0;EN1=1;EN2=1;}该程序中,使能端EN1和EN2仍然保持高电平。IN1=0,IN2=0,表明右边电机向前转动;而IN3=0,IN4=0,说明左边电机不动。左轮不转右轮转,这样就实现了小车向左转
3.4小车右转子程序模块
voidturn_left(){IN1=0;IN2=0;IN3=1;IN4=0;EN1=1;EN2=1;}该程序中,使能端EN1和EN2仍然保持高电平。IN1=0,IN2=0表明右边电机停止不转动;IN3=1,IN4=0说明左边电机向前转动。右轮不转左轮转,这样就实现了小车右转。
3.5延时子程序模块
voiddelay(intn){unsignedchari,j,k;for(i=n;i>0;i--)for(j=50;j>0;j--)for(k=100;k>0;k--);}该延时子程序主要是让系统初始化到最佳状态。经由KEIL软件的断点测试,在晶振频率为11.0592MHz时,当n=10时,可延时100ms。(下转第7758页)本栏目责任编辑:唐一东人工智能及识别技术7753
上一篇:显微分析技术-电子显微镜
下一篇:上海家化波特五力模型分析