(最新版)基于单片机的智能循迹小车毕业论文设计 下载本文

内容发布更新时间 : 2024/5/7 7:21:20星期一 下面是文章的全部内容请认真阅读。

单片机PCB图

L298N电机驱动模块PCB图

附录B 程序代码

智能循迹小车的#C程序

#include

forward1(); forward2();

speed(cnt1,sd1,cnt2,sd2); }

*********************电机的后退控制********************* void back(int cnt1,int sd1,int cnt2,int sd2) { back1(); back2();

speed(cnt1,sd1,cnt2,sd2); }

*********************第三部分 主函数********************* void main() { int num=0;

TMOD=0x01; 中断模式设置 EA=1;

TH0=()256; 定时 1ms TL0=()%6; ET0=1; TR0=1;

turn(count1,250,count2,250); 使小车冲上黑色轨道 delay(350); 延时等待小车冲上黑色轨道 while(1) {

if(RP1==1&&RP2==1&&RP3==1&&RP4==1)

back(count1,50,count2,50); 1111 当四个LED都没检测到黑线时,小车后退 if(RP1==1&&RP2==0&&RP3==0&&RP4==1)

turn(count1,200,count2,200); 1001 当第二、第三个LED检测到黑线时,小车前进

if(RP1==0&&RP2==1&&RP3==1&&RP4==0)

turn(count1,150,count2,150); 0110 当第一、第四个LED检测到黑线时,小车减速前进

*********************小车左转********************* if(RP1==0&&RP2==1&&RP3==1&&RP4==1)

turn(count1,0,count2,150); 0111 当只有第一个LED检测到黑线时,小车左转

if(RP1==1&&RP2==0&&RP3==1&&RP4==1)

turn(count1,80,count2,150); 1011 当第二个LED检测到黑线时,小车偏左转 if(RP1==0&&RP2==0&&RP3==1&&RP4==1)

turn(count1,0,count2,100); 0011 当第一、二个LED检测到黑线时,小车左转

if(RP1==0&&RP2==0&&RP3==0&&RP4==1)

turn(count1,0,count2,200); 0001 当第一、二、三个LED检测到黑线时,小车左大转

*********************小车右转********************* if(RP1==1&&RP2==1&&RP3==0&&RP4==1)

turn(count1,150,count2,80); 1101 当第三个LED检测到黑线时,小车偏右转

if(RP1==1&&RP2==1&&RP3==1&&RP4==0)

turn(count1,180,count2,0); 1110 当第四个LED检测到黑线时,小车右转 if(RP1==1&&RP2==1&&RP3==0&&RP4==0)

turn(count1,100,count2,0); 1100 当第三、四个LED检测到黑线时,小车右转

if(RP1==1&&RP2==0&&RP3==0&&RP4==0)

turn(count1,200,count2,0); 1000当第二、三、四个LED检测到黑线时,小车右大转

****************小车检测到全黑情况的处理**************** if(RP1==0&&RP2==0&&RP3==0&&RP4==0) { if(num==0) {

back1(); 0000 当四个LED第一次检测到黑线时,左轮后退右轮前进,小车左转 forward2();

delay(100); 延时100ms,等待小车转过弯道 }

if(num>0 && num<6) {

turn(count1,200,count2,200); 0000 当四个LED再次检测到黑线的次数小于6次

时 即到达黑线时小车前进速度大于后退速度

} if(num>=6) {

PWM1=0;

PWM2=0; 当四个LED第六次检测到黑线时,小车停止 } num++; } }

*************第四部分 中断服务函数************* void time0()interrupt 1 {

TH0=()256; 定时1ms TL0=()%6; count1++; count2++;

if(count1>=500) 周期是500ms count1=0;

if(count2>=500) 周期是500ms count2=0; }

附录C 硬件实物图

自动循迹小车

TCRT5000 循迹传感器模块 L298N 电机驱动模块

单片机电路