PCB图:
单片机PCB图
30
L298N电机驱动模块PCB图
31
附录B 程序代码
/智能循迹小车的#C程序/
#include
/*********************第一部分*********************/ //以下是电机驱动芯片L298N 管脚位声明
sbit PWM1=P1^0; //电机A/B使能端 sbit PWM2=P1^1;
sbit IN1=P1^2; //电机控制端 sbit IN2=P1^3; sbit IN3=P1^4; sbit IN4=P1^5;
sbit RP1=P2^0; //传感器管脚位声明 sbit RP2=P2^1; sbit RP3=P2^2; sbit RP4=P2^3;
int count1,count2; //用于中断计数 //延时函数,延时z秒 void delay(int z) { int x,y; for(x=z;x>0;x--p for(y=124;y>0;y--); }
/*********************第二部分 电机控制子函数*********************/ void forward1() //电机1前进 { IN1=0; IN2=1; }
void forward2() //电机2前进
32
{ IN3=0; IN4=1; }
void back1() //电机1后退 { IN1=1; IN2=0; }
void back2() //电机2后退 { IN3=1; IN4=0; }
/*********************电机的速度控制 用PWM调速*********************/ void speed(int cnt1,int sd1,int cnt2,int sd2) {
if(cnt1 if(cnt2 /**************电机的前进、左转、右转控制***************/ void turn(int cnt1,int sd1,int cnt2,int sd2) { forward1(); 33 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=(65536-1000)/256; //定时 1ms TL0=(65536-1000)%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) 34