C51单片机应用与C语言程序设计第三章讲解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章C语言函数与机器人巡航控制深圳市鸥鹏科技有限公司黄曦2009.3.21©2008Open-Tech.Allrightsreserved.摘要•任务一基本巡航动作•任务二匀加速/减速运动•任务三用函数调用简化运动程序•任务四高级主题――用数组建立复杂运动–字符型数据–数组–switch语句•工程素质和技能归纳•科学精神的培养©2008Open-Tech.Allrightsreserved.任务一基本巡航动作•向前巡航,持续时间为3秒。–源程序请参照教材第37页RobotForwardThreeSeconds.c–原理:•输出相应的脉冲序列,使左侧电机逆时针旋转,右侧电机顺时针旋转。程序反复执行130次,需要3秒时间,机器人也向前运动3秒。•尝试调节距离和速度。•尝试通过调节高电平脉宽,从而调节机器人的运动方向。©2008Open-Tech.Allrightsreserved.任务一基本巡航动作•命令组合,让机器人向前走、左转、右转和向后走。–源程序请参照教材第39页的ForwardLeftRightBackward.c。•尝试1个轮子不动,另一个轮子全速旋转,从而以一个轮子为支点,原地旋转。–源程序请参照教材第41页。©2008Open-Tech.Allrightsreserved.任务二匀加速/减速运动•编程目的:使机器人的运动更平稳,增长电机的寿命。•编程原理:电机控制信号高电平宽度为1500微秒,如要顺时针加速,则delay_nus()的参数从1500逐渐减小到1300,如要逆时针旋转,则从1500逐渐增大到1700。脉宽变得越快,加/减速的效果就更明显。for(pulseCount=10;pulseCount=200;pulseCount=pulseCount+1){P1_1=1;delay_nus(1500+pulseCount);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);}©2008Open-Tech.Allrightsreserved.任务二匀加速/减速运动•例程:电机速度逐渐增加到全速然后逐步减小的实现。–源代码参照教材第43页的StartAndStopWithRamping.c–尝试更改变量pulseCount的变化值,调节加速度或减速度。–尝试更改变量pulseCount的变化上限,调节加速或减速的持续时间。©2008Open-Tech.Allrightsreserved.任务三用函数调用简化运动程序•C语言提供了强大的函数定义功能。一个C程序就是由一个主函数和若干个其它函数构成,由主函数调用其它函数,其它函数也可以相互调用。同一个函数可以被一个或多个函数调用任意多次。•无论机器人要执行何种动作,都离不开前面讨论的各种基本动作。为了各种应用程序方便使用这些基本动作程序,你可以将这些基本动作放在函数中,供其它函数调用来简化程序。©2008Open-Tech.Allrightsreserved.任务三用函数调用简化运动程序•函数的种类–从函数的定义来看:•标准函数,即库函数,由集成开发环境提供。•用户自定义函数,解决自己的专门需要。–从函数有无返回值来看:•有返回值函数。•无返回值函数。–从主调函数和被调函数来看:•无参数函数。•有参数函数。©2008Open-Tech.Allrightsreserved.任务三用函数调用简化运动程序•函数的形式:–其中类型标识符和函数名称为函数头。–类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。函数名是由用户定义的标识符。–函数名后有一个括号(不可少写),若函数无参数,则括号内可不写内容或写“void”;若有参数,则形式参数列表给出各种类型的变量,各参数之间用逗号间隔。–{}中的内容称为函数体。函数体中的声明部分,是对函数体内部用到的变量的类型说明。–在很多情况下都不要求函数有返回值,此时函数类型符可以写为void。类型标识符函数名(形式参数列表){声明部分语句}©2008Open-Tech.Allrightsreserved.任务三用函数调用简化运动程序•main函数是不能被其它函数调用的,那它的返回值类型int是怎么回事呢?–其实不难理解,main函数执行完之后,它的返回值是给操作系统的。虽然在main函数体内并没有什么语句来指出返回值的大小,但系统默认的处理方式是:当main函数成功执行,它的返回值为1;否则为0。©2008Open-Tech.Allrightsreserved.任务三用函数调用简化运动程序•下边的Forward函数可以使机器人向前运动1.5秒。该函数是无形参、无返回值的函数,没有太大的使用价值。voidForward(void){inti;for(i=1;i=65;i++){P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);}}©2008Open-Tech.Allrightsreserved.任务三用函数调用简化运动程序•给前面一页的Forward函数增加脉冲数和速度等两个参数,从而可以灵活的设置这些参数,让函数成为一个真正有用的模块。voidForward(intPulseCount,intVelocity)/*Velocityshouldbebetween0and200*/{inti;for(i=1;i=PulseCount;i++){P1_1=1;delay_nus(1500+Velocity);P1_1=0;P1_0=1;delay_nus(1500-Velocity);P1_0=0;delay_nms(20);}}©2008Open-Tech.Allrightsreserved.任务三用函数调用简化运动程序•注释:在函数定义的下方,有一行注释,提醒我们使用该函数的时候,速度是在0到200之间。–除“//”外,C语言还提供了另一种语句注释符——“/*”和“*/”。–“/*”和“*/”必须成对使用,在它们之间的内容将被注释掉。它的作用范围比“//”大:“//”仅仅对它所在的一行起注释作用;但“/*…*/”可以对多行注释。–注释是你在学习程序设计时要养成的良好习惯。©2008Open-Tech.Allrightsreserved.任务三用函数调用简化运动程序•完整的使用向前、左转、右转和向后四个函数的例程。–源码参照教材第48页的MovementsWithFuncitons.c–该例程的效果与任务1的ForwardLeftRightBackward.c产生的效果是一致的。–在该程序中,除了main函数以外,其他的四个函数代表了四个方向,具有相同的形参——脉冲个数和速度参数。这四个函数的功能是可以集成在同一个函数中的。©2008Open-Tech.Allrightsreserved.任务三用函数调用简化运动程序•直接用一个子函数实现方向、脉冲个数和速度的控制。–源代码参照教材第51页的MovementsWithOneFunciton.c–尝试修改程序,让机器人走正方形。©2008Open-Tech.Allrightsreserved.任务四高级主题——用数组建立复杂运动•到目前为止你已经试过三种不同的编程方法来使机器人向前走,左转,右转和向后走。每种方法都有它的优点,但是如果你要让机器人执行一个更长,更复杂的动作时用这些方法都很麻烦。下面要介绍的两个例子将用子函数来实现每个简单的动作,将复杂的运动存储在数组中,然后在程序执行过程中读出并解码。避免了重复调用一长串子函数。这里,你要用到C语言的一种新的数据类型——数组。•前面,你只用到了C语言的基本数据类型之一的整型数据,以int作为类型说明符。另外一种基本数据类型是字符型,以char作为类型说明符。©2008Open-Tech.Allrightsreserved.任务四高级主题——用数组建立复杂运动•字符型数据–字符常量•字符常量是指用一对单引号括起来的一个字符。•字符常量中的单引号只起到定界作用并不表示字符本身。•单引号中的字符不能是单引号(‘)和反斜杠(\),它们特有的表示法在转义字符中介绍。•在C语言中,字符是按照对应的ASCII码值来存储的。–ASCII码–ASCII是美国标准信息交换码(AmericanStandardCodeforInformationInterchange)的缩写,用来制订计算机中每个符号对应的代码,这也叫做计算机的内码(code)。–每个ASCII码以1个字节(Byte)储存,从0到数字127代表不同的常用符号,例如大写A的ASCII码是65,小写a则是97。这套内码加上了许多外文和表格等特殊符号,成为目前常用的内码。©2008Open-Tech.Allrightsreserved.任务四高级主题——用数组建立复杂运动•字符型数据–转义字符•转义字符是一种特殊的字符常量,以反斜杠“\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。•通常使用转义字符表示用一般字符不便于表示的控制代码,如用于表示字符常量的单撇号(‘)、用于表示字符串常量的双撇号(“)和反斜杠(\)等。转义字符含义ASCII值(十进制)\b退格(BS)008\n换行(LF)010\t水平制表(HF)\\反斜杠092\’单引号字符039\”双引号字符034\0空字符(NULL)\ddd任意字符三位八进制\xhh任意字符二位十六进制©2008Open-Tech.Allrightsreserved.任务四高级主题——用数组建立复杂运动•字符型数据–字符变量•字符变量用来存放字符常量,注意只能存放一个字符。字符变量的定义形式如下:charc1,c2;它表示c1和c2为字符变量,各放入一字字符。因此可以用下面语句对c1、c2赋值:c1=’a’;c2=’A’;©2008Open-Tech.Allrightsreserved.任务四高级主题——用数组建立复杂运动•数组–在程序设计中,为了处

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功