单片机蓝牙控制小车
单片机蓝牙小车实习报告

一、实习背景随着科技的发展,单片机技术得到了广泛应用。
为了提高自己的动手能力,拓宽知识面,我们选择了单片机蓝牙小车作为实习项目。
本项目旨在利用单片机技术,通过蓝牙通信实现小车的无线遥控,使其具备基本移动和避障功能。
二、实习目的1. 掌握单片机的基本原理和编程方法。
2. 熟悉蓝牙通信技术及其应用。
3. 培养团队合作精神和动手能力。
4. 提高解决实际问题的能力。
三、实习内容1. 硬件设计(1)主控芯片:选用STC89C52单片机作为小车的主控芯片,具有丰富的I/O口,便于扩展。
(2)蓝牙模块:选用HC-05蓝牙模块,实现手机与单片机的无线通信。
(3)电机驱动:采用L293D电机驱动芯片,为直流电机提供足够的驱动能力。
(4)传感器:选用红外传感器作为避障传感器,检测前方障碍物。
(5)电源:采用两节3.7V锂电池为小车提供电源。
2. 软件设计(1)主控程序:编写单片机主程序,实现蓝牙通信、电机控制、避障等功能。
(2)手机端程序:编写手机端蓝牙控制程序,实现小车的无线遥控。
3. 系统调试(1)硬件调试:检查电路连接,确保各模块正常工作。
(2)软件调试:通过串口调试助手,观察程序运行状态,发现问题并修改。
四、实习过程1. 硬件制作(1)根据电路图,焊接各元器件,包括单片机、蓝牙模块、电机驱动芯片、红外传感器等。
(2)组装小车底盘,将各模块安装到位。
2. 软件编程(1)编写单片机主程序,实现蓝牙通信、电机控制、避障等功能。
(2)编写手机端蓝牙控制程序,实现小车的无线遥控。
3. 系统调试(1)硬件调试:检查电路连接,确保各模块正常工作。
(2)软件调试:通过串口调试助手,观察程序运行状态,发现问题并修改。
五、实习成果1. 成功制作了一台单片机蓝牙小车,具备基本移动和避障功能。
2. 掌握了单片机编程、蓝牙通信、电机控制等技术。
3. 提高了动手能力和团队合作精神。
4. 为今后的学习和工作打下了基础。
六、实习总结通过本次单片机蓝牙小车实习,我们深刻体会到理论与实践相结合的重要性。
stm32小车蓝牙模块原理

stm32小车蓝牙模块原理
本文将简要介绍STM32小车蓝牙模块的原理。
STM32小车蓝牙模块是利用STM32单片机控制小车运动方向和速度的一种外围装置,通过蓝牙模块与手机进行通讯控制小车运动。
其原理主要包括以下几个方面:
1. STM32单片机控制小车运动
STM32单片机作为小车的控制核心,通过GPIO口输出控制小车
电机的转动方向和速度,从而实现小车的运动。
通过编写相应的程序,可以实现小车的前进、后退、左转、右转等基本运动。
2. 蓝牙模块实现与手机的通讯
蓝牙模块作为小车与手机之间的通讯接口,主要负责接收手机发来的指令,并将指令传输给STM32单片机进行处理。
同时,蓝牙模块也可以将小车的状态信息反馈给手机,以便用户了解小车的运行状态。
3. 手机APP控制小车运动
用户通过手机APP向小车发送指令,控制小车的运动。
指令通过蓝牙模块传输给STM32单片机进行处理,从而实现小车的运动控制。
用户可以通过手机APP调整小车的运动速度和方向,以便适应不同的运动环境。
综上所述,STM32小车蓝牙模块实现了通过手机控制小车运动的功能,为用户提供了一种方便、灵活的控制方式。
未来,随着物联网技术的发展,STM32小车蓝牙模块有望成为物联网领域的重要应用之一。
基于单片机的一种多功能玩具小车的设计与实现

随着科技的发展,单片机作为一种常用的微控制器,已经在各个领域得到了广泛应用。
在玩具领域,特别是玩具小车的设计中,单片机的运用也越来越普遍,可以实现各种有趣的功能。
本文将介绍一种基于单片机的多功能玩具小车的设计与实现。
二、设计目标1. 实现无线遥控功能,通过遥控器实现对小车的控制。
2. 设置超声波避障模块,让小车能够自动避开障碍物。
3. 小车可通过蓝牙模块与手机进行连接,实现手机APP控制。
4. 为小车设计多种灯光效果,增添趣味性。
5. 使用音乐模块,使小车产生丰富的声音效果。
三、硬件设计1. 主控芯片选择了常用的Arduino单片机。
2. 驱动模块选用了直流电机驱动模块,实现小车的前进、后退和转向。
3. 采用了超声波传感器模块,用于检测障碍物并实现避障功能。
4. 蓝牙模块选用了蓝牙串口模块,实现与手机的数据传输和控制。
5. 设计了多种灯光效果,包括LED灯和彩色灯带。
6. 音乐模块选用了声音传感器模块,可以发出不同的声音效果。
四、软件设计1. 编写了小车的控制程序,包括前进、后退、左转、右转等基本控制2. 通过编写遥控器程序,实现了对小车的无线遥控功能。
3. 编写了避障算法,使小车能够自动避开障碍物。
4. 开发了手机APP,通过蓝牙模块与小车进行连接和控制。
5. 设计了多种灯光效果的控制程序,可以实现闪烁、变色等效果。
6. 编写了音乐模块的程序,可以根据指令发出不同的声音效果。
五、实现效果1. 小车可以通过遥控器实现前进、后退、左转、右转的基本功能。
2. 超声波传感器可以准确检测到障碍物,并成功避开。
3. 通过手机APP可以实现对小车的遥控和控制各种功能。
4. 多种灯光效果可以有效增加小车的趣味性。
5. 音乐模块发出的声音效果丰富多彩,增加了小车的趣味性。
六、总结与展望本文介绍了一种基于单片机的多功能玩具小车的设计与实现,通过结合硬件设计和软件设计,实现了多种有趣的功能。
未来,可以进一步优化设计,增加更多的传感器模块和功能模块,使小车的功能更加丰富多样。
手机蓝牙控制小车_嵌入式实验报告

手机蓝牙控制小车
报告
*若需源码,请关注后,发私信
一、主要思路
利用Android手机的蓝牙功能,通过蓝牙模块与单片机进行串口通信,通过手机发送不同的指令使单片机控制电机的转动,进而使小车产生前进、后退、左转、右转的效果。
二、主要设备
Android手机一部、单片机最小系统一个,蓝牙模块一个、单片机一个、电机驱动模块一个、电动马达两个以及玩具车等。
三、实现细节
Android手机蓝牙与单片机蓝牙模块建立连接通信,发送a,b,c,d,e依次控制小车的前进、后退、左转、右转和停止。
单片机接收Android手机发送的指令,依次辨别,进而控制电机驱动模块,使马达具有不同的转向。
两个马达同时正转,小车表现前进
两个马达同时反转,小车表现后退
左边马达反转,右边马达正转,小车表现左转
右边马达反转,左边马达正转,小车表现右转
两个马达停止,小车表现停止
四、总结
本次实习项目遇到不少问题,其中最主要的有两点,一是对单片机串口通信掌握不好,主要是对单片机的不熟,每次
Android手机与蓝牙模块建立连接配对之后,却无法进行正常连接,导致从手机发送的指令,单片机无法收到。
二是单片机线路的连接花费了不少的时间,但最后终于解决了。
由于蓝牙通信建立的失败,本次实习项目只是一个半成品,希望以后有时间能解决蓝牙通信的问题。
通过这次实习,对嵌入式有了一个更好的理解,知道通过代码编写控制硬件,这或许就是嵌入式的一个主要作用。
基于51单片机的蓝牙遥控小车

基于51单片机的蓝牙遥控小车基于单片机的智能避障遥控小车目录第一章绪论 (1)1.1 研究背景和意义 (1)第二章系统框架及软硬件结构设计 (2)2.1 系统要求 (2)2.2 系统整体算法流程 (3)2.3 总体任务设计 (4)2.4 整体硬件结构设计 (5)2.5 整体软件结构设计 (6)第三章模块的详细设计 (7)3.1 L293D电机驱动模块 (7)3.1.1模块介绍 (7)3.1.2 PWM脉冲控制原理 (7)3.1.3 脉冲控制代码 (8)3.2 HC05蓝牙模块 (9)3.2.1 模块简介 (9)3.2.2 蓝牙串口程序说明 (10)3.2.3 模块引脚说明 (11)3.3 USB转TTL模块 (12)第四章系统功能设计与实现 (14)4.1 安卓手机蓝牙遥控的设计与实现 (14)4.1.1 设计基本思路 (14)4.1.2 遥控任务分配 (15)4.2.3 蓝牙遥控操作流程 (15)第五章软硬件调试 (18)5.1 硬件调试 (18)5.2 软件调试 (18)第一章绪论1.1 研究背景和意义智能化无处不在。
各种智能化设备在不同的领域中发挥着自己的特长,而在家用方面的智能有着相当重要的意义。
本次所设计的智能小车系统包含着对周围环境的检测、舵机控制以及短距离无线遥控等的功能,它需要实现微控制器、多传感器技术、蓝牙遥控、机械结构原理、数字逻辑、自动控制等各学科技术内容的渗透融合。
智能小车通过其上部搭载的89C52芯片作为核心控制器,通过多种传感器来获取周围环境信息并将采集到的信息输送给CPU,然后由CPU来给各个部分下达相对应的指令。
智能小车不仅价格低廉,而且甚至能够担任人类难以从事的任务,它在工业、农业以及社会生产生活等许多领域都起到了重要作用。
本次课题设计中所采用到的短距离无线遥控、单片机控制原理、多传感器技术、自动避障技术等等。
现在在工业制造、农业生产、国家安全、军事武器,医疗保健、太空探测等许多领域都日益发挥着其作用,在军事侦察、反恐、防暴、防核化等高危任务方面、环境污染检测方面和在恶劣环境中均有着非常好的发展前景,从这些方面可知本课题研究意义非凡。
单片机课程设计-蓝牙小车

单片机课程设计-蓝牙小车一、课程目标知识目标:1. 让学生理解单片机的基本原理,掌握其编程方法;2. 使学生了解蓝牙技术的原理及其在单片机控制中的应用;3. 帮助学生掌握蓝牙小车的设计原理,能分析其电路组成及功能。
技能目标:1. 培养学生动手实践能力,能独立完成单片机程序的编写和调试;2. 提高学生的问题解决能力,能够针对蓝牙小车出现的问题进行分析和修复;3. 培养学生的团队协作能力,通过小组合作完成蓝牙小车的组装和调试。
情感态度价值观目标:1. 培养学生对单片机及电子制作的兴趣,激发其创新意识;2. 培养学生积极的学习态度,使其具备自主学习、探究问题的精神;3. 增强学生的环保意识,使其关注可持续发展,并在设计过程中注重节能环保。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够独立编写单片机程序,实现对蓝牙小车的控制;2. 学生能够分析并解决蓝牙小车在运行过程中出现的问题;3. 学生能够通过团队协作,完成蓝牙小车的组装、调试和优化;4. 学生能够关注单片机及蓝牙技术在生活中的应用,具备初步的创新设计能力。
二、教学内容本课程教学内容主要包括以下几部分:1. 单片机基础理论:介绍单片机的组成、工作原理及编程方法,涉及教材第1章至第3章内容。
2. 蓝牙技术原理:讲解蓝牙技术的原理、特点以及在单片机控制中的应用,涉及教材第4章内容。
3. 蓝牙小车设计原理:分析蓝牙小车的电路组成、功能及工作原理,涉及教材第5章内容。
4. 单片机编程与调试:教授如何编写和调试单片机程序,实现对蓝牙小车的控制,涉及教材第6章内容。
5. 蓝牙小车组装与调试:指导学生进行蓝牙小车的组装、调试及优化,涉及教材第7章内容。
6. 实践与创新:培养学生动手实践能力,激发创新意识,结合教材内容进行拓展实践。
教学进度安排如下:1. 第1-2周:学习单片机基础理论,完成教材第1章至第3章的学习;2. 第3周:学习蓝牙技术原理,完成教材第4章的学习;3. 第4周:学习蓝牙小车设计原理,完成教材第5章的学习;4. 第5-6周:进行单片机编程与调试,完成教材第6章的学习;5. 第7-8周:进行蓝牙小车组装与调试,完成教材第7章的学习;6. 第9-10周:进行实践与创新,结合所学内容进行拓展实践。
stm32蓝牙单片机小车

//将接收到字节发送给PC
*@param无
*@retval无
*/
void USART1INIT(void)
{
//相关结构体声明
GPIO_InitTypeDef GPIO_InitStructure;//端口
USART_InitTypeDef USART_InitStructure; //串口
NVIC_InitTypeDef NVIC_InitStructure; //NVIC
软件设计
1.
封装两个函数,如下:
void L298NINIT(void);//L298n电机初始化,时钟、端口配置
void L298Ctrl(uint8_t str);// L298n方向控制,参数0(停)1(前)2(后)3(左)4(右)
,附件源码。
2.
封装一个函数:void USART1INIT(void);//串口初始化,时钟、端口、波特率、中断优先级配置,附件源码。修改中断服务函数,进行接收数据判断,调用L298N的void L298Ctrl(uint8_t str);
GPIO_ResetBits( GPIOA, GPIO_Pin_5);
GPIO_ResetBits( GPIOA, GPIO_Pin_4);
GPIO_SetBits( GPIOB, GPIO_Pin_0);
GPIO_ResetBits( GPIOB, GPIO_Pin_1);
}
if(str==4)//右转
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//端口配置
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
单片机蓝牙控制小车

课题:基于单片机的蓝牙控制小车专业:班级:学号:姓名:指导教师:设计日期:成绩:重庆大学城市科技学院电气信息学院目录1.设计目的作用 (2)2.设计要求 (2)3.设计的具体实现 (2)3.1设计原理 (2)3.2系统设计 (12)3.3系统实现 (13)4.总结 (19)参考文献 (20)附录 (21)附录1 (21)附录2 (22)C51蓝牙控制小车设计报告1设计目的与意义目的与意义:提高学生动手能力,培养学生的思维,巩固理论知识,让我们能对单片机更加深入的了解,加深同学们对单片机的认识,通过自己动手让小车跑起来还能让同学们更加有积极性,参与感,成就感。
让学生们亲自体验这门课程的神奇性。
因为无线技术的广泛使用,使蓝牙技术的发展成为了趋势之一,蓝牙可以发送和接受语音和数据,满足了大多数人的需求,它也融合了其他相关产品的特点,也是这样技术变得更多样性。
实现了无线控制小车,摆脱了有线控制的不方便,更加智能。
2设计要求SPP蓝牙串口调试助手 ----》聊天窗口--》1、在Bluetooth_Car项目中添加超声波躲避障碍功能(在小车前进的过程中,实时检测障碍物,一旦检测的距离,接近设定的值,触发蜂鸣器,报警系统工作,小车停止前进);2、在Bluetooth_Car项目中的串口中断服务函数中,添加小车前进的8个方向,前后左右,左前,右前,左后,右后;3、利用外部中断,强制停止小车运行(无论小车现在处于什么状态),蜂鸣器报警1s后,可再运行;4、用手机的蓝牙串口调试助手来远程操作小车。
3.设计的具体实现3.1设计原理芯片常识: STM8、C52 、STM32 、ARMC52:主要做末端的控制 11.0592MHZSTM32:主要做工业控制领域——智能设备 168MARM:主要做消费市场——手机==============单片机小车==========了解原理图和数据手册一、软件建立工程建立工程时芯片选择--》Atmel-->AT89C52设置芯片频率,选择生成16进制可执行文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课题:基于单片机得蓝牙控制小车专业:班级:学号:姓名:指导教师:设计日期:成绩:重庆大学城市科技学院电气信息学院目录1、设计目得作用 (2)2、设计要求.............................................. 23、设计得具体实现ﻩ23、1设计原理 (2)3、2系统设计12ﻩ3、3系统实现13ﻩ4、总结19ﻩ参考文献................................................ 20附录 ................................................... 21附录121ﻩ附录22ﻩ2C51蓝牙控制小车设计报告1设计目得与意义目得与意义:提高学生动手能力,培养学生得思维,巩固理论知识,让我们能对单片机更加深入得了解,加深同学们对单片机得认识,通过自己动手让小车跑起来还能让同学们更加有积极性,参与感,成就感.让学生们亲自体验这门课程得神奇性。
因为无线技术得广泛使用,使蓝牙技术得发展成为了趋势之一,蓝牙可以发送与接受语音与数据,满足了大多数人得需求,它也融合了其她相关产品得特点,也就是这样技术变得更多样性。
实现了无线控制小车,摆脱了有线控制得不方便,更加智能。
2设计要求SPP蓝牙串口调试助手---—》聊天窗口-—》1、在Bluetooth_Car项目中添加超声波躲避障碍功能(在小车前进得过程中,实时检测障碍物,一旦检测得距离,接近设定得值,触发蜂鸣器,报警系统工作,小车停止前进);2、在Bluetooth_Car项目中得串口中断服务函数中,添加小车前进得8个方向 ,前后左右,左前,右前,左后,右后;3、利用外部中断,强制停止小车运行(无论小车现在处于什么状态),蜂鸣器报警1s后,可再运行;4、用手机得蓝牙串口调试助手来远程操作小车。
3、设计得具体实现3、1设计原理芯片常识: STM8、C52 、STM32 、ARMC52:主要做末端得控制11、0592MHZSTM32:主要做工业控制领域--智能设备168MARM:主要做消费市场——手机==============单片机小车==========了解原理图与数据手册一、软件建立工程ﻩ建立工程时芯片选择—-》Atmel-—>AT89C52ﻩ设置芯片频率,选择生成16进制可执行文件.=============中断========单片机获取外部数据得方式:1、程序控制方式a、无条件发送方式单片机认为外部设备一直都就是准备好得,直接就拿数据使用。
b、条件判断方式在满足一定条件才获取数据.2、中断方式由外部控制得,当有中断请求产生得时候,就可以在中断里面去实现获取数据。
3、DMA直接存储控制器当需要从外界获取数据得时候,DMA可以向CPU申请获取数据,由DMA直接获取数据。
使用DMA可以绕过CPU处理数据,降低CPU得使用率。
中断:当CPU正常运行得时候,突然收到一个中断请求(任务),完成中断任务之后立即返回原来得程序继续执行.中断源:中断来源,发送中断得源头中断请求:中断发出得请求,申请执行任务中断响应:CPU响应中断请求,暂停正在执行得任务,转而执行中断任务8个中断源:ﻩINT0ﻩ外部中断0ﻩINT1 外部中断1ﻩINT2 外部中断2ﻩINT3外部中断3T0ﻩ定时器0T1 定时器1ﻩT2ﻩ定时器2Uart 串口中断中断有优先级:分为4级,从0~3,数字越大优先级越高,高优先级得中断可以打断低优先级得中断。
中断得查询次序:在中断优先级相同得情况下,并且两个中断同时产生得时候,会优先执行查询次序级别高得中断、查询次序不能打断中断、中断服务函数:void INT1_func(void) interrupt 2{ﻩif()}小车两轮驱动:单片机得IO口不能直接驱动电机运行,必须使用驱动模块才可以。
电机转动原理:电机得两条线一根接电源正极,一根接负极就可以转动,当电极得方向改变,转动得方向也会改变。
BIB = 0;控制右轮电机,如果想让轮子转动,只需要设置以上两个引脚,一个为1,一个为0、P0、0 左轮 1P0、1左轮 0P0、2 右轮 1P0、3右轮0如果轮子想要动起来,需要接电源线。
思考:封装函数:前进、后退、停止、左前转、右前转、左后转、右后转=============定时器==============定时器就就是定时,定时产生中断或者就是计数.工作方式:定时器:主要产生定时中断计数器:计时计数工作模式:模式0:12位寄存器模式1:16位寄存器模式2:8位自动重装载寄存器模式3:两个8位寄存器,T1无效时钟周期:就就是频率得倒数假设晶振12M,时钟周期就是1/12us,实际上大多使用得就是:1/11、0592状态周期:状态周期就是时钟周期得两倍:1/12*212个时钟周期定为1个机器周期,如果晶振就是12M,那么一个机器周期就刚好就是1us。
寄存器:TCON 控制寄存器 TMOD模式寄存器定时器0作模式1: TMOD、1 = 0TMOD、0 = 1设置寄存器计数得初值:TL0与TH050ms = (65536-初值)* (1/11、0592*12)50000us = (65536-初值ﻩ)* 1、0850746080 =65536—初值初值= 19456 ==》0x4C00TH0= 0x4C;TL0 = 0x00;=============串口==============一、计算机内部通讯得方式:UART(串口)、I2C、SPI、1-Write(单总线)二、数据通讯方式并行通讯:多个任务同时进行,增加速度。
串行通讯:数据只通过一根数据线传输,一位一位得传输数据。
三、串行通讯同步通讯:发送一位数据必须要接收一位数据,通过时钟线确定数据收发:I2C、SPI异步通讯:可以独立收发数据,不需要发送数据得时候接收数据。
:串口UART、1w总线单工:只能一方发送数据,一方接收数据(收音机)半双工:同一时刻只能一方发送数据,一方接收数据,但就是方向可以转换.(对讲机)全双工:数据在同一时刻可以收也可以发.(电话)四、电平特性TTL与RS232TTL:0V~5V 0V表示数据0 3、3V/5V表示数据1RS232:—15V~+15V 3V~15V表示数据0 -15V~-3V表示数据1 单片机直接使用得就是TTL电平:VCC正极;GND负极; TXD数据发送; RXD数据接收五、串行通讯得协议六、单片机串口寄存器SCON控制寄存器串口选择方式1,8位UART,波特率可变。
设置SCON寄存器:SCON = // 0101 0000 ==》 0x50PCON电源管理寄存器,设置SMOD得值SMOD默认值就就是0,也可以主动设置为0、设置好之后需要开启总中断:EA = 1;ﻩES = 1;串口波特率计算:波特率 = (2^SMOD /32)* (定时器溢出率)9600 = (1/32)* (11059200/12/(256—TH1)) 9600 = (1/32)*(921600/(256-TH1))921600/(256-TH1)= 307200(256-TH1) = 3TH1 = 253 ==〉0xFD串口发送数据SUBF = 'h’; // 发送数据,还要判断就是否发送3、2系统设计项目框图:3、3系统实现程序代码如下:#include 〈reg52、h>ﻩ//器件配置文件#include<intrins、h>#defineuintunsigned int#define uchar unsignedchar#define LCM_DataP2#defineBusy 0x80//用于检测LCM状态字中得Busy标识sbit RX = P1^1;sbit TX=P1^2 ;sbit LCM_RW=P0^3; //定义LCD引脚sbit LCM_RS= P0^4;sbit LCM_E = P0^2;sbitFM=P0^7;//定义蜂鸣器sbit AIA= P2^3;//定义电机sbit AIB = P2^2;sbit BIB = P2^1;sbitBIA =P2^0;void LCMInit(void);void DisplayOneChar(unsigned char X, unsignedchar Y,unsigned char DData);voidDisplayListChar(unsigned charX,unsigned char Y,unsigned char code*DData);void Delay5Ms(void);void Delay400Ms(void);void Decode(unsignedcharScanCode);void WriteDataLCM(unsigned char WDLCM);void WritemandLCM(unsigned charWCLCM,BuysC);void SendOneByte(unsigned char c);unsignedcharReadDataLCM(void);unsigned char ReadStatusLCM(void);unsigned charcodemcustudio[]={"YueQian"};unsignedchar code email[]={" "};unsigned char code Cls[]= {" ”};unsignedchar code ASCII[15] = {'0’,'1','2',’3’,’4','5’,'6',’7’,'8','9','、',’-','M'};static unsigned char DisNum=0; //显示用指针ﻩﻩﻩunsigned int time=0;unsignedlong S=0;bit flag =0;unsigned chardisbuff[4]={0,0,0,0,};void Init_Int1(void){ﻩ IT1= 1; //下降沿触发ﻩEX1= 1;//开启外部中断1ﻩ EA=1;//开启总中断}void delay_ms(uintx)//延时函数ﻩuinti;while(x--){ﻩfor(i=0;i〈133;i++);ﻩ}}void car_go() //控制小车得函数前进{ﻩAIA = 1;//运用电机得电位差来控制小车得前进方向ﻩAIB = 0;ﻩBIA=1;BIB =0;}void car_back()//后退{AIA= 0;ﻩ AIB =1;BIA=0;ﻩBIB= 1;}voidright()//右转{AIA=1;ﻩAIB =0;BIA= 1;BIB = 1;}void left()//左转{ﻩAIA=1;ﻩAIB = 1;ﻩBIA = 1;ﻩBIB = 0;void go_right() //右转前进{AIA= 1;ﻩAIB =0;ﻩBIA= 1;ﻩBIB = 1;ﻩdelay_ms(500);AIA=1;ﻩAIB = 0;BIA =1;BIB = 0;}void go_left() //左转前进{ ﻩﻩAIA= 1;AIB= 1;BIA =1;BIB =0;ﻩdelay_ms(500);ﻩAIA= 1;ﻩAIB= 0;ﻩBIA = 1;BIB=0;}void back_right()//右转后退{AIA = 1;ﻩAIB =1;BIA =1;BIB= 0;delay_ms(500);ﻩAIA= 0;AIB= 1;ﻩBIA = 0;BIB= 1;}voidback_left()//左转后退{AIA =1;AIB =0;ﻩBIA = 1;BIB =1;delay_ms(500);AIA = 0;ﻩAIB = 1;BIA =0;BIB = 1;}void WriteDataLCM(unsigned charWDLCM)//写数据{ReadStatusLCM();//检测忙ﻩLCM_Data=WDLCM;LCM_RS = 1;ﻩLCM_RW=0;ﻩLCM_E = 0; //若晶振速度太高可以在这后加小得延时LCM_E =0; //延时ﻩLCM_E= 1;}voidWritemandLCM(unsignedcharWCLCM,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 ReadDataLCM(void)//读数据{LCM_RS=1;LCM_RW=1;LCM_E = 0;ﻩLCM_E = 0;ﻩLCM_E = 1;ﻩreturn(LCM_Data);}unsigned charReadStatusLCM(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);}voidLCMInit(void) //LCM初始化{ﻩLCM_Data =0;ﻩWritemandLCM(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WritemandLCM(0x38,0);Delay5Ms();WritemandLCM(0x38,0);Delay5Ms();ﻩWritemandLCM(0x38,1);//显示模式设置,开始要求每次检测忙信号WritemandLCM(0x08,1);//关闭显示ﻩWritemandLCM(0x01,1);//显示清屏WritemandLCM(0x06,1);//显示光标移动设置ﻩWritemandLCM(0x0F,1);// 显示开及光标设置}//按指定位置显示一个字符voidDisplayOneChar(unsigned char X,unsigned charY,unsigned charDData){ﻩY&=0x1;X &= 0xF;//限制X不能大于15,Y不能大于1ﻩif (Y)X|= 0x40;//当要显示第二行时地址码+0x40;X |=0x80; //算出指令码WritemandLCM(X,1);//发命令字WriteDataLCM(DData);//发数据}//按指定位置显示一串字符void DisplayListChar(unsignedcharX, unsigned char Y,unsigned char code*DData){unsigned charListLength;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++;ﻩﻩ}}}void Delay5Ms(void) //5ms延时{unsigned intTempCyc = 5552;while(TempCyc—-);}voidDelay400Ms(void)//400ms延时{ﻩunsigned char TempCycA=5;unsigned intTempCycB;while(TempCycA--)ﻩﻩ{TempCycB=7269;while(TempCycB--);ﻩﻩ};}/**************超声波测距函数*************************/ voidConut(void){time=TH0*256+TL0;TH0=0;TL0=0;S=(time*1、87)/100;//算出来就是CM/*晶振为11、0592MHz时|t(us)= 计数* (12/11、0592)*(1/58)| = 计数* 0、0187|= (计数*1、87)/100*/if((S>=700)||flag==1)//超出测量范围显示“-”{ﻩflag=0;DisplayOneChar(0, 1,ASCII[11]);DisplayOneChar(1, 1, ASCII[10]);//显示点DisplayOneChar(2, 1, ASCII[11]);DisplayOneChar(3,1, ASCII[11]);DisplayOneChar(4,1,ASCII[12]); //显示M}else{disbuff[0]=S%1000/100;disbuff[1]=S%1000%100/10;disbuff[2]=S%1000%10 %10;DisplayOneChar(0,1,ASCII[disbuff[0]]);DisplayOneChar(1,1,ASCII[10]);ﻩ//显示点DisplayOneChar(2, 1, ASCII[disbuff[1]]);DisplayOneChar(3,1,ASCII[disbuff[2]]);DisplayOneChar(4,1,ASCII[12]);//显示M}}/********************************************************//***********定时器T0中断服务函数***********/void Timer0IRQ()interrupt1 //T0中断用来计数器溢出,超过测距范围{flag=1;}/********************触发超声波模块************************************/ //超声波模块Trig控制端给大于10us得高电平触发模块测距voidStartModule()ﻩ//启动模块{ﻩ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 chari=100,j;for(;ms;ms—-){ﻩwhile(--i){ﻩﻩj=10;ﻩﻩwhile(——j);ﻩﻩ}ﻩ}}/******************************/void SendOneByte(unsigned char c)//发送单个字符{SBUF= c;while(!TI);TI =0;}/*********************************************************/ voidmain(void){ﻩunsignedchar TempCyc;ﻩDelay400Ms();//启动等待,等LCM讲入工作状态LCMInit();//LCM初始化Delay5Ms(); //延时片刻(可不要)DisplayListChar(0,0,mcustudio);DisplayListChar(0,1, email);ﻩReadDataLCM();//测试用句无意义for (TempCyc=0;TempCyc<10; TempCyc++)Delay400Ms();//延时ﻩDisplayListChar(0, 1,Cls);ﻩFM=1;ﻩ// TMOD=0x01;ﻩ//设T0为方式1;// TH0=0;//ﻩ TL0=0;//ﻩET0=1; //允许T0中断// EA=1;ﻩ//开启总中断ﻩTMOD=0x21;ﻩﻩ//设T0为方式1,定时器1方式2; // 0010 0001 SCON=0x50;ﻩTH1=0xFD;TL1=0xFD;TH0=0;TL0=0;TR0=1;ﻩET0=1;//允许T0中断ﻩTR1=1; ﻩ//开启定时器ﻩTI=1;ﻩES= 1;ﻩEA=1;ﻩ//开启总中断Init_Int1();while(1){StartModule();//DisplayOneChar(0, 1,ASCII[0]);ﻩwhile(!RX);//当RX为零时等待TR0=1; ﻩ//开启计数ﻩwhile(RX);//当RX为1计数并等待TR0=0;ﻩﻩ//关闭计数Conut();ﻩﻩ//计算ﻩﻩ FM =1;ﻩAIA= 1;AIB=1;ﻩ BIA = 1;BIB= 1;//超声波测距检测ﻩ if(S<20)ﻩﻩ{ﻩﻩFM=0;ﻩﻩ AIA = 1;ﻩﻩAIB=1;BIA=1;ﻩﻩBIB= 1;ﻩ}elseﻩﻩFM =1;//80MSdelayms(80);ﻩﻩ}}void UARTInterrupt(void)interrupt4{ﻩunsigned charbuf;if(RI){RI = 0;//add your code here!ﻩﻩbuf = SBUF; ﻩﻩ//作回显没有任何作用ﻩﻩSendOneByte(buf);ﻩif(buf== ’1')ﻩﻩ{ﻩﻩcar_go();ﻩﻩdelay_ms(1000);ﻩ}elseif(buf=='2’){ﻩcar_back();ﻩﻩﻩdelay_ms(1000);}ﻩelse if(buf==’3’)ﻩ{ﻩﻩ right();ﻩdelay_ms(1000);ﻩﻩ}else if(buf== ’4')ﻩ{ﻩleft();ﻩdelay_ms(1000);ﻩ}else if(buf== '5'){ﻩﻩgo_right();ﻩdelay_ms(1000);ﻩﻩ }ﻩﻩelse if(buf == '6')ﻩﻩ{ﻩﻩgo_left();ﻩﻩdelay_ms(1000);ﻩﻩ}elseif(buf == '7')ﻩﻩ{ﻩﻩback_right();ﻩdelay_ms(1000);ﻩ}ﻩelseif(buf== '8’)ﻩ{back_left();ﻩﻩdelay_ms(1000);ﻩﻩ }}elseTI=0;}voidInt1_Routine(void) interrupt2{ﻩEX1 = 0;ﻩAIA=1;AIB=1;BIA=1;ﻩBIB =1;ﻩFM = 0;delay_ms(500);ﻩﻩFM = 1;EX1 = 1;}总结学习单片机要有一定得c语言基础,单片机得基础知识我还就是多多少少知道一些,可就是让我直接来做这一个项目,我却无从下手。