智能小车系统设计

合集下载

智能小车避障系统的设计与实现

智能小车避障系统的设计与实现

智能小车避障系统的设计与实现智能小车避障系统是一种基于人工智能技术的智能设备,能够实现自主避免障碍物并沿着预设路径行驶的功能。

本文将介绍智能小车避障系统的设计原理和实现过程。

一、引言随着人工智能技术的发展,智能小车逐渐成为智能家居和智能工业设备中的重要组成部分。

智能小车避障系统是其中一个重要的功能之一,它能够通过传感器对周围环境进行感知,并根据感知结果做出相应的避障决策。

本文将详细介绍智能小车避障系统的实现过程。

二、设计原理智能小车避障系统的设计原理主要包括传感器模块、决策模块和执行模块。

1. 传感器模块传感器模块是智能小车避障系统中最重要的组成部分之一,它能够实时感知周围环境的障碍物位置和距离。

常用的传感器包括红外线传感器、超声波传感器和摄像头等。

通过这些传感器模块,智能小车能够获取周围环境的相关信息。

2. 决策模块决策模块是智能小车避障系统中的核心部分,它根据传感器模块获取到的环境信息进行处理和分析,并做出相应的决策。

常见的决策算法包括模糊逻辑算法、神经网络算法和遗传算法等。

通过这些算法,智能小车可以根据环境信息做出合理的避障决策。

3. 执行模块执行模块是智能小车避障系统中的最终执行部分,它负责根据决策模块的输出结果进行相应的控制。

通常,执行模块包括电机模块、舵机模块和通信模块等。

通过这些模块,智能小车能够根据避障决策结果自主行驶并避免障碍物。

三、实现过程智能小车避障系统的实现过程主要包括硬件搭建和软件编程两个步骤。

1. 硬件搭建硬件搭建是智能小车避障系统实现的第一步,它主要包括选择合适的传感器和执行模块,并进行连接和组装。

首先,选择适合的传感器模块,如红外传感器和超声波传感器,并将其连接到相应的接口。

然后,选择合适的执行模块,如电机模块和舵机模块,并进行连接和组装。

最后,将所有的模块连接到主控板,并确保其正常工作。

2. 软件编程软件编程是智能小车避障系统实现的关键步骤,它主要包括传感器数据处理、避障决策算法和执行控制程序的编写。

《2024年智能小车避障系统的设计与实现》范文

《2024年智能小车避障系统的设计与实现》范文

《智能小车避障系统的设计与实现》篇一一、引言随着科技的发展,智能小车已成为现代社会的重要组成部分。

在许多领域,如工业生产、救援和科研中,智能小车都能发挥出极大的作用。

智能小车的一个核心功能是其避障系统,它可以保障小车在运行过程中的安全性,同时也决定着小车的灵活性和适用性。

本文将介绍一个智能小车避障系统的设计与实现过程。

二、系统设计1. 硬件设计智能小车的硬件部分主要包括小车底盘、电机驱动、传感器等。

其中,传感器部分是避障系统的关键。

我们选择了超声波传感器作为主要的避障传感器,其优点是测量距离准确,且价格适中。

此外,我们还设置了红外线传感器作为辅助,以增加系统的适应性和稳定性。

2. 软件设计软件部分主要涉及传感器的数据处理、小车的运动控制等。

我们采用了模块化的设计思路,将系统分为传感器数据获取模块、数据处理模块、运动控制模块等几个部分。

其中,传感器数据获取模块负责获取传感器的数据,数据处理模块负责处理这些数据并做出判断,运动控制模块则负责根据判断结果控制小车的运动。

三、避障算法的实现避障算法是避障系统的核心。

我们采用了基于超声波传感器和红外线传感器的融合算法。

具体来说,首先通过超声波传感器获取小车与障碍物的距离信息,然后通过红外线传感器获取前方的物体信息。

接着,数据处理模块将两个传感器的数据融合处理,判断出是否存在障碍物以及障碍物的位置。

最后,运动控制模块根据判断结果控制小车的转向和速度。

在算法实现中,我们采用了模糊控制理论。

模糊控制可以处理不确定性的问题,使得我们的避障系统可以应对各种复杂的场景。

同时,我们还采用了PID控制算法来控制小车的速度和转向,以保证小车的稳定性和精度。

四、系统实现与测试我们首先在仿真环境中对避障系统进行了测试。

通过调整算法参数,我们使得小车在仿真环境中能够准确地识别出障碍物并做出相应的反应。

然后,我们在实际环境中对系统进行了测试。

在多种场景下,如光线变化、障碍物形状变化等,我们的智能小车都能稳定地运行,并成功避开障碍物。

《2024年自循迹智能小车控制系统的设计与实现》范文

《2024年自循迹智能小车控制系统的设计与实现》范文

《自循迹智能小车控制系统的设计与实现》篇一一、引言随着人工智能与自动控制技术的快速发展,智能小车已经广泛应用于各种领域,如物流配送、环境监测、智能家居等。

本文将详细介绍一种自循迹智能小车控制系统的设计与实现过程,该系统能够根据预设路径实现自主循迹、避障及精确控制。

二、系统设计(一)系统概述自循迹智能小车控制系统主要由控制系统硬件、传感器模块、电机驱动模块等组成。

其中,控制系统硬件采用高性能单片机或微处理器作为主控芯片,实现对小车的控制。

传感器模块包括超声波测距传感器、红外线测距传感器等,用于感知周围环境并实时传输数据给主控芯片。

电机驱动模块负责驱动小车行驶。

(二)硬件设计1. 主控芯片:采用高性能单片机或微处理器,具备高精度计算能力、实时响应和良好的可扩展性。

2. 传感器模块:包括超声波测距传感器和红外线测距传感器。

超声波测距传感器用于测量小车与障碍物之间的距离,红外线测距传感器用于检测小车行驶路径上的标志线。

3. 电机驱动模块:采用直流电机和电机驱动器,实现对小车的精确控制。

4. 电源模块:为整个系统提供稳定的电源供应。

(三)软件设计1. 控制系统软件采用模块化设计,包括主控程序、传感器数据处理程序、电机控制程序等。

2. 主控程序负责整个系统的协调与控制,根据传感器数据实时调整小车的行驶状态。

3. 传感器数据处理程序负责对传感器数据进行处理和分析,包括距离测量、方向判断等。

4. 电机控制程序根据主控程序的指令,控制电机的运转,实现小车的精确控制。

(四)系统实现根据设计需求,通过电路设计与焊接、传感器模块的安装与调试、电机驱动模块的安装与调试等步骤,完成自循迹智能小车控制系统的硬件实现。

在软件方面,编写各模块的程序代码,并进行调试与优化,确保系统能够正常运行并实现预期功能。

三、系统功能实现及测试(一)自循迹功能实现自循迹功能通过红外线测距传感器实现。

当小车行驶时,红外线测距传感器不断检测地面上的标志线,并根据检测结果调整小车的行驶方向,使小车始终沿着预设路径行驶。

智能小车设计方案

智能小车设计方案

智能小车设计方案第1篇智能小车设计方案一、项目背景随着科技的不断发展,智能小车在物流、家用、工业等领域发挥着越来越重要的作用。

为了满足市场需求,提高智能小车在各领域的应用效果,本项目旨在设计一款具有较高性能、安全可靠、易于操控的智能小车。

二、设计目标1. 实现智能小车的基本功能,包括行驶、转向、制动等;2. 提高智能小车的行驶稳定性和操控性能;3. 确保智能小车的安全性和可靠性;4. 增加智能小车的人性化设计,提高用户体验;5. 符合相关法律法规要求,确保方案的合法合规性。

三、设计方案1. 系统架构智能小车采用模块化设计,主要分为以下几个部分:(1)硬件系统:包括控制器、传感器、驱动器、电源模块等;(2)软件系统:包括控制系统软件、导航算法、用户界面等;(3)通信系统:包括无线通信模块、车载网络通信等;(4)辅助系统:包括车载充电器、车载显示屏等。

2. 硬件设计(1)控制器:选用高性能、低功耗的微控制器,负责整个智能小车的控制和管理;(2)传感器:包括速度传感器、转向传感器、碰撞传感器等,用于收集车辆运行状态信息;(3)驱动器:采用电机驱动,实现智能小车的行驶和转向;(4)电源模块:为整个系统提供稳定的电源供应。

3. 软件设计(1)控制系统软件:负责对硬件系统进行控制和管理,实现智能小车的各项功能;(2)导航算法:根据传感器收集的信息,结合地图数据,实现智能小车的自动导航;(3)用户界面:提供人性化的操作界面,方便用户对智能小车进行操控。

4. 通信设计(1)无线通信模块:实现智能小车与外部设备的数据传输,如手机、电脑等;(2)车载网络通信:实现车内各个模块之间的数据交换和共享。

5. 辅助系统设计(1)车载充电器:为智能小车提供便捷的充电方式;(2)车载显示屏:显示智能小车的运行状态、导航信息等。

四、合法合规性分析1. 硬件设计符合国家相关安全标准,确保智能小车的安全性;2. 软件设计遵循国家相关法律法规,保护用户隐私;3. 通信设计符合国家无线电管理规定,避免对其他设备产生干扰;4. 辅助系统设计符合国家环保要求,减少能源消耗。

循迹避障智能小车设计

循迹避障智能小车设计

循迹避障智能小车设计一、硬件设计1、车体结构智能小车的车体结构通常采用四轮驱动或两轮驱动的方式。

四轮驱动能够提供更好的稳定性和动力,但结构相对复杂;两轮驱动则较为简单,但在稳定性方面可能稍逊一筹。

在选择车体结构时,需要根据实际应用场景和需求进行权衡。

为了保证小车的灵活性和适应性,车架材料一般选择轻质且坚固的铝合金或塑料。

同时,合理设计车轮的布局和尺寸,以确保小车能够在不同的地形上顺利行驶。

2、传感器模块(1)循迹传感器循迹传感器是实现小车循迹功能的关键部件。

常见的循迹传感器有光电传感器和红外传感器。

光电传感器通过检测反射光的强度来判断黑线的位置;红外传感器则利用红外线的反射特性来实现循迹。

在实际应用中,可以根据小车的运行速度和精度要求选择合适的传感器。

为了提高循迹的准确性,通常会在小车的底部安装多个传感器,形成传感器阵列。

通过对传感器信号的综合处理,可以更加精确地判断小车的位置和行驶方向。

(2)避障传感器避障传感器主要用于检测小车前方的障碍物。

常用的避障传感器有超声波传感器、激光传感器和红外测距传感器。

超声波传感器通过发射和接收超声波来测量距离;激光传感器则利用激光的反射来计算距离;红外测距传感器则是根据红外线的传播时间来确定距离。

在选择避障传感器时,需要考虑其测量范围、精度、响应速度等因素。

一般来说,超声波传感器测量范围较大,但精度相对较低;激光传感器精度高,但成本较高;红外测距传感器则介于两者之间。

3、控制模块控制模块是智能小车的核心部分,负责处理传感器数据、控制电机驱动和实现各种逻辑功能。

常见的控制模块有单片机(如 Arduino、STM32 等)和微控制器(如 PIC、AVR 等)。

单片机具有开发简单、资源丰富等优点,适合初学者使用;微控制器则在性能和稳定性方面表现更优,适用于对系统要求较高的场合。

在实际设计中,可以根据需求和个人技术水平选择合适的控制模块。

4、电机驱动模块电机驱动模块用于控制小车的电机运转,实现前进、后退、转弯等动作。

智能小车控制系统设计实现

智能小车控制系统设计实现

智能小车控制系统设计实现提纲:1. 设计智能小车控制系统的必要性与意义2. 智能小车控制系统设计的原则和方法3. 智能小车控制系统实现的技术和难点4. 智能小车控制系统在未来的发展趋势5. 智能小车控制系统在实际应用中的案例分析和评价1. 设计智能小车控制系统的必要性与意义智能小车控制系统的设计是基于对于小车的运动控制,使其能够有效地行驶,在各种环境和道路状况下,能够保证稳定性和安全性。

同时,智能小车还需要自主感知灰尘、空气质量等数据,能够对各种交通或人员行为进行判断或预测,从而为行驶安全保驾护航,加强人类对环境的认知。

2. 智能小车控制系统设计的原则和方法打造高品质的智能小车控制系统,一定要遵循以下设计原则:(1)全面的模块化设计:该系统设计需要专业的人才,将系统模块化。

只有合理地划分模块,才能保证安全可靠的系统。

(2)充分的数据支持:智能小车控制系统的打造需要精准的行走数据支持。

在系统设计的过程中需要引入传感器、激光雷达、GPS系统等仪器,收集数据并反馈给控制器,以实现更好的检测和行车控制。

(3)稳定性和可靠性:设计过程中需要在系统中引入错误处理模块,保证系统在出现错误的情况下可以正确处理,从而保证系统的稳定性和可靠性。

(4)简洁和高效:在系统设计中需要保证系统的结构简单,在乱糟糟的交通情况下更容易实现长时间稳定运行。

(5)逐步优化和改进:设计过程中需要不断地优化和改进,跟上前沿的科技发展,提高系统的性能和校准数据。

3. 智能小车控制系统实现的技术和难点智能小车控制系统是一个由传感器、激光雷达、网络通信系统、操作系统、控制算法、安全设计等多个组成部分构成的庞大系统,实现上的难点主要在以下几个方面:(1)多种传感器测试数据的整合和处理,从而精准反馈给控制器让智能小车做出合理的运行决策。

(2)软件计算量的大增量,需要在有限的时间内获得足够的CPU和其他计算性能支持。

(3)为了提高系统的灵活性和可扩展性,整体上采用了优化算法和多策略集合的形式,以保证智能小车可以适合各种复杂的驾驶环境。

智能小车控制系统设计实现

智能小车控制系统设计实现

关键词:智能小车;控制系统;设计和实现1智能小车控制系统概述智能小车控制系统是一个综合、复杂的系统,其既有多种技术,也含有嵌入式的软件设备和硬件设备、图像识别、自动控制和电力传动、机械结构等技术知识,智能小车的控制系统主要是围绕嵌入式控制系统进行的,将其作为操控的中心,并借助计算机系统,最终完成自动造作和控制的过程[1]。

智能小车的控制系统流程图见图1所示。

2智能小车的设计和实现2.1智能小车的硬件设计硬件设计是保证智能小车平稳运行的必要条件,它关系着控制系统的精度和稳定性,因此在设计时需要用在模块化设计思想,该研究是通过采取硬件系统K60芯片作为核心控制器,并通过图像采集模块和电机、舵机驱动模块、测速模块、电源模块等组成硬件设计系统图,见图2。

首先,电源电路设计,该设计时智能小车的动力来源,为小车运行提供不断的电力,一般采取7.3V、容量为2000mAh的可充电型的镍铬电池作为电源,但是其不能直接为控制器传输电力,需要在转变电路后才可以进行传输。

转变电路可以保证控制器直接对电池内的电压进行调节,保证不同模块可以正常工作和运行,智能小车主要是依靠控制电力和电机驱动进行转变的。

其次是K60最小系统板,在设计时需要将K60的管脚部分做成最小系统的单独电路板,这样可以简化电路板的设计,促使调试更加顺利,K60系统板主要由K60芯片、复位电路、时钟电路、JTAG下载电路、电源滤波电路组成。

再其次是电机驱动电路,该电路是在集成芯片的驱动下进行的,可以为控制器更其他模块提供较大的电流最终集成电机驱动芯片,但是要特别注意这部分因为在电机驱动过程中有较大的分功率,会导致小车在进行调试时因为过大的电流导致小车电路发生堵塞现象,而使小车电路被烧毁,因此需要设计者避免这种现象,可以将驱动电路做成驱动板[2]。

最后是舵机接口电路。

在智能小车设计中,舵机主要保证小车可以顺利转向,因此舵机的运行电压、转向动作、转向速度都是需要考虑的因素,一般选择舵机时主要选择Futaba3010,选择供电电压为6V。

基于树莓派的智能小车控制系统设计

基于树莓派的智能小车控制系统设计

基于树莓派的智能小车控制系统设计智能小车控制系统已经成为现代科技的研究热点之一。

它使得机器人具有更好的自主感知和行为决策能力,为人类生产和生活提供了更多便利和选择。

在这篇文章中,我们将探讨基于树莓派的智能小车控制系统的设计原理、实现方法以及其在实际应用方面的优势。

一、设计原理基于树莓派的智能小车控制系统的设计原理主要包括三个方面:感知模块、控制模块和决策模块。

1.感知模块感知模块主要是通过多种传感器来感知环境,包括红外线传感器、超声波传感器、摄像头和麦克风等。

通过收集和处理感知模块所得到的数据信息,可以实现对其所处环境的自主感知。

2.控制模块控制模块主要是根据感知模块所提供的数据信息,通过控制电机、舵机和灯光等组成的执行器来实现小车的运动控制、转向控制和灯光控制。

3.决策模块决策模块主要是通过分析感知模块所提供的数据信息,从而得出连续动作序列,完成运动控制、转向控制和灯光控制等行为决策。

二、实现方法基于树莓派的智能小车控制系统的实现方法主要包括硬件实现和软件实现两个方面。

1.硬件实现硬件实现主要包括小车的机械结构设计和电路设计。

机械结构设计需要满足小车运动的必要条件,保证小车在各种情况下的稳定性和安全性。

而电路设计则包括了电源管理、传感器接口设计、执行器控制和通信接口等电路部分。

树莓派板载GPIO(General Purpose Input Output)口提供了以电平信号为基础的输入输出接口,使用树莓派适配板将这些口映射到通用接口上,即可完成与各种硬件的连接。

2.软件实现软件实现主要包括操作系统安装、驱动程序编写和应用程序开发等方面。

在树莓派上,可以安装常用的操作系统,如Raspbian 等,针对赛车所用的传感器与执行器设备编写驱动程序,并根据实际需求使用Python等编程语言进行应用程序开发。

三、实际应用基于树莓派的智能小车控制系统在现实中已经有了广泛的应用。

例如,可以用于智能家居场景中的清洁机器人、智能物流配送中的 AGV 等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

<<计算机控制技术综合训练>>任务书附录:电信学院课程设计报告要求1、设计题目;2、目录;3、本设计的基本原理;4、简要说明本设计内容、用途及特点;5、本设计达到的性能指标;6、设计方案的选择;7、写出各部分设计过程、工作原理、元器件选择;8、绘制图纸(手绘2号图纸);9、设计参考文献;10、附录;11、设计总结体会;12、设计说明书不得少于10000字。

智能小车运行图显示速度,距离,超声波探测距离经过调试,小车完美实现了如下功能1.小车具有无线遥控功能,小车可完成前进、后退、左转、右转等动作,并且可以正确显示当前的速度及行进位移。

2.小车具有循迹及避障功能,实现了舵机转动下的超声波壁障功能,并且可以正确有序显示小车位移、速度及与前方障碍物距离。

3.与其它组的小车模型配合可以完成交替领跑任务。

4.小车所有模式切换均由遥控器控制。

流程图硬件原理图附件一:智能小车系统程序#include <AT89x51.H>#include <intrins.h>sbit AA=P3^0;sbit DD=P3^1;sbit BB=P3^2;sbit CC=P2^2;sbit LCM_RW=P2^4; //定义LCD引脚sbit LCM_RS=P2^3;#define RX P2_0#define TX P2_1#define LCM_E P2_5#define Sevro_moto_pwm P2_7 //接舵机信号端输入PWM信号调节速度#define LCM_Data P0#define Busy 0x80 //用于检测LCM状态字中的Busy标识#define Left_1_led P3_7 //P3_7接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1#define XUNJI_left_led P3_6 //P3_6接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2#define XUNJI_right_led P3_5 //P3_5接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3#define Right_2_led P3_4 //P3_4接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4#define Left_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //左边两个电机向前走#define Left_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //左边两个电机向后转#define Left_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //左边两个电机停转#define Right_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //右边两个电机向前走#define Right_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //右边两个电机向后走#define Right_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //右边两个电机停转void LCMInit(void); //LCD初始化函数void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);//LCD显示一个字符函数void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//LCD显示一个字符串函数void Delay5Ms(void); //延时5毫秒函数void Delay400Ms(void); //延时400毫秒函数void Decode(unsigned char ScanCode);void WriteDataLCM(unsigned char WDLCM); //LCD1602写数据函数void WriteCommandLCM(unsigned char WCLCM,BuysC);//LCD写命令函数unsigned char ReadStatusLCM(void);unsigned char code Range[] ="V= cm/s S= . m"; //LCD1602显示格式unsigned char code welcome[] ="=== Welcome === ";unsigned char code key[]="Press any key...";unsigned char code ASCII[13] = "0123456789.-M";unsigned char code table[]="Distance:000.0cm";unsigned char code table1[]="YAO KONG MO SHI ";unsigned char code table2[]="=XUN JI MO SHI= ";unsigned char pwm_val_left = 0;//变量定义unsigned char push_val_left =14;//舵机归中,产生约,1.5MS 信号unsigned int CH0=0; //循迹模式标志unsigned int CH1=0; //超声波模式标志unsigned int t=0; //速度基准变量unsigned int timer=0; //延时基准变量unsigned int time=0;unsigned int pwm=250;unsigned int count1=0; //计左电机码盘脉冲值unsigned char timer1=0; //扫描时间变量unsigned long S1=0;unsigned long S2=0;unsigned long S3=0;unsigned long S4=0;unsigned long S=0;unsigned long V=0; //定义其速度unsigned long SS=0;unsigned char disbuff[4]= { 0,0,0,0,};unsigned char disbuff1[4]={ 0,0,0,0,};void WriteDataLCM(unsigned char WDLCM) //写数据{ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太高可以在这后加小的延时LCM_E = 0; //延时LCM_E = 1;}void WriteCommandLCM(unsigned char WCLCM,BuysC) //写指令,BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}unsigned char ReadStatusLCM(void) //读状态{LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & Busy); //检测忙信号return(LCM_Data);}void LCMInit(void) //LCM初始化{LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0c,1); // 显示开及光标设置}//按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCM(X, 1); //发命令字WriteDataLCM(DData); //发数据}//按指定位置显示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData){unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>0x19) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符ListLength++;X++;}}}//5ms延时void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}//400ms延时void Delay400Ms(void){unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);};}/********************************************************/void Conut(void) //超声波距离计算函数{while(!RX); //当RX为零时等待TR0=1; //开启计数while(RX); //当RX为零时等待TR0=0;time=TH0*256+TL0;TH0=0;TL0=0;S=(time*1.7)/10+10;disbuff1[0]=V%10;disbuff1[1]=V/10;DisplayListChar(0, 0, Range);DisplayOneChar(2, 0, ASCII[disbuff1[1]]);DisplayOneChar(3, 0, ASCII[disbuff1[0]]);disbuff1[0]=SS/10%10;disbuff1[1]=SS/100%10;disbuff1[2]=SS/1000;DisplayOneChar(11, 0, ASCII[disbuff1[2]]);DisplayOneChar(12, 0, ASCII[disbuff1[1]]);DisplayOneChar(13, 1, ASCII[10]);DisplayOneChar(14, 0, ASCII[disbuff1[0]]);disbuff[0]=S%10;disbuff[1]=S/10%10;disbuff[2]=S/100%10;disbuff[3]=S/1000;DisplayListChar(0, 1, table);DisplayOneChar(9, 1, ASCII[disbuff[3]]);DisplayOneChar(10, 1, ASCII[disbuff[2]]);DisplayOneChar(11, 1, ASCII[disbuff[1]]);DisplayOneChar(12, 1, ASCII[10]);DisplayOneChar(13, 1, ASCII[disbuff[0]]);}/********************************************************/ void Conut0(void) //循迹模式显示{disbuff1[0]=V%10;disbuff1[1]=V/10;DisplayListChar(0, 0, Range);DisplayOneChar(2, 0, ASCII[disbuff1[1]]);DisplayOneChar(3, 0, ASCII[disbuff1[0]]);disbuff1[0]=SS/10%10;disbuff1[1]=SS/100%10;disbuff1[2]=SS/1000;DisplayOneChar(11, 0, ASCII[disbuff1[2]]);DisplayOneChar(12, 0, ASCII[disbuff1[1]]);DisplayOneChar(13, 0, ASCII[10]);DisplayOneChar(14, 0, ASCII[disbuff1[0]]);DisplayListChar(0, 1, table2);}/********************************************************/ void StartModule() //启动模块{TX=1; //启动一次模块_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;}/********************************************************//*void delayms(unsigned int ms){unsigned char i=100,j;for(;ms;ms--){while(--i){j=10;while(--j);}}}*/void Timer_Count(void) //超声波高电平脉冲宽度计算函数{TR0=1; //开启计数while(RX); //当RX为1计数并等待TR0=0; //关闭计数Conut(); //计算}/******************************************************************** ****///前速前进void run(void){Left_moto_go ; //左电机往前走Right_moto_go ; //右电机往前走}/******************************************************************** ****///前速后退void backrun(void)Left_moto_back ; //左电机往前走Right_moto_back ; //右电机往前走}/******************************************************************** ****///左转void leftrun(void){Left_moto_back ; //左电机往前走Right_moto_go ; //右电机往前走}/******************************************************************** ****///右转void rightrun(void){Left_moto_go ; //左电机往前走Right_moto_back ; //右电机往前走}/******************************************************************** ****///STOPvoid stoprun(void){Left_moto_Stop ; //左电机停走Right_moto_Stop ; //右电机停走}/******************************************************************** ****/void COMM( void ){V=0;push_val_left=5; //舵机向左转90度timer=0;while(timer<=4000); //延时400MS让舵机转到其位置 4000StartModule(); //启动超声波测距Conut(); //计算距离S2=S;push_val_left=23; //舵机向右转90度timer=0;while(timer<=4000); //延时400MS让舵机转到其位置StartModule(); //启动超声波测距Conut(); //计算距离S4=S;push_val_left=14; //舵机归中timer=0;while(timer<=4000); //延时400MS让舵机转到其位置StartModule(); //启动超声波测距Conut(); //计算距离S1=S;if((S2<300)||(S4<300)) //只要左右各有距离小于,30CM小车后退 {backrun(); //后退timer=0;while(timer<=1000);}if(S2>S4){rightrun(); //车的左边比车的右边距离小右转 timer=0;while(timer<=800);}else{leftrun(); //车的左边比车的右边距离大左转timer=0;while(timer<=800);}}/****************************************************/void pwm_Servomoto(void){if(pwm_val_left<=push_val_left)Sevro_moto_pwm=1;else Sevro_moto_pwm=0;if (pwm_val_left>=100)pwm_val_left=0;}/***************************************************////*TIMER1中断服务子函数产生PWM信号*/void time1()interrupt 3 using 2{TH1=(65536-100)/256; //100US定时TL1=(65536-100)%256;timer++; //定时器100US为准。

相关文档
最新文档