1、目 录一、绪论11、设计的目的12、设计方案要求1二、硬件设计21、系统组成框图22、模块方案论证与比较2(1)控制模块2(2)电机的选择3(3)电机驱动模块3(4)寻迹模块3(5)避障模块43、硬件电路分析4(1)最小系统4(2)电机驱动电路6(3)寻迹电路74、部分元器件介绍7(1)51单片机8(2)L298N10三、软件设计111、软件流程11(1)流程简介11(2)各功能的实现122、寻迹算法设计13四、调试与结果分析14五、结束语14参考文献14附录1:元件清单14附录2:软件程序16基于51单片机的多功能小车的设计(应用电子技术专业2008级)摘要:智能作为现代的新发明,是以后的发
2、展方向,他可以按照预先设定的,模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能小车就是其中的一个体现。本次设计的智能小车,采用AT89C51单片机作为小车控制核心,运用红外探头的检测实现小车寻迹和蔽障功能。传感器作为现代科技的前沿技术,被认为是现代信息技术的三大支柱之一,也是国内外公认的最具有发展前途的高技术产业。在国内有自动化方面的专家指出,传感器技术直接关系到我国自动化产业的发展形势,认为传感器技术强,则自动化产业强。由此可见传感器技术对自动化产业乃至整个国家工业建设的重要性。关键字:51单片机;直流电机;L298驱动;红外探头一、绪论1、设计的目的随着汽车工
3、业的迅速发展,关于汽车的研究也就越来越受人关注。可见其研究意义很大。本设计就是在这样的背景下提出的。本题目是结合科研项目而确定的设计类课题。设计的智能电动小车应该能够实时显示时间、里程,具有自动寻迹功能,可准确定位停车。传感器作为现代科技的前沿技术,被认为是现代信息技术的三大支柱之一,也是国内外公认的最具有发展前途的高技术产业。在国内有自动化方面的专家指出,传感器技术直接关系到我国自动化产业的发展形势,认为传感器技术强,则自动化产业强。由此可见传感器技术对自动化产业乃至整个国家工业建设的重要性。传感器早已渗透到诸如工业生产、宇宙开发、海洋探测、环境保护、资源调查、医学诊断、生物工程、甚至文物保
4、护等等极其之泛的领域。可以毫不夸张地说,从茫茫的太空,到浩瀚的海洋,以至各种复杂的工程系统,几乎每一个现代化项目,都离不开各种各样的传感器。汽车传感器作为汽车电子控制系统的信息源,是汽车电子控制系统的关键部件。随着科学技术的发展,新型敏感材料和传感器不断涌现,传感器种类的增多、性能的提高及精巧的结构都促进了多传感器系统的发展。本次设计就是基于传感器技术使得小汽车智能化。2、设计方案要求根据设计需要确定如下方案:在现有玩具电动车的基础上,增加避障、寻迹,实现对电位置及运行状况的实时检测,并将测得数据传送至单片机进行分析处理,然后由单片机根据所检测到的各种数据发出不同指令实现对电动车的智能控制。这
5、种方案能实现对电动车运动状态的实时监控,控制灵活、可靠,精度高,可满足对系统的各项要求。自主寻迹电动小汽车是一个运用传感器、单片机信号处理、 电机驱动及自动控制等技术来实现环境感知和自动行驶为一体的高新技术综合体。本设计采用 AT89C51 单片机作控制核心, 针对小车在行驶过程中的不同要求, 采用模块化设计方案, 进行了各部分电路的设计。二、硬件设计1、系统组成框图系统组成框图如图1所示。AT89C51控制模块驱动模块寻迹模块蔽障模块 图1 系统组成框图本设计采用了 AT89C51 单片机为寻迹小汽车的核心控制部分, 通过查询方式实现对小汽车的智能控制。小汽车由主控制板、驱动模块、寻迹模块、
6、蔽障模块及车身载体几部分组成。主控制系统由主控 CPU电路、传感器接口电路、直流电机驱动电路等组成。路面检测系统采用反射式红外传感器检测黑线及超声波传感器检测障碍, 直流电机驱动采用双向PWM控制技术实现对车速灵活地控制。2、模块方案论证与比较(1)控制模块方案一:采用ARM芯片作为系统的控制器,它的功能强大,可以实现很多复杂的功能,但本设计对控制器的要求简单,浪费资源而且价格昂贵。方案二:采用8位51单片机作为控制器。51系列单片机具有高性能、体积小、价格低廉、控制能力强等特点,系统功能实现简单,性价比高。本设计就采用了比较先进的89C51为控制核心,功耗很低。该设计亦具有实际意义,可以应用
7、于考古、机器人、医疗器械等许多方面,尤其是在足球机器人研究方面具有很好的发展前景。所以本设计与实际相结合,现实意义很强。从系统功能和性价比方面考虑,我们选择了方案二。(2)电机的选择方案一:采用步进电机。步进电机具有快速启停能力,可实现电机正反转及调速,启动性能好,启动转矩大。工作电压可达到36V,4A;可同时驱动两台直流电机,且不具有误差积累作用。由于步进电机的控制要求严格且很难运转到较高的速度。方案二:采用直流电机。直流电机具有良好的启动特性和调速特性,直流电机转动力矩大,体积小,重量轻,装配简单,使用方便且价格比步进电机要便宜好多。直流电机在调速性能要求方面比较严格。综合本系统对电动机的
8、控制要求,我们选择了方案二。(3)电机驱动模块方案一:采用分立元件构成的H桥驱动电路对电机进行控制。该驱动电路结构简单,价格低廉,在实际中应用广泛。但这种电路工作性能不够稳定且功耗比较容易烧坏单片机。方案二:采用专用芯片L298作为电机驱。L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。综合电机控制的稳定性
9、考虑,我们选择方案二。(4)寻迹模块方案一:采用光敏电阻作为寻迹电路的主要元件。光敏电阻的阻值随周围环境光线的变化而变化,当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,随值会发生明显的变化,将阻值的变化值经过比较器就可以输出高低电平。但是这种方案受光照影响很大,不能稳定的工作。方案二:用红外发射管和接受管自制的对管作为寻迹传感器。红外发射管发出红外线,当发出的红外线照射到白色的平面后反射 ,若红外接受管能接受到反射回的光线则检测出白线继而输出低电平;若接受不到发射管发出的光线则检测出黑线继而输出高电平;虽然自己制作的寻迹传感器基本满足
10、要求,但工作不够稳定且容易受外界光线的影响。方案三:采用TCRT5000型光电对管。TCRT5000传感器的工作原理与一般的红外传感器一样,一传一感,TCR5000具有一个红外发射管和一个红外接受管。当发光二极管发出的光反射回来时,三极管导通输出电平,该光电对管调整电路简单,工作性能稳定。通过工作时的性能稳定性和寻迹准确性考虑我们选择了方案三。(5)避障模块方案一:采用简易光电传感器结合外围电路探测,但实际效果并不理想,对行驶过程中的稳定性要求很高,且误差几率较大,易受光线环境和路面介质影响,在使用过程极易出现问题,而且容易因为该部件构成整个系统的不稳定,故最终未采用该方案。方案二:采用两只红
11、外线,分别置于小车车身前轨道的两侧,根据两只光电开关接受到白线与黑线的情况来控制小车转向来调整方向,测试表明,只要合理安装两只光电开关的位置就可以很好的实现寻迹功能。方案三:采用两只红外管分别置于小车的前端两侧,方向与小车前进方向平行,对小车与障碍物相对距离和方位作出较为准确的判别和及时反应。但此方案过于依赖硬 件、成本较高、缺乏创造性,而且置于小车作坊的红外对管用到的几率很小,所以最 终未采用。采用一只红外对管置于小车右侧。通过测试此种方案就能很好的实现小车避开障物且充分的利用资源而不浪费。智能小车应以准确、智能见优,因此我们应采用方案三。3、硬件电路分析(1)最小系统89C51是片内有RO
12、M/EPROM的单片机,因此,这种芯片构成的最小系统简单可靠。用89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图二89C51单片机最小系统所示。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点:有可供用户使用的大量I/O口线。内部存储器容量有限。应用系统开发具有特殊性。图二 最小系统电路图和PCB电路板()时钟电路89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。89C51单片机的时钟产生方法有两种。内部时钟方式和外部时钟方式。本设计采用内部时钟方式,利用芯片内部的振荡电路,在XTAL1、XTAL2引脚上外接定时元件,内部的振荡电
13、路便产生自激振荡。本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。振荡晶体可在1.2MHZ到12MHZ之间选择。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,CX1、CX2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。所以本设计中,振荡晶体选择6MHZ,电容选择65pF。在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠地工作。为了提高温度稳定性,应采用NPO电容。()复位电路89C51的复位是由外部的复位电路来实现的。复位引脚RST通过一个斯密
14、特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。复位电路通常采用上电自动复位和按钮复位两种方式。最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。时钟频率用6MHZ时C取22uF,R取1K。除了上电复位外,有时还需要按键手动复位。本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经电阻与电源Vcc接通而实现的。按键手动复位电路见图3.2。时钟频率选用6MHZ时,C取22uF,Rs取200,R
15、K取1K。(2)电机驱动电路使用LM298作为本设计的驱动芯片电路如图4所示。图四 电机驱动电路图和PCB电路板本系统采用驱动芯片L298作为电机的驱动,L298N的5、7、10、12四个引脚接到单片机上,通过对单片机的编程就可以实现两个直流电机的PWM调速以及正反转等功能。使用集成电路LM298,由于集成程度高,内包含稳定的数字电路,就算在编写程序的时候错误或者其他原因使控制端口同时输出通过一种电平,不容易烧坏芯片,使整个电路瘫痪。同时芯片还有使能端,容易控制,且稳定。特有的PWN调制功能端,使电机更容易控制。也使得程序在减速的过程特别是保持左右电机速度平衡的程序编写上变得更加简洁容易。从图
16、中可以知道,一块L298N芯片能够驱动两个电机转动,它的使能端可以外接高低电平,也可以利用单片机进行软件控制,极大地满足各种复杂电路需要。另外,L298N的驱动功率较大,能够根据输入电压的大小输出不同的电压和功率,解决了负载能力不够这个问题。(3)寻迹电路本系统采用红外反射式光电传感器作为小车的寻迹电路,电路如图5所示。图五 寻迹电路图和PCB电路板由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”黑线。在该模块中利用了简单、应用也比较普遍的检测方法红外探测法。红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光
17、,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。4、部分元器件介绍(1)51单片机51单片机时对目前所有兼容intel 8031指令系统的单片机的统称。该系列单片机的始祖时intel 8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机即是基础入门的一个单片机,还是应用最广泛的一种。
18、需要注意的是52系列的单片机一般不具备自编程能力。AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C20
19、51是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下
20、拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P
21、3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为
22、闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE
23、禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 振荡器特性: XTAL1和XTAL2分别为反向放大
24、器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。(2)L298NL298N可接受标准TTL逻辑电平信号VSS,VSS可接457 V电压。4脚VS接电源电压,VS电压范围VIH为2546 V。输出电流可达25 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机, 5(IN1),7
25、(IN2),10(IN3),12(IN4)脚接输入控制电平,控制电机的正反转,这四个引脚输入PWM脉冲,假设IN1输入一个PWM脉冲,IN2输入与IN1相反的PWM脉冲电机正转,相反的PWM可以由程序设置或者在IN2的输入前加一个反相器也可实现,建议使用程序设置方便简单,以减少硬件电路避免出现更多问题,若要实现电机的反转,则IN1、IN2输入与正转相反的脉冲即可实现, EN1、EN2接控制使能端,控制电机的停转。当使能端为低电平时,芯片不会工作。L298使能端为高电平使能,使能端EN1、EN2可以接I/O口控制也可直接接电源正一直使能,至于使能端是接固定电平还是接I/O口,是具体情况而定,若I
26、/O口资源够用可接I/O口控制,若I/O口不够用,可直接接高电平,同时,控制电机的PWM脉冲也可以从两个使能端输入,那么四个输入引脚IN1、IN2、IN3、IN4只需设置为相应的高低电平可以控制电机的正反转,假如IN1给固定高电平,IN2给固定低电平电机正传,那么IN1给低IN2给高就可实现反转,IN3、IN4同理。下图是其引脚图:L298是一个具有高电压大电流的驱动芯片,它相应频率高,一片L298可以分别控制两个直流电机,而且还带有控制使能端,用芯片作为电机驱动,操作方便,稳定性好且性能优良。三、软件设计1、软件流程如图6所示。 开始 初始化 寻迹前进是否有障碍NY 结束图六 软件流程(1)
27、流程简介上电运行后,放到没有障碍物的空地上,小车直走。当前方没有障碍物的的时候车就一直直走。如果前方遇到障碍物,则小车做左转运动。直至前方没有障碍物,这时小车恢复直走。如果前方有障碍物的时候,左边同时也有障碍物,则小车右转。直至左边没有障碍物或者前方没有障碍物。这时小车恢复左转,或者直走。如果前面没有障碍物,则先执行直走。如果前方,左方,右方均有障碍物,则小车后退,直至前方,左方,右方任一方向没有障碍,则此时小车开始以前方,左方,右方的优先级开始执行转向。也就是说如果前方没有障碍物,即使其他任意方向都有障碍则小车依然直走,如果前方有障碍,左边没有则右转,前方左方都有障碍,则小车右转。否则小车后
28、退。采用红外探测法实现寻迹功能,即将红外光电传感器固定在底盘前沿,利用其在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。为保证智能车在行驶过程具有良好的操稳性和平顺性,控制系统对直流电机驱动控制提出了较为理想的解决方案。(2)各功能的实现小车没遇见障碍物的时候直走*void zhi()/直走 P23=1; P24=0; P25=1; P26=0;当小车前方或前方和左方同时遇到障碍物的时候,小车右走*void you()/右走 P23=1; P24=0; P25=1; P26=1;当小车
29、前方或前方和右方同时遇到障碍物的时候,小车左走*void zuo()/左走 P23=1; P24=1; P25=1; P26=0;当小车前后左右都有障碍,则小车实现蔽障功能,小车则后退*if(P20=0) ting(); /避障2、寻迹算法设计采用五路寻迹,将五路寻迹传感器分别用数字1、2、3、4、5来表示。初始状态下黑线与第三个传感器对齐;用白色表示未检测到黑线,黑色表示检测到。当黑线从中间逐渐左移或右移时,对应的传感器状态及小车的行驶方式如图7所示。小车直走1 2 3 4 5小车左拐小车左拐小车右拐小车右拐图七 寻迹算法说明图如图7所示寻迹算法我们可以知道,本次设计用的是五路寻迹方法。当单
30、片机P2端口输出为111 11011时,低电平有效,未遇到障碍小车直走;若小车上的传感器检测到小车前面或前面和右面遇到障碍,小车右拐,则P2端口输出为111 10111和111 01111;同理当P2输出为111 11101和111 11110时,小车左拐。四、调试与结果分析在经过多次的整体软硬件结合调试,不断地对系统进行优化,能比较流畅的沿着黑线运动,并且实现小车蔽障功能进行左走右走。本次设计使用的是蓄电池供电,为了方便和节省能源,我们可以用太阳能供电系统充电。如果增加传感器的个数可以实现更为精确的黑线识别,使得小车跑得更快更稳。五、结束语通过此次对智能小车的设计使得我对单片机的应用和对其功
31、能了解更为深切即单片机金额以单独完成现代工业控制所要求的只能控制功能,能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务,这是单片机最大的特征。且通过对智能小车的设计也使得我对AT89C51单片机和C语言熟悉的掌握,加深对AT89C51性能的了解。通过各种方案的讨论和尝试,在经过多次的整体软硬件结合调试,不断地对系统进行优化,能比较流畅的沿着黑线运动,小车在直道上可以加速行驶,在弯道上又可以减速转弯,如果增加传感器的个数可以实现更为精确的黑线识别。使得小车跑得更快更稳。参考文献1范立南:单片微型计算机控制系统设计M,北京,人民邮电出版社,2004;2侯丽华:基于单片机控制的自动往返
32、电动小汽车M,长春,长春电子出版社,2004;3李大友:C语言程序设计M,清华大学出版社,1999.4赵家贵、付小美、董平,新编传感器电路设计手册,中国计量出版社,20025李华等,MCS-51系列单片机实用接口技术,北京航空航天大学出版社,20036王晓明,电动机的单片机控制,北京航空航天大学出版社,2002附录1:元件清单序号名称型号数量备注1小车底盘12二极管In4007103发光二极管74瓷片电容104205瓷片电容30pf26电解电容220uf37电解电容100uf28电解电容22uf19电解电容10uf510电解电容4.7uf111电阻10k112电阻4.7k313电阻80k114
33、电阻20k515电阻330516电阻2k117电阻1k718电阻100k119电阻10120可调电阻10k221可调电阻1k523单片机At89c51124集成稳压电路7805125拨动开关126按键开关627晶振12mhz130红外寻迹传感器531四运算放大器Lm324232驱动芯片L298n136红外避障传感器1附录2:软件程序#include#define uint unsigned int#define uchar unsigned char#include#define uint unsigned int#define uchar unsigned charuchar i=0,j=0
34、,k,temp;sbit P10=P10;/循迹传感器最左有测得信号 低电平有效sbit P11=P11;/循迹传感器次左有测得信号sbit P12=P12;/循迹传感器中有测得信号sbit P13=P13;/循迹传感器次右有测得信号sbit P14=P14;/循迹传感器最右有测得信号sbit P23=P23;/单片机输出到L298N控制电机左后退sbit P24=P24;/单片机输出到L298N控制电机左前进sbit P25=P25;/单片机输出到L298N控制电机右后退sbit P26=P26;/单片机输出到L298N控制电机右前进sbit P20=P20;void init() TMOD
35、=0x01; TH0=(65536-1000)/256;/1ms TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1;void zuo()/左走 P23=1; P24=1; P25=1; P26=0;void you()/右走 P23=1; P24=0; P25=1; P26=1;void zhi()/直走 P23=1; P24=0; P25=1; P26=0;void ting()/停止 P23=1; P24=1; P25=1; P26=1;void main()init(); while(1) if(P20=0) ting(); /避障 ;void time0
36、() interrupt 1 TH0=(65536-1000)/256;/1ms TL0=(65536-1000)%256; temp=(P1|0xe0);/停僻高三位 switch(temp) case 0xf7:i=1;you();break;/111 10111 case 0xef: i=2;you();break;/111 01111 case 0xe7:i=3;you();break;/111 00111 case 0xe3:i=4;you();break;/111 00011 case 0xf3:i=5;you();break;/111 10011 case 0xfe:j=1;zu
37、o();break;/111 11110 case 0xfc:j=2;zuo();break;/111 11100 case 0xf8:j=3;zuo();break;/111 11000 case 0xf9:j=4;zuo();break;/111 11001 case 0xfd:j=5;zuo();break;/111 11101 case 0xfb:k=1;zhi();break;/111 11011 case 0xf1:k=2;zhi();break;/111 10001 case 0xe0:ting();break; case 0xff:if(i=1|i=2|i=3|i=4|i=5)i=0;you(); if(j=1|j=2|j=3|j=4|j=5)j=0;zuo(); if(k=1|k=2)k=0;zhi();break;default : break;