《毕业设计(论文)智能小车的设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)智能小车的设计.doc(31页珍藏版)》请在三一办公上搜索。
1、湖南第一师范学院毕业论文(设计)题目智能小车学生姓名学号 指导教师111系(部)信息科学与工程系专业班级电子信息工程技术1班完成时间2011年4月18日目 录第1章 绪论1第2章 系统概况22.1 智能小车结构图22.2 模块方案比较与论证22.3 最终方案5第3章 硬件实现及单元电路设计63.1 主控制器电路的设计63.2 寻迹模块的设计73.3 避障模块的设计.83.4电机驱动模块的设计.83.5 无线遥控模块的设计.93.6 车载数码管模块的设计123.7 LCD12864模块的设计.12第4章 软件实现134.1 主程序设计134.2 各模块程序流程图13第5章 结束语16参考文献17
2、附 录117附录227智能小车的设计摘 要:该设计是一款具有智能判断功能的小车,功能强大。小车具有以下几个功能:寻迹功能(小车沿着路面的黑色轨道行驶);自动避障功能;无线遥控功能;计算并显示小车的行驶速度;该设计可以作为高级智能玩具,也可作为大型智能交通工具的参照。关键字:AT89S52 ;直流电机;光电传感器;DF无线收发;红外模块第1章 绪论“智能小车”属于机器人技术范畴,它涵盖了机器人技术的相关知识,包括机械系统结构、控制系统硬件配置、传感技术、控制算法的程序编程等。因为简易智能小车的规模较小、制作成本相对够低,但对电动车的研发具有极其重要的意义,使人们能更好地了解机器人的真正含义,更便
3、利地对机器人进行更深入的研究和改进,即可变成探月车,其次,通过这个项目的制作,可以提高自己的实际动手能力和设计经验。“智能小车”运用单片机和光电对管等一系列传感器控制电动小车运动,通过设计传感器检测程序和运动控制程序,使电动小车具有智能化的运动功能,达到模拟汽车按一定的轨迹运动的能力。该设计属于机器人应用范畴,具有较好的应用前景。第2章 系统概况2.1 智能小车结构图 智能小车由主控制器、外部模块和电源模块组成,结构框图如图2.1所示。AT89S52(1)AT89S52(2)光电对管黑线检测转向灯控制光电对管壁障模块L298N驱动直流电机三节1.5v可充电电池三节1.5v可充电电池光电对管测速
4、车载数码管无线发射模块无线接收模块AT89S52(3)液晶显示图2.1: 智能小车的结构框图2.2 模块方案比较与论证为了较好地实现各模块的功能,分别设计了几种方案并进行了论证。2.1控制器模块(1)方案一:采用可编程逻辑器件作为控制器,可以实现各种复杂的功能、规模大、密度高、体积小、稳定性高、资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高。且从使用及经济的角度考虑,最终放弃了此方案。(2)方案二:采用凌阳的16位单片机,它是16位控制器,且有体积小,驱动能力高,集成度
5、高,易扩展,可靠性高,功耗低,结构简单,中断处理能力强等特点。处理速度高,尤其适用于语音处理和识别等领域。但是当凌阳单片机应用语音处理和识别时,由于占用CPU资源较多而使得凌阳单片机同时处理其它任务的速度和能力降低,因此放弃了使用凌阳单片机而考虑其它方案。(3)方案三:采用Atmel公司的AT89S52单片机作为主控制器,AT89S52是一个低功耗、高性能的51内核的CMOS 8位单片机,片内含8K空间的可反复擦写1000次地Flash只读存储器,具有256B的随机存储器(RAM),32个IO口,2个16位可编程定时计数器。且该系列51单片机可以不用烧写器直接用串口或并行口就可以向单片机下载程
6、序。我们在单片机上设置ISP接口,下载程序方便,快捷。从方便使用的角度考虑,最终选择了方案三。2.2.2电机模块(1)方案一:采用步进电机,步进电机的一个显著特点就是具有快速启停能力,如果负荷不超过步进电机所能提供的动态转矩值,就能够立即使步进电机启动或反转。另一个显著特点是转换精度高,正转反转控制灵活。(2)方案二:采用普通直流电机。直流电动机具有优良的调速特性,调速平滑、方便,调整范围广;过载能力强,能承受频繁的冲击负载,可实现频繁的无级快速启动、制动和反转;能满足各种不同的特殊运行要求。由于普通直流电机更易于购买,并且电路相对简单,因此建议采用直流电机作为动力源。2.2.3电机驱动模块(
7、1)方案一:采用专用芯片L298N作为电机驱动芯片,L298N是一个具有高电压大电流的全桥驱动芯片,它相应平率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能段。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。(2)方案二:对于直流电机用分离元件构成驱动电路。由分立元件构成电机驱动电路,结构简单,价格低廉,在实际应用中应用广泛。但在这种电路中性能不够稳定。因此选择了方案一。2.2.4电源模块(1)方案一:采用蓄电池供电,由于本系统需要电池为系统供电。蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。但是蓄电池体积过于庞大,在小型电动车上使用极为不方便。因此放弃了此方案。(2
8、)方案二:采用3节4.2V可充电锂电池串联共12.6V给直流电机供电,经过7805的电压变换后为单片机,传感器和电机供电。经过试验验证,当电池为直流电机供电时,单片机,传感器的工作电压不够,性能不稳定。因此也放弃了此方案。(3)方案三:采用一节八V可充电锂电池经7805的电压变换为单片机和创奇供电。再用12个1.2v的可充电式电池串联为直流电机供电,采用此方法供电后,单片机和传感器工作稳定,直流电机工作不受影响,且电池体积小,能够满足系统的要求。综上考虑,最终决定选用方案三。2.2.5寻迹模块(1)方案一:用光敏电阻组成光敏探测器。光敏电阻的阻值可以随周围环境光线的变化而变化。当光线照射到白线
9、上面时,光线反射强烈,光线照射到黑线上面时,光线反射较弱。因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值经过比较器就可以输出高低电平。(2)方案二:用红外发射管和接收管自己制作光电对管寻迹传感器。红外发射管发出红外线,当发出的红外线照射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管发出的光线则检测出黑线继而输出高电平。这样自己制作组装的寻迹传感器基本能够满足要求,但是工作不够稳定,且容易受外界光线的影响,因此放弃了这个方案。(3)方案三:用ST178型光电对管,ST178是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光二
10、极管,而接收器是一个高灵敏度,硅平面光电三极管。ST178采用DIP4封装,其具有如下特点:塑料透镜可以提高灵敏度;内置可见光过滤器能减小离散光的影响;体积小,结构紧凑;当发光二极管发出的光反射回来时,三极管导通输出低电平;此光电对管调理电路简单,工作性能稳定;因此最后选择了方案三。2.2.6避障模块(1)方案一:用超声波传感器进行避障,超声波传感器的原理是:超声波由压电陶瓷超声波传感器发出后,遇到障碍物便反射回来,再被超声波传感器接收,然后将这信号放大后送入单片机。超声波传感器在避障的设计中被广泛应用。但是超声波传感器需要40Hz的方波信号来工作,因为超声波传感器对工作频率要求较高,偏差在1
11、%以内,所以用模拟电路来做方波发射器比较难以实现。而且单片机来做方波发射器未免有些浪费资源。因此只能考虑其它方案。(2)方案二:采用红外避障方法,利用一管发射另一管接收,接收管对外界红外线的接收强弱来判断障碍物的远近,由于红外线受外界可见光的影响较大,因此用250Hz的信号对38KHz的载波进行调制,这样减少外界的一些干扰。接收管输出TTL电平,有利于单片机对信号的处理。为了使用方便,便于操作和调试,最终选择了方案二。2.2.7无线遥控模块无线数据传输被广泛应用在车辆监控、遥控、要测、小型无线网络、无线数据通信、机器人控制、数字音频、数字图像的传输等领域中(1)方案一:用DF无线数据收发模块。
12、DF无线发射模块通讯方式为调频AM,工作频率为315MHz,为ISM频段,发射频率500mW。DF超再生接收模块通讯方式为调频AM,接收灵敏度高,用示波器观察输出波形干净,抗干扰能力强。系统中为保证稳定,采用芯片PT2262,PT2272M4进行数据编解码,由于数据传输量较小,经过测试,方案可行。(2)方案二:其它无线数据收发模块,如nRF401、红外线或蓝牙模块,由于其价格昂贵,不利于调试,而且系统中不需传输大量的数据,因此放弃了此方案。DF无线收发模块由于其优良的特性和低廉的价格而被广泛应用于工业及日常商品中,因此选择了此方案。2.2.8显示台显示模块(1)方案一:用数码管进行显示。数码管
13、由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用,但是计划在显示台显示时间,小车的速度路程等,用数码管无法满足设计要求,因此只能放弃此方案。(2)方案二:用LCD液晶进行显示。LCD由于其显示清晰,显示内容丰富、清晰,显示信息量大,使用方便,显示快速而得到了广泛的应用,因此选择了此方案。2.3 最终方案经过反复论证,最终确定了如下方案:采用AT89S52单片机作为控制器。用三节1.5V可充电电池为直流电机供电,用另外三节可充电电池作为车载单片机显示等的电源,用一块6V蓄电池给液晶显示台供电。用ST178型光电对管进行黑线检测L298N作为直流电机的驱动芯片DF无线收发模块用来远程传输
14、数据。12864的LCD在远程控制台显示小车当前状态。 第3章 硬件实现及单元电路设计3.1 主控制器电路的设计3.1.1 AT89S52单片机简介AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单片机上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52 在众多嵌入式控制应用系统中得到广泛应用。3.1.2 AT89S52单片机的主要性能1、与MCS-51单片机产品兼容;2、8K字节在
15、系统可编程Flash存储器;3、1000次擦写周期;4、全静态操作:0Hz-33MHz;5、三级加密程序存储器;6、32个可编程I/O口线;7、三个16位定时/计数器;8、八个中断源;9、全双工UART串行通道;10、低功耗空闲和掉电模式;11、掉电后中断可唤醒;12看门狗定时器;13、双数据指针;14、掉电标识符。3.1.3 主控制器最小系统图图3.1:主控制器最小系统图主控制器电路由主控制器AT89S52、复位电路、晶振电路、电源指示电路组成3.2寻迹模块的设计3.2.1 黑线检测电路图图3.2:黑线检测电路图3.2.2 电路图原理本电路的核心器件是红外对管ST178,利用红外线在不同颜色
16、的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;接收管处于饱和导通状态,此时LM358的同相端由高电平变为低电平,LM358在这里作为比较器使用,则此时输出端由高电平变为低电平,将信号送给主控制器,再发出信号达到控制小车转向的目的。3.3避障模块的设计3.3.1 避障模块电路图图3.3:避障模块电路图3.2.2 SM0038红外接收管介绍SM0038对外只有3个引脚:VS、GND和1个脉冲信号输出引脚OUT,外形引脚如图二所示。与单片机接口非常方便,如图三所示。VCC接电源+5V并经电容进行滤波,以
17、避免电源干扰; GND接系统的地线(0V);脉冲信号输出接CPU的中断输入引脚(例如8051的13脚INT1)。采取这种连接方法,软件解码既可工作于查询方式,也可工作于中断方式。3.3.3 避障部分原理利用SM0038只能接收38KHz的红外光的原理,当红外发射管D2发射红外光遇到前方障碍物,将反射回来的光送给SM0038,其中也含有38KHz频率的红外光,接收管接收到信号1号脚将输出高电平,使Q4导通,P36将又原来的高电平变为低电平,将信号送给单片机然后控制小车避开障碍物。3.4电机驱动的硬件电路图3.4:电机驱动电路图3.4.1 L298N介绍及电路工作原理L298N是专门用来驱动电机电
18、机的芯片,内部集成了一个H桥电路和保护电路,连接时第1、29、30脚必须通过10K电阻接地。第8脚必须接地。11、12或27、18任意接一组电源就可以。驱动步进电机的L298的相线必须接正确,否则电机肯定不转其它没说明的引脚不用管。在连接、测试时千万不要用手去接触MMC芯片的任何引脚,否则输出不了信号。一旦过流保护被启动,芯片必须重新上电后才可恢复正常工作,如果用手去碰MMC的第1、29、30脚则过流保护立即启动。3.5无线遥控模块的设计3.5.1 无线模块电路图图3.5:无线发射模块电路图图3.6:无线接收模块电路图3.5.2 DF无线模块介绍DF数据发射模块的工作频率为315M,采用声表谐
19、振器SAW稳频,频率稳定度极高,当环境温度在2585度之间变化时,频飘仅为3ppm/度。特别适合多发一收无线遥控及数据传输系统。声表谐振器的频率稳定度仅次于晶体,而一般的LC振荡器频率稳定度及一致性较差,即使采用高品质微调电容,温差变化及振动也很难保证已调好的频点不会发生偏移DF数据模块采用ASK方式调制,以降低功耗,当数据信号停止时发射电流降为零,数据信号与DF发射模块输入端可以用电阻或者直接连接而不能用电容耦合,否则DF发射模块将不能正常工作。数据电平应接近DF数据模块的实际工作电压,以获得较高的调制效果。3.5.3 PT2262/2272遥控编解码芯片介绍PT2262/2272是一种CM
20、OS工艺制造的低功耗低价位通用编解码电路,PT2262/2272最多可有12位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441地址码,PT2262最多可有6位(D0-D5)数据端管脚,设定的地址码和数据码从17脚串行输出,可用于无线遥控发射电路。编码芯片PT2262发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片PT2272接收到信号后,其地址码经过两次比较核对后,VT脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。当发射机没有按键按下时,PT2262不接通电源,其17脚为低电平,所以31
21、5MHz的高频发射电路不工作,当有按键按下时,PT2262得电工作,其第17脚输出经调制的串行数据信号,当17脚为高电平期间315MHz的高频发射电路起振并发射等幅高频信号,当17脚为低平期间315MHz的高频发射电路停止振荡,所以高频发射电路完全收控于PT2262的17脚输出的数字信号,从而对高频电路完成幅度键控(ASK调制)相当于调制度为100的调幅。PT2262特点:CMOS工艺制造,低功耗 外部元器件少 RC振荡电阻 工作电压范围宽:2.6-15v 数据最多可达6位 地址码最多可达531441种 引脚图见下图 图3.7:PT2272引脚图 图3.8:PT2262引脚图3.6车载数码管驱
22、动电路图3.9:数码管驱动电路图3.7 LCD12864的接口电路3.7.1 LCD12864接口电路图图3.10:LCD12864液晶接口电路图3.7.2 LCD12864介绍LCD12864是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点,它的基本特点有: 低电源电压(VD
23、D:+3.0-+5.5V);显示分辨率:12864点;内置汉字字库,提供8192个1616点阵汉字(简繁体可选);内置 128个168点阵字符;2MHZ时钟频率;显示方式:STN、半透、正显;驱动方式:1/32DUTY,1/5BIAS;视角方向:6点;背光方式:侧部高亮白色LED,功耗仅为普通LED的1/51/10;通讯方式:串行、并口可选;内置DC-DC转换电路,无需外加负压;无需片选信号,简化软件设计;工作温度: 0 - +55 ,存储温度: -20 - +60 第4章 软件设计4.1主程序设计主程序框图如下图所示。 单片机复位后,开始初始化工作,然后进入显示功能模块,最后完成各模块工作。
24、主函数程序见附表。开 始初始化调用显示子程序调用处理子程序进入模式选择图4.1:主程序流程图4.2 各模块程序流程图各模块程序流程图如下,程序见附表。程序初始化 小车启动 传感器是否检测到黑线是否检测到障碍物沿黑线行驶向右转向左转检测到在左向右转走完黑线停车 前进10秒停车前进显示总里程结束图4.2:寻迹模块程序流程图图4.3:速度及路程测量模块程序流程图 图4.4:避障模块程序流程图第5章 结束语在完成这个设计的过程中,重新巩固了我的模电数电基础知识,并且将理论与实际结合,不断的去发现和解决问题,同时增强了实践能力。更重要的是从产品的角度出发,慢慢的建立起个人的项目开发意识和经验。在写毕业论
25、文时我深深体会到搞设计的艰辛与困难。由于我的理论知识还很欠缺,在论文里也有不少的错误。在以后的工作中我会更加的努力学习来弥补我现在的不足之处。 大学生活即将尾声, 三年的大学校园生活就要结束了,内心是感慨颇多, 即将离开生活所依三年的母校和我亲爱的老师和同学们,非常的舍不得。可是我同时也知道这是必须经历的一个过程, 在这三年里我学会了专业和做人方面的知识,我认为那些都是我终生受用的,希望能把现在所学的东西运用到社会实践中去,为社会的发展尽一份薄力。参考文献1 于国亮. 单片机原理与应用M.北京:清华大学出版社,20082 何社成. 使用控制、保护电路图集M.北京:中国电力出版社,20063 廖
26、先芸. 电子技术实践与训练 M.北京: 高等教育出版社,20024 李全利. 单片机原理及应用技术M.北京: 高等教育出版社,2003 5 徐科军. 传感器与检测技术M.第2版. 北京: 电子工业出版社,20016童诗白. 模拟电子技术基础J.高等教育出版社,1997,21(6):156-158附 录11、LCD12864液晶显示的程序:#define lcd_date P2sbit lcde=P07;sbit lcdrs=P05;sbit lcdrw=P06; void delay(unsigned int time) unsigned int n; n=0; while(ntime) n+
27、;/读状态void ReadSta() do lcd_date=0xff; lcdrs=0;lcdrw= 1;lcde= 1; while(lcd_date&0x80=0); /检测忙信号 lcde=0;/写数据void write_onedate(unsigned char date) ReadSta(); lcdrs=1; lcdrw=0; lcd_date=date; lcde=1; delay(500); lcde=0;/写指令void write_onecom(unsigned char com) ReadSta(); lcdrw=0; lcdrs=0; lcd_date=com;
28、lcde=1; delay(500); lcde=0;2、寻迹模块程序 #includesbit hh1=P00; /红外1sbit hh2=P07; /红外2sbit led1=P03; /拐弯灯1sbit led2=P23; /拐弯灯2sbit M11=P21; /电机1接口1sbit M12=P22; /电机1接口2sbit M21=P02; /电机2接口1sbit M22=P01; /电机2接口2sbit PWM1=P25;sbit PWM2=P26; void main() /主函数 hh1=hh2=led1=led2=PWM1=PWM2=1; while(1) if(hh2=0)&
29、(hh1=1) led1=1; led2=0; M21=M12=M11=0; M22=1;else if(hh1=0)&(hh2=1) led1=0; led2=1; M11=M22=M21=0; M12=1;else if(hh1=0)&(hh2=0) led1=0; led2=0; M11=M21=0; M12=M22=0;else if(hh1=1)&(hh2=1) led1=1; led2=1; M11=M21=0; M12=M22=1; 3、遥控和测速模块程序#include/*/变量的定义/*unsigned int k=4000, /定时变量 定时:250us*ktime10=0
30、xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,/时间显示字符distance_point10=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x00; /路程显示字符unsigned int count_time=0,caculate_distance=0;/时间与距离的变量 /遥控中断变量unsigned char datapacket,count=0;sbit remotein=P32;unsigned char decode_counter=0x00;bit flag_follow=0; /遥
31、控标志bit flag_display=0;/时间路程切换标志char n_1=0,n_2=0,n_3=0,n_4=0;/用于显示字符的选择sbit P1_4=P14; /enable 1sbit P1_5=P15; /=1,forwardsbit P1_6=P16; /enable 2sbit P1_7=P17; /=1,forward/寻迹使能引脚 遇黑色为1sbit P2_0=P20;sbit P2_1=P21;sbit P2_2=P22;sbit P2_3=P23;sbit spk=P24; /spk 为蜂鸣器使能/数码管使能sbit P1_0=P10;sbit P1_1=P11;sb
32、it P1_2=P12;sbit P1_3=P13;void run_key();void delay_small(unsigned int n)while(n)n-;void ahead(unsigned int n) /(min)n=300 P1_4=0;P1_6=0;P1_5=1;P1_7=1;P1_4=1;P1_6=1;delay_small(n);/*void back(int n)P1_4=0;P1_6=0;P1_5=0;P1_7=0;P1_4=1;P1_6=1;delay_small(n);*/void left(unsigned int n) /(90)n=54200P1_4=
33、0;P1_6=0;P1_5=0;P1_7=1;P1_4=0;P1_6=1;delay_small(n);void right(unsigned int n)P1_4=0;P1_6=0;P1_5=1;P1_7=0;P1_4=1;P1_6=0;delay_small(n);void stop(unsigned int n) /n=50000 stop immidiatly;P1_4=0;P1_6=0;delay_small(n);void initial_T1(void)IE=0x8d;IT1=1;IT0=1;TMOD=0x21;TH1=5;TL1=5;TR1=1;void inte_infrar
34、ed(void) interrupt 0unsigned int i;unsigned int datapackettemp=0;unsigned int datapacketend=0;unsigned int datapacketstart=0;decode_counter+;EX0=0;datapacketend=0;if(decode_counter=1)TR0=1;while(remotein=1&(TH053);/低电平datapacketstart=TH0;datapacketstart=datapacketstart8;datapacketstart=datapacketsta
35、rt|TL0;while(remotein=0&(TH035);/记录起始时间while(remotein=1&(TH053);/脉冲结速datapackettemp=TH0;datapackettemp=datapackettemp8;datapackettemp=datapackettemp|TL0;datapacketend=datapackettemp-datapacketstart;TR0=0;TH0=0;TL0=0;/记下13.5ms的引导码if(datapacketend0x2EE0)/确认是红外信号TR0=1;TH0=0;TL0=0;/确认时间datapacket=i=0;/初
36、始化for(i=0;i=31;i+)TR0=1;TH0=0;TL0=0;datapackettemp=TH0;datapackettemp=datapackettemp8;datapackettemp=datapackettemp|TL0;/已经为低电平,应该马上记下时间while(remotein=0&(TH03);while(remotein=1&(TH09);datapackettemp=TH0;datapackettemp=datapackettemp23)if(datapacketend0x0630)&(datapacketend0x08cb)/为1datapacket=(datap
37、acket0x0231)&(datapacketend0x0465)/为零 datapacket=datapacket1;else datapacketend=0;/无效操作TR0=0;TH0=0;TL0=0;EX0=0;/end forrun_key();TCON=TCON&0xfd;EX0=1;TR0=0;TH0=0;TL0=0;decode_counter=0;/*/键扫描盘/*/void run_key()switch(datapacket)case 0xfe: ahead(0);break;case 0xde:right(0);break;case 0xee:left(0);brea
38、k;case 0xce:stop(0);break;case 0x7e:flag_follow=1;/循迹开break;case 0x5e:flag_follow=0;/循迹关default:break;datapacket=0x00;void time_1s() interrupt 3k-;if(!k)count_time+;k=4000;count+;if(count=5)flag_display=1;if(count=10)flag_display=0;count=0;void distance() interrupt 2caculate_distance=caculate_distan
39、ce+1;void display_t()n_1=count_time%60%10;n_2=count_time%60/10;n_3=count_time/60%10;n_4=count_time/60/10;P1_3=0;P0=timen_1;if(flag_follow&P2_1)left(15);ahead(0);delay_small(20);P1_3=1;P0=0xff;P1_2=0;P0=timen_2;if(flag_follow&P2_2)right(15);ahead(0);delay_small(20);P1_2=1;P0=0xff;P1_1=0;P0=distance_p
40、ointn_3;if(flag_follow&P2_1)left(15);ahead(0);delay_small(20);P1_1=1;P0=0xff;P1_0=0;P0=timen_4;if(flag_follow&P2_2)right(15);ahead(0);delay_small(20);P1_0=1;P0=0xff;void display_d()n_1=caculate_distance%10;n_2=caculate_distance/10%10;n_3=caculate_distance/100%10;n_4=caculate_distance/1000%10;P1_3=0;P0=timen_1;if(flag_follow&P2_1)left(15);ahead(0);delay_small(20);P1_3=1;P0=0xff;P1_2=0;P0=distance_pointn_2;if(flag_follow&P2_2)right(15);ahead(0);delay_smal