机器人辅助C程序设计pdf/doc/txt格式电子书下载
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询
书名:机器人辅助C程序设计pdf/doc/txt格式电子书下载
推荐语:
作者:秦志强,高建东,王淑鸿
出版社:电子工业出版社
出版时间:2013-08-01
书籍编号:30467370
ISBN:9787121205101
正文语种:中文
字数:75377
版次:1
所属分类:教材教辅-大学
版权信息
书名:机器人辅助C程序设计
作者:秦志强 高建东 王淑鸿
ISBN:9787121205101
版权所有 · 侵权必究
前言
C程序设计课程是当前大多数工程专业的第一门专业基础课程,几乎所有的工科学生都要学习C程序设计,以便为后续的专业课程学习打下基础。这门课程学不好,后续专业课程的学习也会大打折扣,影响整个专业课程的学习。目前的现状是,每年几千万的学生在学习C程序设计,但是仍然满足不了社会对合格软件工程师的迫切需求。
传统的C程序设计教材和C语言教学方法,基本上都是围绕科学计算和算法设计展开,教学的目标是建立知识体系。这种教学方法的教学效果越来越不能满足当今工程教育的需要,尤其是对于未来希望从事嵌入式系统设计或者自动化系统设计的学生和个人而言。
学习C语言是为了用C语言编写程序去解决问题,这种程序编写能力只有从程序设计实践中才能迅速获得,理论的讲解过多,不仅对学习C程序设计无益,甚至还会让学生滋生厌烦情绪。当然,只单纯地编写程序也无法获得真正的能力,关键是如何从不断的程序设计实践中,归纳出共性程序设计知识和关键技能,建立起分析问题和解决问题的知识和技能模型,然后再将这些知识和技能重新应用到新的程序设计实践中去,才能达到学习的最终目的。这也是当今的大学生要在未来的实际工作(无论是在企业研发还是在高校做研究)中所必须采取的学习和工作方法。因此,如何从一进入大学开始,就学习和掌握这种自我学习和提高的方法,是高等工程教育改革的根本目标。
本书的编写始终围绕典型的机器人制作项目展开,按照“任务实践-技能归纳-学习总结-项目再实践”的学习模式设计一系列循序渐进的学习实践项目,突破了传统的“课堂理论+上机实验”的传统学习模式,同时引进各种教学竞赛项目代替传统的考试,激发学习兴趣,实现“做中学、学中赛、赛中会”,最终帮助学习者建立起应用C语言进行程序设计的知识和技能体系,并获得实际的程序设计技能。
通过本书的学习实践掌握了单片机C语言的编程技能后,后续的单片机课程学习就变得相对简单快捷。与本书配套的单片机后续书籍将重点介绍如何利用单片机设计编写出更高效的程序,扩展更多的外设,并学习如何设计出自己的硬件系统。
本书的内容从2011年起在北京石油化工学院信息学院一年级学生中试点教学,3年的教学实践证明,利用单片机机器人辅助C程序设计课程教学,深受学生欢迎,而且能够提高学生应对未来专业实践课程的兴趣和信心。
本书可作为C程序设计的入门学习用书,尤其适合希望学习嵌入式系统设计的工程师和爱好者使用。学习的过程必须配套相应的硬件器材方能达到最佳的学习效果。这些器材的清单在本书的附录里有详细的说明。
编者
2013年7月
第一部分 基本技能学习和实践
第1讲 一种新的C语言学习方式
学习背景
C语言已经成为国内外广泛使用的一种计算机语言,几乎成为了工程学科的圣经,每个工程专业都将C语言作为必修的计算机课程。确实,C语言功能强大、使用灵活方便、应用面广、目标程序执行效率高、移植性好,既有高级语言的优点,又有低级语言的功能,特别适合编写系统软件。然而,尽管以往的同学们都十分重视C语言的学习,并倾注了大量的学习时间,但学习效果却不尽人意。究其原因,可归结为以下几点:
① C语言作为第一门计算机语言课程,牵涉的概念广,规则多,过于灵活,对初学编程的人而言确实很困难。
② 教学方式不符合工程类课程的教学规律。C语言是一门工程应用工具课程,最佳的学习方式是边做边学,放到项目中学。而以往的教学方式是课堂讲授为主,上机实验为辅,是一种典型的应试型教学方式,学习是为了去考取等级证书。以往的许多同学即使考取了各种等级证书,但是一到工作中面对具体问题,就无从下手,更谈不上灵活运用了。
③ 编程实践和项目训练课时不够,现有实践项目各自独立,没有系统性。即使实践编写了几十个小型项目,由于缺乏各种知识点的融会贯通项目,并不能真正掌握C语言的应用开发能力。一个学生只有能够自主编写上千行程序的系统软件,才算是真正基本掌握了C语言程序设计能力。
④ 大多数的课程和教材仍旧以各种数学算法编程为主,枯燥无味,没有挑战性和竞技性,提不起大家的学习兴趣,学习效果自然大打折扣。
针对以上问题,本教材将单片机控制的机器人引入C语言学习课程,让同学们在给机器人的编程过程中学习C语言,边做边学,最后完成几个具有复杂功能的智能机器人,在课堂竞赛、校内竞赛和全国比赛项目使用这些智能机器人进行竞技和比赛,让C语言的学习变成一个快乐的体验和挑战过程,提升学习效率,达到事半功倍的效果。使用单片机作为机器人的控制平台和C语言学习平台有以下优点:
① 单片机资源相对计算机(PC)较少,适合编写系统软件,能够迅速深入到C语言的各种核心概念和规则。
② 现有单片机价格低廉,编程方便,能够与教学机器人和智能传感器迅速结合,有非常大的扩展性。能够迅速开发出各种有趣的程序。
③ 可以为后续学习单片机等嵌入式系统课程打下基础,实现无缝结合,迅速提升系统开发能力。
④ 机器人项目趣味性好,实战性强,能够吸引同学们的注意力,辅以竞技项目的刺激和挑战,可以大大提高学习的趣味性,学习效果自然倍增。
单片机和微控制器
一台能够工作的计算机包括CPU(Central Processing Unit,中央处理单元:进行运算、控制)、RAM(Random Access Memory,随机存储器:数据存储)、ROM(Read Only Memory,只读存储器:程序存储)、输入/输出设备(串行口、并行口等)。在个人计算机上,这些部分被分成若干块芯片或者插卡,安装在一个称为主板的印制线路板上。而在单片机中,这些部分全部被做在一块集成电路芯片中,因此被称为单片机。单片机真正需要工作时,还需要稳定的电源、晶振、外部存储器和编程调试接口,就像计算机,需要工作时,也需要电源、晶振、硬盘或其他大容量外部存储器和操作系统。微控制器就是将单片机独立工作所需的电源适配器、晶振、外部存储器和串口转换电路等部门封装到一个模块上,这样,微控制器就能够直接与计算机连接进行编程开发,无需任何其他的芯片和电路。
采用单片机微控制器作为C语言学习实践的目标硬件,能够迅速深入学习C语言的各种灵活功能,了解如何编写程序让单片机与外围设备和电路进行交互,掌握C语言程序设计的开发思路。现在可以使用的单片机种类和型号琳琅满目,如何选择一款性价比最优的单片机作为我们初次学习C语言的平台需要仔细考虑。本书为了迎合现阶段大学教学的现状需要,采用C51系列单片机作为机器人控制和学习平台。
MCS51是由美国INTEL公司生产的一系列单片机的总称。该系列单片机包括很多品种,如8031、8051、8751等。其中8051是最典型的产品,其他单片机都是在8051的基础上进行功能的增减和改变而来的,所以人们习惯用8051来称呼MCS51系列单片机。
Intel公司将MCS51的核心技术授权给了很多公司,许多公司都在做以8051为核心的单片机,功能或多或少有些改变,以满足不同的需求。其中较典型的一款单片机AT89C51(简称C51)是由美国ATMEL公司以8051为内核开发生产的。本书使用的AT89S52单片机就是在此基础上改进而来的。
AT89S52是一种高性能、低功耗的8位单片机,内含8KB ISP(In-system Programmable,系统在线编程)可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS51指令系统及其引脚结构。在实际工程应用中,功能强大的AT89S52已成为许多高性价比嵌入式控制应用系统的解决方案。
早期的单片机应用程序开发通常需要仿真机、编程器等配套工具,要配置这些工具需要一笔不小的投资。本书采用的AT89S52不需要仿真机和编程器,只需运用ISP电缆就可以对单片机的Flash反复擦写1000次以上,因此使用起来方便、简单,尤其适合初学者使用,配置十分灵活,可扩展性特别强。
In-system Programmable(ISP,系统在线编程)
In-system Programmable是指用户可把已编译好的程序代码通过一条“下载线”直接写入器件的编程(烧录)方法,已经编程的器件也可以用ISP方式擦除或再编程。ISP所用的“下载线”并非不需要成本,但相对于传统的“编程器”成本已经大大降低了。通常,Flash型芯片都具备ISP下载能力。
本书将引导读者如何使用C语言给AT89S52编程,使之成为机器人的大脑,控制机器人实现下述各种基本智能任务和综合竞赛任务:
① 人机对话,交换信息。
② 完成精确的运动轨迹。
③ 安装传感器,以探测周边环境。
④ 基于传感器信息做出决策。
⑤ 循线完成机器人游中国、智能搬运、擂台和灭火等任务。
通过这些任务的完成,同学们就可以在快乐的学习和挑战过程中,逐步掌握C语言程序设计技术和实践能力,轻松走上软件系统开发之路。
本书使用的C51单片机微控制器带有一个面包板,方便给机器人搭接各种传感器电路。同学们在动脑编程的过程中,还可以动手搭建电路,以做到手脑结合,相互促进。该电路板叫做51+AVR教学板,如图1-1所示。该教学板不仅可以用51单片机进行C语言编程学习,还可以用AVR单片机进行编程学习。(基于AVR单片机进行C语言编程学习,另有专门的学习教材。)本书使用的单片机微控制器只配备了AT89S52单片机。
图1-1 C51单片机教学板
正式开始本书的学习和实践前,读者需要获得51+AVR教学板套件,套件中包含了学习所需的几乎所有配件(后面会详细介绍)和配套软件光盘。该套件的唯一授权生产厂家为深圳市中科鸥鹏智能科技有限公司,可以从www.szopen.cn或者www.openirobot.com网站上与公司联系订购。
机器人与C语言学习平台
图1-2所示是本书使用的小型机器人平台,51+AVR教学板安装在机器人底盘上。本书以此机器人作为平台,辅以各种简单的传感器,编程实现机器人的各种基本智能,完成相应的智能任务。
图1-2 采用51+AVR教学板的机器人
下面通过以下步骤来安装和使用C51单片机的C语言编程开发环境,讲述用C语言开发第一个简单机器人程序,并在机器人上如何运行编写的这个程序。具体任务包括:
① 寻找并安装开发编程软件。
② 连接机器人到电池或者供电的电源。
③ 连接教学板ISP接口到计算机,以便编程。
④ 连接教学板串行接口到计算机,以便调试和交互。
⑤ 运用C语言编写第一个单片机程序,运用编译器编译生成可执行文件,下载到单片机,通过串口观察机器人单片机教学板的执行结果。
⑥ 完成后断开电源。
任务1 获得软件
本书的学习实践过程将反复用到3款软件:Keil uVision IDE集成开发环境、AVR_fighter下载编程软件和串口调试软件。
1.Keil uVision IDE集成开发环境
该软件是德国KEIL公司出品的51系列单片机C语言集成开发环境。(可以在KEIL公司的网站www.keil.com上获得该软件的安装包(本书使用2.38a版))。利用该开发环境,可以快捷、方便地建立面向各种单片机的C语言编程项目,编写C语言源程序,并将C程序编译和生成可下载到目标单片机的执行程序。
2.AVR_fighter单片机ISP下载编程软件
该软件是一款免费下载的ISP下载编程软件,不需要专门的安装即可使用,非常方便。使用该软件,读者可以将C语言程序生成的可执行文件下载到机器人单片机上。使用时需要1个USBASP下载器和1个计算机的USB接口。
3.串口调试软件
SerialDebugTool.exe是本书使用的串口调试软件。该软件提供单片机与计算机的交互信息窗口,包括显示单片机发给计算机的信息窗口和计算机发给单片机的数据输入窗口。在硬件上,计算机至少要有串行接口或USB接口来与单片机教学板的串口连接。
任务2 安装软件
现在,如果读者已从网站上获得了上述三个软件安装包或者拿到了配套的软件光盘,就可以开始安装软件了。软件的安装很简单,与安装其他软件过程一样。
安装Keil uVision2
(1)执行Keil uVision2安装程序,选择安装Eval Version版进行安装。
(2)在后续出现的窗口中全部选择Next按钮,将程序默认安装在C:\\Program Files\\Keil文件目录下。
(3)将配套光盘“头文件”文件夹中的文件复制到C:\\Program Files\\Keil\\C51\\INC文件夹中。
Keil uVision IDE软件安装到计算机上的同时,会在计算机桌面建立一个快捷方式。
AVR_fighter下载编程软件与SerialDebugTool.exe串口调试软件都不需要安装,只需要将教学板配套光盘中的这些软件复制到你的PC上即可。
为了方便实用,建议建立桌面子目录将这三个工具软件全部放到里面。
任务3 硬件连接
C51教学板需要连接电源来运行,同时需要连接到计算机,以便编程和交互。
串口的连接
教学板通过串口电缆连接到计算机(或笔记本电脑),以便与用户交互。如果计算机有串行接口,直接使用串口连接电缆。如果没有,此时需要使用USB转串口适配器,如图1-3所示。需要将该串口线一端的串口连接到机器人教学板上,另一端连接到计算机的USB接口上,并安装对应的USB驱动程序。因为51+AVR教学板上有两个串口(一个用来与51单片机交互,另一个用来与AVR单片机交互),注意选择与51单片机最近的那个串口。
USBASP下载器的连接
机器人程序通过连接到计算机的USBASP下载器来下载到教学板上的单片机内。图1-4为本书使用的USBASP下载器。下载器一端通过一根USB线连接到计算机的USB接口上,另一端(小端)连接到教学板的程序下载口上。
图1-3 USB转串口适配器
图1-4 USBASP下载器
电源的连接
为了方便和节约电池,在一般的编程和调试时,建议使用一个6V/2A的电源适配器给单片机教学板供电。当需要机器人进行自主运动或者进行比赛时,使用3.7V锂电池给机器人供电。将锂电池装入专门的电池盒时,注意按照里面标记的电池极性(“+”和“-”)方向装入。如果没有选配锂电池套件,也可以直接用4节5号干电池给机器人供电。
给教学板和单片机进行通电检查
教学底板上有一个三位开关(如图1-5所示),开关拨到“0”位时断开教学板电源。无论是否将电池组或者其他电源连接到教学底板上,只要三位开关位于“0”位,那么设备就处于关闭状态。
现在将三位开关由“0”位拨至“1”位,打开教学板电源,如图1-6所示。检查教学底板上绿色LED电源指示灯是否变亮。如果没有,检查电源适配器或者电池盒里的电池和电池盒的接头是否已经插到教学板的电源插座上。
图1-5 处于关闭状态的三位开关
图1-6 处于1位状态的三位开关
开关“2”将会在后续学习中用到。将开关拨至“2”后,电源不仅给教学板供电,同时会给机器人的执行机构——伺服电动机供电,同样,此时绿色LED电源指示灯仍然会变亮。
任务4 第一个程序
第一个C语言程序将告诉AT89S52单片机控制器,让它在执行程序时通过串口发送一条信息给计算机,在计算机的串口调试窗口中显示出来。
创建与编辑你的第一个程序
双击Keil uVision IDE的图标,启动Keil uVision IDE程序,会得到如图1-7所示的Keil uVision2 IDE的主界面。通过Project菜单中的New Project命令建立项目文件,过程如下。
图1-7 Keil uVision2 IDE的主界面
(1)单击Project菜单,会出现如图1-8所示的菜单画面,选择“New Project”,将出现如图1-9所示的对话框。
图1-8 Project菜单
图1-9 Create New Project对话框
(2)在文件名中输入“HelloRobot”,保存在你想保存的位置(如D:\\C语言程序设计\\程序),可不用加后缀名。单击“保存”按钮,会出现如图1-10所示的窗口。
(3)这里要求选择项目芯片的类型。Keil uVision2 IDE几乎支持所有的51核心单片机,并以列表的形式给出。本书使用的是ATMEL公司的AT89S52,在Keil uVision2 IDE提供的数据库(Data base)列表中找到此款芯片,然后单击“确定”按钮,会出现如图1-11所示的窗口,询问是否加载8051启动代码,在这里我们选择“否”,不加载。(如果选择“是”,对你的程序没有任何影响。若你感兴趣,可选择“是”,看看编译器加载了哪些代码。)之后在界面左侧会出现如图1-12所示窗口Project Workspace(项目工作空间),此时就得到了目标项目文件Target 1。
图1-10 单片机型号选择窗口
图1-11 是否加载8051启动代码提示窗口
图1-12 目标工程窗口
Target 1项目文件创建后,还只有一个框架,紧接着需要向项目文件中编辑添加源程序。Keil uVision2支持编写C语言程序。可以是已经建立好的C程序文件,也可以是新建的C程序文件。如果是添加建立好的C程序文件,则直接用后面的方法添加道项目中;如果是新建立编辑的C程序文件,则先将程序文件存盘后再添加。
单击按钮(或通过“File→New”操作),为该项目新建一个C语言程序文件,保存后弹出如图1-13所示的对话框,将文件保存在项目文件夹中(保存的源文件名称可以和项目名称一样,这样便于分别哪个源文件属于哪个项目。只是他们的扩展文件名不同),在文件类型中填写.c(这里.c为文件扩展名,表示此文件类型为C语言源文件),因为下面将采用C语言编写第一个程序。
图1-13 C语言源文件保存
第一个C程序:HelloRobot.c
将该例程输入Keil uVision IDE的编辑器,并以文件名HelloRobot.c保存。按照下面的步骤将该文件添加到目标工程项目中。
(1)单击图1-12中的“+”,将出现如图1-14所示的列表。
(2)右键单击“Source Group 1”,在出现的快捷菜单中选择“Add File To Group”→“Source Group 1”,出现Add Files to Group Source“Group1”对话框。从中选择需要添加的程序文件,如刚才建立的HelloRobot.c,单击“Add”按钮,把所选文件添加到项目文件中。
图1-14 添加C语言文件到目标工程
(3)程序文件添加到项目文件后,这时图1-14中“Source Group 1”的前面将出现一个“+”号;单击它,将出现刚才添加的源文件名,如图1-15所示(注意,图中显示的文件名是刚才输入的文件名)。
图1-15 添加了C语言文件的目标工程窗口和C程序源文件窗口
双击源文件,即可显示和编译源文件。
编译你的第一个程序
下面来生成下载需要的可执行文件。要生成可执行的.hex文件,需要对目标工程“Target 1”进行编译设置。右键单击“Target 1”,选择快捷菜单中的“Option for target‘Target 1’”。单击“output”,选择其中的“Create HEX Fi:”,如图1-16所示,单击“确定”按钮,关闭设置窗口。单击Keil uVision IDE快捷工具栏中的按钮,Keil的C编译器开始根据要生成的目标文件类型对目标工程项目中的C语言源文件进行编译。在编译过程中,我们可以观察到源文件有没有错误产生,如果没有错误产生,在IDE主窗口的下面的输出窗口(Output Window)出现如图1-17所示的提示信息,表明已成功生成了可下载的执行文件,并存储在C语言源程序存储的目录中,文件名就是HelloRobot.hex。
图1-16 设置目标工程的编译输出文件类型
图1-17 编译过程的输出提示信息
程序调试
如果程序在编译过程中出现了错误,就不能生成可下载的十六进制执行文件。C语言的编写必须严格按照规定的规范,否则在编译过程中就会出现语法错误。比如,如果在录入程序时忘了在串口初始化语句的后面加分号:
编译时就会出现如图1-18所示的语法错误。
图1-18 编译错误提示信息
其中的错误信息提行首先给出发生错误的文件名称,随后括号中的数字表示错误发生的行数,这里是指第5行。提示信息error C141:syntax error near‘printf’给出错误的编号C141,这是一种语法错误,并告知错误发生在’printf’附近。双击错误信息,编辑窗口中的光标回直接定位到错误位置。
C语言函数对函数名称的大小写是敏感的,也就是同一个名字不同的大小写表示的是两个函数,标准的函数大小写写错也会提示语法错误。比如,如果将printf写成了Printf,那么编译时会出现如下警告和错误信息:
首先是警告程序中的Printf没有函数原型,随后就是错误信息,这个函数需要ANSI型函数原型。
如果字符串少加了一个双引号,比如在要显示的字符串中缺少了双引号:
系统居然给出了5个错误信息:
由此可见,一个小小的语法错误可以导致编译时出现很多错误信息。因此,在编写和录入程序时一定要特别的认真仔细,不仅不能错标点符号,也不能错大小写,更不能错名字。
总之,语法错误相对来说比较容易调试和修改,只要简单检查,就可以很快排除。特别是根据错误信息提示进行排除,就会更快。
程序没有任何编译和连接错误,就能够顺利生成可以下载到单片机的十六进制文件。
下载可执行文件到单片机
单击AVR_fighter下载编程软件图标,打开下载软件窗口,如图1-19所示。通常不需要更改任何选项,只需要在第一个列表框中选择正确的单片机型号。然后单击左上角的“装FLASH”按钮,选择要下载的可执行hex文件——HelloRobot.hex,再单击“编程”按钮,即可开始下载。如果下载成功,则在窗口左下角窗口中会显示“芯片编程”过程,最后显示“*芯片编程结束*”。程序在下载前会先自动擦除芯片中的原有程序。
图1-19 AVR_fighter软件下载窗口
举一反三
如果读者学习过《基础机器人制作与编程》这本书,并已经掌握了采用BASIC Stamp系列单片机模块的PBASIC语言开发技能,请与刚才介绍的C语言编程过程进行比较,看有何不同。并思考,这些不同对于初学者而言各有何优缺点。是不是复杂很多?
用串口调试软件查看单片机输出信息
打开串口调试软件SerialDebugTool.exe,出现串口调试窗口,参考图1-20所示,在左边的“通信设置”栏的串口号列表框中选择串口“COMXX”后,单击下面的“连接”按钮(注意,选择哪个串口要根据所使用的串口通信线来定。如果使用的是计算机的硬串口,即计算机上的串口就可以选择串口COM1;如果使用的是USB转RC-232串口线,则要在等待串口线准备好后,查询计算机的设备管理器,确定是哪一个串口,再在串口调试终端选择该串口,随后点击连接)。如果成功连接,“连接”按钮变成“断开”按钮。
在“接收区”内你看到了什么?什么也没有!为什么呢?
注意:单片机的特点就是只要里面有程序,一开机就开始执行。因此当执行文件成功下载到单片机的那个时刻开始,程序就开始运行了。当你开着电给单片机连接上串口电缆时,单片机已经向计算机发送了信息。你错过了接收。怎么办呢?
机器人教学板提供了“Reset”按钮,可以让下载到单片机内的程序重新运行一次。单击“Reset”按钮两次,是不是出现如图1-20所示的画面呢?
图1-20 串口调试窗口
HelloRobot.c是如何工作的
要讲清C语言的第一个程序是如何工作的,要比BASIC语言复杂很多。因为C语言是一个非常庞大的系统,是为开发大型程序而准备的。即使是最小的一个程序,其框架结构也很复杂。
例程中第一行代码是HelloRobot.c所包含的头文件。该头文件在编译过程中用来将下面程序中需要用到的标准数据类型和由C语言编译器提供的一些标准输入/输出函数、中断服务函数等包括进来,生成可执行代码。头文件中可以嵌套头文件,同时也可以直接定义一些常用的功能函数。本例程中的头文件uart.h在本书的后续任务中都要用到,它包含了本例程中及后面的例程中都要用到的uart_Init()函数的定义和实现代码。当然,它也将C语言的标准输入/输出函数定义和实现包含
....
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询