电子系统设计
图16 L298N引脚图
4程序设计
#include
#define uchar unsigned char #define uint unsigned int uchar x3,x4; sbit ena=P3^6; sbit enb=P3^7; sbit P22=P2^3; sbit P23=P2^4; sbit P24=P2^5; sbit P25=P2^6; sbit P10=P1^0; sbit P11=P1^1; sbit P12=P1^2; uchar a=38; uchar b=75;
///占空比控制字
16
电子系统设计
uchar zc=0; control();
void ds(uchar x1,uchar x2) { TMOD=0X01; TH0=x1; TL0=x2; x3=x1; x4=x2; EA=1;ET0=1; TR0=1; }
void xunji() { if(P10==0&&P11==0&&P12==0)//全亮 { P22=1; //全停 P23=1; P24=1; P25=1; } if((P10==1&&P11==1&&P12==1)||(P10==1&&P11==0&&P12==1))//全灭或中间灯亮 { control(); ds(0xf6,0x87); //全速前进 } if(P10==0&&P11==1&&P12==1) //左边亮 { control(); ds(0xf8,0x0f); //减速右拐 } if(P10==0&&P11==0&&P12==1) //左边亮 { control(); ds(0xfe,0xe3); //减速右拐 } if(P10==1&&P11==1&&P12==0) //右边亮 { control(); ds(0xf8,0x0f); //减速左拐 } if(P10==1&&P11==0&&P12==0) //左边亮 { control(); ds(0xfe,0xe3); //减速右拐
17
电子系统设计
} }
void main()
{ TMOD=0X10; ///定时器1为定时模式,使用方式1;定时器0为计数模式,使用方式1 TH1=0XFF; ///装定时器初值 TL1=0X9C; EA=1; ///开总中断 ET1=1; TR1=1; while(1) { xunji(); P22=1; P23=1; P24=1; P25=1; } }
void time0()interrupt 1 { TH0=x3; TL0=x4; if((P10==1&&P11==1&&P12==1)||(P10==1&&P11==0&&P12==1))//全灭或中间灯亮 { P23=0; //全速前进 P25=0; } if((P10==0&&P11==1&&P12==1)||(P10==0&&P11==0&&P12==1)) //左边亮 { P23=1; //右边走 P25=0; } if((P10==1&&P11==1&&P12==0)||(P10==1&&P11==0&&P12==0)) //右边亮 { P23=0; //左边走 P25=1; } }
timer_1() interrupt 3 using 1 ///定时器1中断,使用寄存器组1
18
电子系统设计
{ TR1=0; TH1=0XFF; TL1=0X9C; zc++; zc=(zc+1)0; control(); TR1=1; }
control() { if(zc<=a) ena=1; else
ena=0; if(zc<=b) enb=1; else
enb=0; }
///重装定时初值
///中断次数加1
5 心得体会
整个系统的设计以单片机为核心,利用了光电传感器,将软件和硬件相结合.本系统能实现如下功能:
自动沿预设轨道行驶小车在行驶过程中,能够自动检测预先设好的轨道,实现直道和弧形轨道的前进.若有偏离,能够自动纠正,返回到预设轨道上来.
在这次课设中我和一个队友一起负责软件部分,因为软件对我们来说是比较难得一部分,但通过我们的努力还是解决的,刚开始我们是一起画电路图,做PCB版,帮助队友搭好硬件部分,因为硬件是最基本,没做好,其他工作就无法进行,很庆幸,这部分我们顺利完成,主要还是负责硬件的同学,比较细心,做的很好.在编软件的时候,遇到最大的问题是,小车的两个电机的速度不一样,刚开始怎么弄都不能直走,最后在老师的提醒下,通过PWN调速,让车的速度差不多一样.
通过本次设计我掌握了很多以前不熟练的东西,认识了很多以前不熟悉得东西,使我在人生上又进了一步.也认识到很多的不足.
19