电子工程训练课程实验报告无线蓝牙小车
蓝牙小车课程设计报告

课程设计报告
葛元凯14 测控 1 班 2014330301072 159********
目录
一、整体方案设计
1.1 整体方案设计的思路
1.2 整体方案的流程图
二、小车系统概况
2.1 小车电路连接简介
2.2 电源和电机驱动系统简介
2.3 蓝牙遥控系统简介
2.4 直流电机简介
三、车体设计
四、软件的简单介绍
4.1keil 的简介
4.2stc-isp 的简介
五、程序清单
六、部分实验电路图
1.1 整体方案的设计思路
利用无线发射和无线接收模块控制单片机,让单片机翻译传输指令,从而实现相应的功能。
具体的过程如下:无线发射模块发出指令,无线接收模块接收信号后,传输给单片机,
单片机接收到信号后翻译并传输给电机驱动模块驱动电机旋转,从而实现小车的前进、左转、右转、后退、停止、加速和减速。
1.2 整体方案的流程图
2.1 小车电路连接简介
本实验采用stc89c52 单片机作为控制小车的主体,采用hc06 蓝牙模块为单片机收集信
号,采用以 L298n 芯片为核心的电机驱动模块(下文简称 L298n 模块)为单片机、蓝牙模块、电机供电,采用干电池组( 7.2v)为 L298n 模块供电间接为整个小车系统供电。
Stc89c52 使用了 11.0592M 的晶振,上图省略了晶振电路,但是实际存在。
Stc89c52 的vcc 接 L298n 模块 +5v 接口, gnd 接 L298ngnd 接口, P3^0 和 P3^1 接 hc06 蓝牙模块的
【下载本文档,可以自由复制内容或自由编辑修改内容,更
多精彩文章,期待你的好评和关注,我将一如既往为您服务】。
蓝牙小车实习报告

一、实习背景随着科技的发展,单片机技术逐渐成熟,各种智能设备层出不穷。
蓝牙作为一种无线通信技术,因其传输速度快、距离远、功耗低等优点,被广泛应用于各类智能设备中。
本实习报告以蓝牙技术为核心,设计并实现了一款蓝牙控制的多功能智能小车。
二、实习目的1. 熟悉单片机原理及编程方法;2. 掌握蓝牙通信技术;3. 学习传感器应用及小车控制算法;4. 提高动手实践能力,培养创新思维。
三、实习内容1. 蓝牙小车系统设计(1)硬件设计蓝牙小车硬件主要包括以下部分:1)单片机:选用STC89C52单片机作为核心控制器;2)蓝牙模块:选用HC-05蓝牙模块,实现手机与单片机的无线通信;3)驱动电路:采用L298N电机驱动器,驱动两个直流电机;4)传感器模块:包括红外传感器、超声波传感器、光电传感器等,用于检测小车周围环境;5)其他元件:如电源模块、按键、蜂鸣器等。
(2)软件设计蓝牙小车软件设计主要包括以下部分:1)主程序:初始化蓝牙模块、传感器模块、电机驱动器,实现小车的基本功能;2)蓝牙通信模块:实现手机与单片机的数据传输,控制小车前进、后退、左转、右转等功能;3)传感器数据处理模块:对传感器采集到的数据进行处理,实现避障、循迹等功能;4)电机控制模块:根据蓝牙接收到的指令和传感器数据处理结果,控制电机转速,实现小车运动。
2. 蓝牙小车功能实现(1)蓝牙控制通过蓝牙模块,用户可以使用手机发送指令,实现小车的前进、后退、左转、右转等功能。
具体操作如下:1)连接蓝牙:打开手机蓝牙功能,搜索并连接HC-05蓝牙模块;2)发送指令:在手机上输入相应的指令(如“前进”、“后退”等),蓝牙模块将指令发送给单片机;3)执行指令:单片机接收到指令后,控制电机驱动器,使小车按照指令进行运动。
(2)避障功能当小车遇到障碍物时,超声波传感器会检测到障碍物距离,并将距离信息发送给单片机。
单片机根据距离信息,控制小车进行避障。
具体实现如下:1)检测障碍物距离:超声波传感器发射超声波,当超声波遇到障碍物反射回来时,计算反射时间,得到障碍物距离;2)判断障碍物距离:根据预设的距离阈值,判断是否需要避障;3)控制小车运动:如果需要避障,单片机控制小车进行相应的转向,绕过障碍物。
单片机蓝牙小车实习报告

一、实习背景随着科技的发展,单片机技术得到了广泛应用。
为了提高自己的动手能力,拓宽知识面,我们选择了单片机蓝牙小车作为实习项目。
本项目旨在利用单片机技术,通过蓝牙通信实现小车的无线遥控,使其具备基本移动和避障功能。
二、实习目的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. 为今后的学习和工作打下了基础。
六、实习总结通过本次单片机蓝牙小车实习,我们深刻体会到理论与实践相结合的重要性。
蓝牙控制小车实习报告

实习报告一、实习背景随着科技的不断发展,无线通信技术在人们的生活中扮演着越来越重要的角色。
蓝牙作为一种无线通信技术,已经广泛应用于各种设备之间的高速数据交换。
本次实习,我选择了蓝牙控制小车这一课题,旨在掌握蓝牙通信技术,并将其应用于实际项目中。
二、实习目的1. 学习蓝牙通信原理,了解蓝牙模块的工作原理及应用。
2. 掌握单片机编程技术,实现对小车的远程控制。
3. 培养动手实践能力和团队协作精神。
三、实习内容1. 蓝牙模块选型:根据项目需求,选择合适的蓝牙模块,本实习选用HC-05蓝牙模块。
2. 硬件设计:设计小车硬件电路,包括蓝牙模块、单片机、电机驱动模块等。
3. 软件设计:编写单片机程序,实现对小车的远程控制。
4. 系统调试:对整个系统进行调试,确保蓝牙通信稳定,小车运行正常。
四、实习过程1. 蓝牙模块选型:通过查阅资料,了解HC-05蓝牙模块的性能参数,确认其符合项目需求。
2. 硬件设计:(1)搭建小车骨架,选用四轮驱动结构。
(2)将蓝牙模块、单片机、电机驱动模块等元器件固定在小车上。
(3)连接电源模块,为蓝牙模块、单片机等提供电源。
(4)连接电机驱动模块,实现对小车的驱动。
3. 软件设计:(1)学习单片机编程原理,掌握Keil、Proteus等软件的使用。
(2)编写单片机程序,实现对小车的远程控制。
(3)通过HC-05蓝牙模块,实现手机与单片机的通信。
4. 系统调试:(1)对蓝牙模块进行配对,确保手机与单片机通信正常。
(2)通过手机APP发送控制指令,观察小车响应情况。
(3)调整电机驱动模块,使小车运行稳定。
五、实习成果通过本次实习,我成功实现了用蓝牙控制小车的研究目标,掌握了蓝牙通信技术,并将其应用于实际项目中。
在实习过程中,我学会了单片机编程技术,提高了动手实践能力和团队协作精神。
六、实习总结本次实习让我对蓝牙通信技术和单片机编程有了更深入的了解,锻炼了我的实践能力。
同时,我也认识到无线通信技术在未来的广泛应用,以及其在智能家居、智能交通等领域的重要性。
手机蓝牙控制小车_嵌入式实验报告

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

wifi智能小车实训报告一、实训内容概述为了更好地培养我们计算机科学与技术专业的学生的实际操作能力,我们学校开展了一次为期一个月的Wifi智能小车实训。
该实训旨在通过设计并组装Wifi智能小车来锻炼同学们的动手能力和技术能力,同时也为同学们提供了一个了解物联网相关技术的机会。
二、实训过程详述1、选购器材在实训之前,我们需要先选购实验所需的器材。
其中包括Wifi模块、HC-SR04距离传感器、小车底盘、直流电机、轮子等材料。
我们采购时不仅需要关注价格,同时也需要注意品质和适配程度,以保证实训顺利进行。
2、组装小车底盘我们首先要组装小车底组,这就需要将小车底盘、直流电机和轮子等器材放在一起进行组装。
这一步需要大家仔细阅读说明书,并在老师的指导下逐步进行。
3、添加HC-SR04距离传感器为了使小车具备自主避障能力,我们需要为小车添加 HC-SR04距离传感器。
至于如何添加,就需要我们具备一定的编程开发知识,老师为我们介绍了 Arduino IDE 和 MicroPython 两种编程工具。
4、编写程序代码在添加完传感器之后,接下来就要编写程序了。
代码的编写包含了两个部分,一个是确定小车的移动方向和速度,并通过串口监视器将数据实时传输到电脑端;另外一个部分是实现HC-SR04距离传感器的功能,保证小车能够自主避障。
5、本地测试和远程调试经过以上步骤,我们可以在本地使用电脑的串口通信端口来测试小车的各项功能。
当测试通过后,我们就可以将代码迁移到ESP8266 Wifi 模块中进行远程调试。
这意味着我们可以通过手机等电子设备操作小车,并进行观察调试。
三、实训成效总结通过本次实训,我们不仅学会了组装小车、添加传感器和编写程序代码等技能,还了解了IoT物联网相关知识。
在实验过程中,我们遇到了一些组装困难、调试难度大等问题,经过不断尝试,最终成功解决了问题。
整个过程让我们切实感受到了科技带给我们的便利和乐趣,进一步增强了我们对于计算机技术的热爱。
电子工程训练报告

大连理工大学本科实验报告题目:基于STC51单片机的蓝牙遥控小车课程名称:电子工程训练学院(系):信息与通信工程学院专业:电子信息工程班级:电子1303学号:*********实验序号:21学生姓名:**成绩:2016年11 月19 日成绩评定电子安装实验室安全守则1、每次实验前,认真预习准备,仔细阅读实验安全守则,严格按照安全规范进行实验,确保实验安全;2、桌面要保持整洁,不允许有杂物,禁止将水杯、瓶装水放在桌面;3、电烙铁在使用前,必须检查电源线有无烫损漏线情况,一经发现,立即找老师进行安全处理;4、电烙铁长时间不使用,应将电源线拔掉;电烙铁使用后,应放回烙铁架中,以免烫伤物品;5、实验结束后,必须拔掉电烙铁的电源线;已经加热的电烙铁,必须冷却后再放入抽屉中;6、焊锡中含铅,不要含在口中,实验结束后要洗手;7、稳压电源在使用前,应先调好要使用的电压,再进行线路连接,并确保连接的极性正确;8、抢救触电人员时,应首先切断电源或用绝缘物体挑开电源线,使触电者脱离电源,千万不要用手拖拉触电人员,以免连环触电;9、实验结束后,必须关闭桌面电源开关,将桌面收拾干净,工具物品整理好。
题目:基于STC51单片机的蓝牙遥控小车1 设计要求以STC51单片机为主控芯片,设计并完成一个利用蓝牙通信,可以通过手机蓝牙进行遥控控制的小车系统,并伴随音乐播放,具体包含以下几个基本功能模块:(1)电源电路(9V AC - 5V DC)(2)IAP15K4W58S4单片机主控模块(3)L298N双H桥驱动模块(4)LCD1602显示模块(5)蓝牙通信模块(6)ISD1820音乐播放模块2 设计分析及系统方案设计主控芯片为STC公司的IAP15K4W58S4型号51单片机,小车的轮子是利用两个直流电机作为驱动,可以通过给直流电机提供脉冲信号来驱动它,脉冲信号的占空比可以影响到直流电机的平均速度,因此可以通过调整占空比从而能实现调速的目的(PWM调速)。
蓝牙小车课程设计结论

蓝牙小车课程设计结论一、教学目标本课程旨在通过学习蓝牙小车的设计与制作,使学生掌握蓝牙技术的基本原理,培养学生的动手实践能力和创新能力。
具体的教学目标包括:知识目标:使学生了解蓝牙技术的工作原理、基本协议和应用场景;掌握蓝牙模块的选型和接入方法;了解电子电路的基本知识。
技能目标:培养学生使用编程语言进行蓝牙通讯编程的能力;培养学生进行电子电路设计与制作的能力;培养学生解决实际问题的能力。
情感态度价值观目标:培养学生对科技创新的热爱,提高学生的问题解决能力,培养学生的团队合作精神。
二、教学内容本课程的教学内容主要包括蓝牙技术的基本原理、蓝牙模块的接入与编程、电子电路设计与制作等。
具体的教学内容安排如下:第一章:蓝牙技术概述介绍蓝牙技术的发展历程、工作原理和应用场景。
第二章:蓝牙模块的接入与编程讲解如何选择合适的蓝牙模块,并通过编程实现蓝牙通讯。
第三章:电子电路设计与制作介绍电子电路的基本知识,并通过实例讲解如何设计并制作电子电路。
第四章:蓝牙小车的设计与制作综合运用前面所学的知识,设计并制作一个蓝牙小车。
三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括:讲授法:用于讲解蓝牙技术的基本原理和电子电路的基本知识;实验法:用于培养学生的动手实践能力,通过实际操作来加深对知识的理解;小组讨论法:用于培养学生的团队合作精神,通过小组合作完成蓝牙小车的设计与制作。
四、教学资源为了支持教学,我们将提供以下教学资源:教材:《蓝牙技术手册》参考书:《蓝牙编程与应用》多媒体资料:相关的教学视频和PPT实验设备:蓝牙模块、电路元件、实验板等。
五、教学评估为了全面、客观地评估学生在蓝牙小车课程中的学习成果,我们将采取以下评估方式:1.平时表现:通过观察学生在课堂上的参与程度、提问回答情况以及团队合作表现来评估学生的学习态度和积极性。
2.作业:布置与课程内容相关的作业,评估学生对知识的理解和应用能力。
3.实验报告:通过评估学生在实验过程中的设计思路、实验结果和问题解决能力来衡量其动手实践能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:基于STC15W4K32S4的蓝牙智能小车课程名称:学院(系):专业:班级:学号:实验序号:学生姓名:成绩:2016 年11月4日成绩评定电子安装实验室安全守则(请在下一页手抄一份安全守则)1、每次实验前,认真预习准备,仔细阅读实验安全守则,严格按照安全规范进行实验,确保实验安全;2、桌面要保持整洁,不允许有杂物,禁止将水杯、瓶装水放在桌面;3、电烙铁在使用前,必须检查电源线有无烫损漏线情况,一经发现,立即找老师进行安全处理;4、电烙铁长时间不使用,应将电源线拔掉;电烙铁使用后,应放回烙铁架中,以免烫伤物品;5、实验结束后,必须拔掉电烙铁的电源线;已经加热的电烙铁,必须冷却后再放入抽屉中;6、焊锡中含铅,不要含在口中,实验结束后要洗手;7、稳压电源在使用前,应先调好要使用的电压,再进行线路连接,并确保连接的极性正确;8、抢救触电人员时,应首先切断电源或用绝缘物体挑开电源线,使触电者脱离电源,千万不要用手拖拉触电人员,以免连环触电;9、实验结束后,必须关闭桌面电源开关,将桌面收拾干净,工具物品整理好。
题目:1 设计要求以STC15W4K32S4单片机为核心,设计焊接并且调试一个实际的单片机控制系统,通过蓝牙实现用手机控制小车的动作状态。
(一)焊接:在实现基本功能的前提下焊接好设计的系统,尽量使其稳定焊点稳定,焊接美观。
(二)最小系统与电源:利用7505稳压芯片实现输入电压转为五伏稳压电源输出。
(三)功能实现:实现用手机自制app或者蓝牙串口助手控制小车前进方向以及行驶速度。
2 设计分析及系统方案设计围绕STC15W4K32S4单片机,把系统的设计规划分为两部分硬件部分:(一)设计并且绘制原理图(二)按照原理图焊接电路板软件部分:(一)编写实验程序(二)系统调试将单片机的p0口用于驱动lcd1602,p4.5,p2.7,p2.3,p2.2用于输出pwm控制电机。
P3.0与p3.1用于与主机通信并且用于蓝牙串口通信。
3 各功能模块硬件电路设计(一)最小系统由于STC15W4K32S4的性能已经进行了优化,所以不同于以往所接触的单片机,它的晶振已经集成化,不用再搭建最小系统电路。
(二)电源电路将输入电压转为5v稳压电源输出(三)LCD液晶屏电路使用P1.0~P1.7与D0~D7相接,EN,RW,RS分别与P0.7,P0.6,P0.5相接(四)蓝牙与单片机连接这里直接用P3.0,P3.1与主机的串口通信和与蓝牙共用串口。
(五)LN298模块4 系统软件设计#include "reg51.h"#include "intrins.h"#include "stdio.h"#include "stdlib.h"#define MAIN_Fosc 11059200L //定义主时钟/************* 变量声明**************/typedef unsigned char u8;typedef unsigned int u16;typedef unsigned long u32;typedef unsigned char BYTE;typedef unsigned int WORD;#define uchar unsigned char#define uint unsigned int#define elif else if#define PWMC (*(unsigned int volatile xdata *)0xfff0) #define PWMCH (*(unsigned char volatile xdata *)0xfff0) #define PWMCL (*(unsigned char volatile xdata *)0xfff1) #define PWMCKS (*(unsigned char volatile xdata *)0xfff2) #define PWM2T1 (*(unsigned int volatile xdata *)0xff00) #define PWM2T1H (*(unsigned char volatile xdata *)0xff00) #define PWM2T1L (*(unsigned char volatile xdata *)0xff01) #define PWM2T2 (*(unsigned int volatile xdata *)0xff02) #define PWM2T2H (*(unsigned char volatile xdata *)0xff02) #define PWM2T2L (*(unsigned char volatile xdata *)0xff03) #define PWM2CR (*(unsigned char volatile xdata *)0xff04) #define PWM3T1 (*(unsigned int volatile xdata *)0xff10) #define PWM3T1H (*(unsigned char volatile xdata *)0xff10) #define PWM3T1L (*(unsigned char volatile xdata *)0xff11) #define PWM3T2 (*(unsigned int volatile xdata *)0xff12) #define PWM3T2H (*(unsigned char volatile xdata *)0xff12)#define PWM3T2L (*(unsigned char volatile xdata *)0xff13) #define PWM3CR (*(unsigned char volatile xdata *)0xff14) #define PWM4T1 (*(unsigned int volatile xdata *)0xff20) #define PWM4T1H (*(unsigned char volatile xdata *)0xff20) #define PWM4T1L (*(unsigned char volatile xdata *)0xff21) #define PWM4T2 (*(unsigned int volatile xdata *)0xff22) #define PWM4T2H (*(unsigned char volatile xdata *)0xff22) #define PWM4T2L (*(unsigned char volatile xdata *)0xff23) #define PWM4CR (*(unsigned char volatile xdata *)0xff24) #define PWM5T1 (*(unsigned int volatile xdata *)0xff30) #define PWM5T1H (*(unsigned char volatile xdata *)0xff30) #define PWM5T1L (*(unsigned char volatile xdata *)0xff31) #define PWM5T2 (*(unsigned int volatile xdata *)0xff32) #define PWM5T2H (*(unsigned char volatile xdata *)0xff32) #define PWM5T2L (*(unsigned char volatile xdata *)0xff33) #define PWM5CR (*(unsigned char volatile xdata *)0xff34) #define PWM6T1 (*(unsigned int volatile xdata *)0xff40) #define PWM6T1H (*(unsigned char volatile xdata *)0xff40) #define PWM6T1L (*(unsigned char volatile xdata *)0xff41) #define PWM6T2 (*(unsigned int volatile xdata *)0xff42) #define PWM6T2H (*(unsigned char volatile xdata *)0xff42) #define PWM6T2L (*(unsigned char volatile xdata *)0xff43) #define PWM6CR (*(unsigned char volatile xdata *)0xff44) #define PWM7T1 (*(unsigned int volatile xdata *)0xff50) #define PWM7T1H (*(unsigned char volatile xdata *)0xff50) #define PWM7T1L (*(unsigned char volatile xdata *)0xff51) #define PWM7T2 (*(unsigned int volatile xdata *)0xff52) #define PWM7T2H (*(unsigned char volatile xdata *)0xff52) #define PWM7T2L (*(unsigned char volatile xdata *)0xff53) #define PWM7CR (*(unsigned char volatile xdata *)0xff54) sfr PWMCFG = 0xf1;sfr PWMCR = 0xf5;sfr PWMIF = 0xf6;sfr PWMFDCR = 0xf7;sfr TH2 = 0xD6;sfr TL2 = 0xD7;sfr IE2 = 0xAF;sfr INT_CLKO = 0x8F;sfr AUXR = 0x8E;sfr AUXR1 = 0xA2;sfr P_SW1 = 0xA2;sfr P_SW2 = 0xBA;sfr PIN_SW2 =0xBA;sfr S2CON = 0x9A;sfr S2BUF = 0x9B;sfr P4 = 0xC0;sfr P5 = 0xC8;sfr P6 = 0xE8;sfr P7 = 0xF8;sfr P1M1 = 0x91; //PxM1.n,PxM0.n =00--->Standard, 01--->push-pull sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain sfr P0M1 = 0x93;sfr P0M0 = 0x94;sfr P2M1 = 0x95;sfr P2M0 = 0x96;sfr P3M1 = 0xB1;sfr P3M0 = 0xB2;sfr P4M1 = 0xB3;sfr P4M0 = 0xB4;sfr P5M1 = 0xC9;sfr P5M0 = 0xCA;sfr P6M1 = 0xCB;sfr P6M0 = 0xCC;sfr P7M1 = 0xE1;sfr P7M0 = 0xE2;sbit P00 = P0^0;sbit P01 = P0^1;sbit P02 = P0^2;sbit P03 = P0^3;sbit P04 = P0^4;sbit P05 = P0^5;sbit P06 = P0^6;sbit P07 = P0^7;sbit P10 = P1^0;sbit P11 = P1^1;sbit P12 = P1^2;sbit P13 = P1^3;sbit P14 = P1^4;sbit P15 = P1^5;sbit P16 = P1^6;sbit P17 = P1^7;sbit P20 = P2^0;sbit P21 = P2^1;sbit P22 = P2^2;sbit P23 = P2^3;sbit P24 = P2^4;sbit P25 = P2^5;sbit P26 = P2^6;sbit P27 = P2^7;sbit P30 = P3^0;sbit P31 = P3^1;sbit P32 = P3^2;sbit P33 = P3^3;sbit P34 = P3^4;sbit P35 = P3^5;sbit P36 = P3^6;sbit P37 = P3^7;sbit P40 = P4^0;sbit P41 = P4^1;sbit P42 = P4^2;sbit P43 = P4^3;sbit P44 = P4^4;sbit P45 = P4^5;sbit P46 = P4^6;sbit P47 = P4^7;sbit P50 = P5^0;sbit P51 = P5^1;sbit P52 = P5^2;sbit P53 = P5^3;sbit P54 = P5^4;sbit P55 = P5^5;sbit P56 = P5^6;sbit P57 = P5^7;/************* 收发定义**************/#define Baudrate1 9600L //波特率#define UART1_BUF_LENGTH 32u8 TX1_Cnt; //发送计数u8 RX1_Cnt; //接收计数bit B_TX1_Busy; //发送忙标志void UART1_config(u8 brt); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.void PrintString1(u8 *puts);u8 idata RX1_Buffer[UART1_BUF_LENGTH]; //接收缓冲/************* IO口定义**************/sbit P_HC595_SER = P4^0; //pin 14 SER data inputsbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock/************* 本地变量声明**************/void delay_ms(u8 ms);void DisableHC595(void);void Initialize_LCD(void);void Write_AC(u8 hang,u8 lie);void Write_DIS_Data(u8 DIS_Data);void ClearLine(u8 row);u8 BIN_ASCII(u8 tmp);void PutString(u8 row, u8 column, u8 *puts);void WriteChar(u8 row, u8 column, u8 dat);/************* 变量声明**************/#define CYCLE 0x1000L //定义PWM周期(最大值为32767)u8 DirLeft[15]={"Dir Left"};u8 DirRight[15]={"Dir Right"};u8 DirUp[15]={"Dir Up"};u8 DirDown[15]={"Dir Down"};u8 HSpeed[15]={"Speed Normal"};u8 NSpeed[15]={"Speed Hight"};int flag = 0;sbit Pdir1 =P2^1;sbit Pdir2 =P2^2;sbit Pfir1 =P2^3;sbit Pfir2 =P2^7;void IoInit(void);void SendMegBack(void);void ENpwm(WORD DUTY1,WORD DUTY2,WORD outch,WORD outen);void closepwm();WORD Speed1=75L;WORD Speed2=80L;WORD Fspeed1=75l;WORD Fspeed2=80L;bit Dir=0;//===========================================void main(void){IoInit(); //初始化端口Initialize_LCD();//初始化端口lcdUART1_config(1); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.EA = 1; //允许总中断while(1){flag=SBUF;SendMegBack();switch(flag){case '0': ClearLine(1);PutString(1,0,DirLeft);Fspeed1=Speed1;Fspeed2=18*Speed2/32;break;case '1': ClearLine(1);PutString(1,0,DirRight);Fspeed1=19*Speed1/32;Fspeed2=Speed2;break;case '2': ClearLine(1);PutString(1,0,DirUp);Fspeed1=Speed1;Fspeed2=Speed2;Dir=0;break;case '3': ClearLine(1);PutString(1,0,DirDown);Fspeed1=Speed1;Fspeed2=Speed2;Dir=1;break;case '4': ClearLine(0);PutString(0,0,NSpeed);Speed1=95L;Speed2=100L;Fspeed1=Speed1;Fspeed2=Speed2;break;case '5': ClearLine(0);PutString(0,0,HSpeed);Speed1=75L;Speed2=80L;Fspeed1=Speed1;Fspeed2=Speed2;break;case '6': ClearLine(0);PutString(0,0,NSpeed);Speed1=Speed1-2l;Speed2=Speed2-2l;Fspeed1=Speed1;Fspeed2=Speed2;break;case '7': ClearLine(0);PutString(0,0,NSpeed);Speed1=Speed1+2l;Speed2=Speed2+2l;Fspeed1=Speed1;Fspeed2=Speed2;break;default: ClearLine(0);PutString(0,0,HSpeed);Speed1=75L;Speed2=80L;Fspeed1=Speed1;Fspeed2=Speed2;break;}if(Dir==0){ENpwm(Fspeed1,Fspeed2,0x00,0x0a);Pdir2=0;Pfir2=0;}else{ENpwm(Fspeed1,Fspeed2,0x00,0x05);Pdir1=0;Pfir1=0;}delay_ms(20);}}/**********************************************/void IoInit(void){P0M1 = 0; P0M0 = 0; //设置为准双向口P1M1 = 0; P1M0 = 0; //设置为准双向口P2M1 = 0; P2M0 = 0; //设置为准双向口P3M1 = 0; P3M0 = 0; //设置为准双向口P4M1 = 0; P4M0 = 0; //设置为准双向口P5M1 = 0; P5M0 = 0; //设置为准双向口P6M1 = 0; P6M0 = 0; //设置为准双向口P7M1 = 0; P7M0 = 0; //设置为准双向口}void SendMegBack(void){if((TX1_Cnt != RX1_Cnt) && (!B_TX1_Busy)) //收到数据, 发送空闲SBUF = RX1_Buffer[TX1_Cnt]; //把收到的数据远样返回B_TX1_Busy = 1;if(++TX1_Cnt >= UART1_BUF_LENGTH) TX1_Cnt = 0;}void ENpwm(WORD DUTY1,WORD DUTY2,WORD outch,WORD outen){PIN_SW2 |= 0x80; //使能访问XSFRPWMCFG = 0x00; //配置PWM的输出初始电平为低电平PWMCKS = 0x00; //选择PWM的时钟为Fosc/(0+1)PWMC = CYCLE; //设置PWM周期PWM3T1 = CYCLE * DUTY1/ 100; //设置PWM2第1次反转的PWM计数PWM4T1 = CYCLE * DUTY1/ 100; //设置PWM2第2次反转的PWM计数PWM5T1 = CYCLE * DUTY2 / 100; //设置PWM3第1次反转的PWM计数PWM2T2 =CYCLE * DUTY1/ 100 ; //设置PWM3第2次反转的PWM计数PWM2CR = 0x08; //选择PWM2输出引脚,不使能PWM2中断PWM3CR = 0x00;PWM4CR = 0x00;PWM5CR = 0x00;PWMCR = outen; //使能PWM信号输出PWMCR |= 0x80; //使能PWM模块PIN_SW2 &= ~0x80; //占空比为(PWM2T2-PWM2T1)/PWMC }void closepwm(){PIN_SW2 |= 0x80; //使能访问XSFRPWMCR = 0x00; //使能PWM信号输出PWMCR |= 0x80; //使能PWM模块PIN_SW2 &= ~0x80;Pfir1=0;Pfir2=0;Pdir1=0;Pdir2=0;}void delay_ms(u8 ms){unsigned int i;do{i = MAIN_Fosc / 13000;while(--i) ; //14T per loop}while(--ms);}void DisableHC595(void){u8 i;P_HC595_SER = 1;for(i=0; i<20; i++){P_HC595_SRCLK = 1;P_HC595_SRCLK = 0;}P_HC595_RCLK = 1;P_HC595_RCLK = 0; //锁存输出数据P_HC595_RCLK = 1;P_HC595_RCLK = 0; //锁存输出数据}// 函数: void RTC(void)// 描述: RTC演示函数// 参数: none.// 返回: none.// 版本: VER1.0// 日期: 2013-4-1// 备注://============================================================ ============/************* LCD1602相关程序*****************************************************///8位数据访问方式LCD1602 标准程序梁工编写2014-2-21#define LineLength 16 //16x2/************* Pin define *****************************************************/sfr LCD_BUS = 0x90; //P0--0x80, P1--0x90, P2--0xA0, P3--0xB0sbit LCD_B7 = LCD_BUS^7; //D7 -- Pin 14 LED- -- Pin 16sbit LCD_B6 = LCD_BUS^6; //D6 -- Pin 13 LED+ -- Pin 15sbit LCD_B5 = LCD_BUS^5; //D5 -- Pin 12 V o -- Pin 3sbit LCD_B4 = LCD_BUS^4; //D4 -- Pin 11 VDD -- Pin 2sbit LCD_B3 = LCD_BUS^3; //D3 -- Pin 10 VSS -- Pin 1sbit LCD_B2 = LCD_BUS^2; //D2 -- Pin 9sbit LCD_B1 = LCD_BUS^1; //D1 -- Pin 8sbit LCD_B0 = LCD_BUS^0; //D0 -- Pin 7sbit LCD_ENA = P0^7; //Pin 6sbit LCD_RW = P0^6; //Pin 5 //LCD_RS R/W DB7--DB0 FOUNCTIONsbit LCD_RS = P0^5; //Pin 4 // 0 0 INPUT write the command to LCD model// 0 1 OUTPUT read BF and AC pointer from LCD model// 1 0 INPUT write the data to LCD model// 1 1 OUTPUT read the data from LCD model/*total 2 lines, 16x2= 32first line address: 0~15second line address: 64~79*/#define C_CLEAR 0x01 //clear LCD#define C_HOME 0x02 //cursor go home#define C_CUR_L 0x04 //cursor shift left after input#define C_RIGHT 0x05 //picture shift right after input#define C_CUR_R 0x06 //cursor shift right after input#define C_LEFT 0x07 //picture shift left after input#define C_OFF 0x08 //turn off LCD#define C_ON 0x0C //turn on LCD#define C_FLASH 0x0D //turn on LCD, flash#define C_CURSOR 0x0E //turn on LCD and cursor#define C_FLASH_ALL 0x0F //turn on LCD and cursor, flash#define C_CURSOR_LEFT 0x10 //single cursor shift left#define C_CURSOR_RIGHT 0x10 //single cursor shift right#define C_PICTURE_LEFT 0x10 //single picture shift left#define C_PICTURE_RIGHT 0x10 //single picture shift right#define C_BIT8 0x30 //set the data is 8 bits#define C_BIT4 0x20 //set the data is 4 bits#define C_L1DOT7 0x30 //8 bits,one line 5*7 dots#define C_L1DOT10 0x34 //8 bits,one line 5*10 dots#define C_L2DOT7 0x38 //8 bits,tow lines 5*7 dots#define C_4bitL2DOT7 0x28 //4 bits,tow lines 5*7 dots#define C_CGADDRESS0 0x40 //CGRAM address0 (addr=40H+x)#define C_DDADDRESS0 0x80 //DDRAM address0 (addr=80H+x)#define LCD_DelayNop() _nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();\_nop_();#define LCD_BusData(dat) LCD_BUS = dat//============================================================ void CheckBusy(void){u16 i;for(i=0; i<5000; i++) {if(!LCD_B7) break;} //check the LCD busy or not. With time out// while(LCD_B7); //check the LCD busy or not. Without time out}void IniSendCMD(u8 cmd){LCD_RW = 0;LCD_BusData(cmd);LCD_DelayNop();LCD_ENA = 1;LCD_DelayNop();LCD_ENA = 0;LCD_BusData(0xff);}void Write_CMD(u8 cmd){LCD_RS = 0;LCD_RW = 1;LCD_BusData(0xff);LCD_DelayNop();LCD_ENA = 1;CheckBusy(); //check the LCD busy or not.LCD_ENA = 0;LCD_RW = 0;LCD_BusData(cmd);LCD_DelayNop();LCD_ENA = 1;LCD_DelayNop();LCD_ENA = 0;LCD_BusData(0xff);}void Write_DIS_Data(u8 dat){LCD_RS = 0;LCD_RW = 1;LCD_BusData(0xff);LCD_DelayNop();LCD_ENA = 1;CheckBusy(); //check the LCD busy or not.LCD_ENA = 0;LCD_RW = 0;LCD_RS = 1;LCD_BusData(dat);LCD_DelayNop();LCD_ENA = 1;LCD_DelayNop();LCD_ENA = 0;LCD_BusData(0xff);}void Initialize_LCD(void){LCD_ENA = 0;LCD_RS = 0;LCD_RW = 0;delay_ms(100);IniSendCMD(C_BIT8); //set the data is 8 bitsdelay_ms(10);Write_CMD(C_L2DOT7); //tow lines 5*7 dots delay_ms(6);Write_CMD(C_CLEAR); //clear LCD RAMWrite_CMD(C_CUR_R); //Curror Shift RightWrite_CMD(C_ON); //turn on LCD}void ClearLine(u8 row){u8 i;Write_CMD(((row & 1) << 6) | 0x80);for(i=0; i<LineLength; i++) Write_DIS_Data(' ');}void WriteChar(u8 row, u8 column, u8 dat){Write_CMD((((row & 1) << 6) + column) | 0x80);Write_DIS_Data(dat);}void PutString(u8 row, u8 column, u8 *puts){Write_CMD((((row & 1) << 6) + column) | 0x80);for ( ; *puts != 0; puts++) //遇到停止符0结束{Write_DIS_Data(*puts);if(++column >= LineLength) break;}}//******************** LCD20 Module END *************************** //******************** 串口部分***************************//============================================================ ============// 函数: void PrintString1(u8 *puts)// 描述: 串口1发送字符串函数。