




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言原来可以这样学语言原来可以这样学机器人辅助项目实践机器人辅助项目实践C语言的简单学习方式C语言的简单学习方式2内容C语言辅助项目实践平台语言辅助项目实践平台C语言集成开发环境语言集成开发环境第一个机器人程序:机器人通过第一个机器人程序:机器人通过PC显示屏同你打招呼显示屏同你打招呼数据类型、运算符与表达式:机器人做算术题数据类型、运算符与表达式:机器人做算术题最简单的最简单的C程序设计:机器人表情流水灯程序设计:机器人表情流水灯C程序的循环控制:让机器人动起来程序的循环控制:让机器人动起来函数的定义和调用:机器人复杂运动轨迹的控制函数的定义和调用:机器人复杂运动轨迹的控制选择结构程序设计
2、:让机器人根据感知运动选择结构程序设计:让机器人根据感知运动数组的定义和引用:机器人复杂运动轨迹的存储和播放数组的定义和引用:机器人复杂运动轨迹的存储和播放预处理命令:光线导引机器人制作与编程预处理命令:光线导引机器人制作与编程指针与结构体等高级编程技能指针与结构体等高级编程技能:具有触觉、红外感知和机器人内部具有触觉、红外感知和机器人内部状态显示的智能机器人制作状态显示的智能机器人制作C语言辅助项目实践平台语言辅助项目实践平台 C语言教学机器人控制板与教学机器人C语言的简单学习方式C语言辅助项目实践平台语言辅助项目实践平台 采用教学机器人学习C语言的优势 趣味性,调动学生兴趣 实用性,直接通
3、过编程项目学习,学以致用 系统性,所有C语言知识点可以贯穿到一系列循序渐进的机器人功能开发中,符合知识构建的原则 开放性,直接面向微控制器或者单片机,一切资源均开放 普及性,价格不贵,还可以与其它后续课程共用。一举夺得!C语言的简单学习方式嵌入式嵌入式C语言开发环境语言开发环境 嵌入式C程序编辑与编译环境:Keil uVision双击Keil uVision IDE 的图标,启动Keil uVision IDE 程序,你会得 到 K e i l uVision2 IDE 的主界面。通过用Project 菜单中的New Project 命令建立项目文件,过程如下:C语言的简单学习方式嵌入式C语言
4、开发环境USBASP下载器与AVR_fighter下载软件:USB-ASP下载器下载器C语言的简单学习方式嵌入式C语言开发环境USB串口连接线与串口调试软件USB-串口线第一步:选择与“设备管理器”中端口号相匹配的串口号。第二步:点击“连接”。C语言的简单学习方式第一个机器人程序:机器人通过第一个机器人程序:机器人通过PC显示屏同你打招呼显示屏同你打招呼 创建与编辑你的第一个机器人程序 编译、连接与生成机器人可执行文件 下载执行文件到机器人控制器(AT89S52单片机) 用串口调试软件查看机器人同你打招呼的信息C语言的简单学习方式1. 点击 Project,会出现图1-2所示的菜单画面,然后选
5、择“New Project”,将出现图1-3所示对话框。 图图1-2Project菜单画面菜单画面 图图1-3Create New Project对话框对话框在电脑任意位置如“桌面”新建一个文件夹,将其命一个名字,如“11”。在文件名中输入如“HelloRoBot”,保存在你想保存的位置(如桌面11)。可不用加后缀名,点击“保存”,后会出现图1-4所示的窗口。创建与编辑你的第一个机器人程序创建与编辑你的第一个机器人程序C语言的简单学习方式这里要求我们选择芯片的类型,Keil uVision2 IDE 几乎支持所有的51 核心单片机,并以列表的形式给出。本教材使用的是Atmel 公司的AT89S
6、52,在Keil uVision2IDE 提供的数据库(Data base)列表中找到此款芯片,然后点击确定,会出现图1-11所示的窗口,询问你是否加载8051 启动代码,在这里我们选择“否”,不加载。(如果你选择“是”,对你的程序没有任何影响。若你感兴趣,可选择“是”,看看编译器加载了哪些代码。)之后会出现图1-5画面,此时即得到了项目文件。 图图1-4 单片机型号选择窗口单片机型号选择窗口创建与编辑你的第一个机器人程序创建与编辑你的第一个机器人程序C语言的简单学习方式 图图1-5 是否加载是否加载8051 启动代码提示窗口启动代码提示窗口 图图1-6 目标工程窗口目标工程窗口点击按钮( 或
7、通过“File-New”操作)为该项目新建一个C 语言程序文件,保存后弹出图1-7 所示的对话窗口,将文件保存在项目文件夹中,在文件类型中填写.C(这里.C 为文件扩展名,表示此文件类型为C 语言源文件),因为你下面将采用C语言编写第一个程序。 图图1-7 C语言源文件保存对话框语言源文件保存对话框创建与编辑你的第一个机器人程序创建与编辑你的第一个机器人程序C语言的简单学习方式 例程:HelloRoBot.c #include int main(void) uart_Init(); /串口初始化 printf(Hello,this is a message from your Robotn);
8、 while(1); 将该例程键入Keil uVision IDE 的编辑器,并以文件名HelloRoBot.c 保存。添加该文件到目标工程项目了,其具体添加过程如下: 1. 单击图 1-6 中的“+”,将出现图1-8 所示的列表; 2. 然后右键点击“Source Group 1”,在出现的菜单下选择“Add Group“Source Group 1”, 出现Add Files to Group Source Group1对话框。在该对话框中选择需要添加的程序文件,如刚才建立HelloRoBot.c,单击Add 按钮,把所选文件添加到项目文件中。一次可添加多个文件。 3. 程序文件添加到项目
9、文件中去后,这时上图中“Source Group 1”的前面将出现一个“+”号;单击它将出现刚才添加的源文件名,如图1-9所示(注意:图中显示的文件名是刚才输入的文件名)。创建与编辑你的第一个机器人程序创建与编辑你的第一个机器人程序C语言的简单学习方式图图1-8 添加添加C语言文件到目标工程语言文件到目标工程 图图1-9 添加了添加了C语言文件的目标工程语言文件的目标工程双击源文件即可显示源文件的编辑界面。 创建与编辑你的第一个机器人程序创建与编辑你的第一个机器人程序C语言的简单学习方式下面来产生下载需要的可执行文件。要产生可下载到单片机执行的.Hex文件,需要对目标工程“Target1”进行
10、编译设置,右键点击“Target 1”,选择“Option for target Target 1”。 点击“output”,选择其中的“Create HEX File”,然后点击Keil uVision IDE 快捷工具栏中的快捷编译按钮 ,Keil 的C 编译器开始根据要生成的目标文件类型对目标工程项目中的C 语言源文件进行编译连接,生成Hex文件。编译、连接与生成机器人可执行文件编译、连接与生成机器人可执行文件C语言的简单学习方式下载执行文件到机器人控制器(AT89S52单片机)第一步:选择需第一步:选择需要下载的要下载的hex文文程序程序第二步:选第二步:选择正确的芯择正确的芯片类型片
11、类型第三步:确保第三步:确保开发板供电正开发板供电正常和线路连接常和线路连接正确。点击该正确。点击该按钮将程序下按钮将程序下载到开发板上。载到开发板上。C语言的简单学习方式用串口调试软件查看机器人同你打招呼的信息第一步:选择与第一步:选择与“设备管理器设备管理器”中端口号相匹配的串口号。中端口号相匹配的串口号。第二步:点击第二步:点击“连接连接”。第三步:不断按下单片机的复位键,看该窗第三步:不断按下单片机的复位键,看该窗口是否出现打招呼的信息口是否出现打招呼的信息C语言的简单学习方式C程序通用架构程序通用架构 头文件:头文件:#include#include在编译过程中用来将下面程序中需要用
12、到的在编译过程中用来将下面程序中需要用到的标准数据类型(如以后标准数据类型(如以后会讲的会讲的intint,char)char)和由和由C C 语言编译器提供的一些语言编译器提供的一些标准输入标准输入/ /输出函数(如输出函数(如printfprintf)等包括等包括进来,生成可执行代码。本例程中的头文件进来,生成可执行代码。本例程中的头文件uart.h uart.h 就包含了本例程中以及后面例程中都就包含了本例程中以及后面例程中都要用到的要用到的uart_Init()uart_Init()函数的定义和实现。函数的定义和实现。 uart_Init()uart_Init()是串口调试环境能现实的
13、串口初是串口调试环境能现实的串口初始化函数。始化函数。C C 语言程序必须以语言程序必须以mainmain函数作为程序的起点,通常称之为主函数。函数作为程序的起点,通常称之为主函数。printf printf 函数称为格式函数称为格式输出函数,其功能是按用户指定的格式,把指定的数据显示输出。该函数是输出函数,其功能是按用户指定的格式,把指定的数据显示输出。该函数是C C 语言提供语言提供的标准输出函数,定义在的标准输出函数,定义在C C 语言的标准函数库中。语言的标准函数库中。“n”n”是一个向调试终端发送回车命是一个向调试终端发送回车命令的控制符令的控制符While(1)While(1)的作
14、用。的作用。#include#include int main(void) int main(void) uart_Init(); / uart_Init(); /串口初始化串口初始化 printf(Hello,this is a message from your Robotn);printf(Hello,this is a message from your Robotn); while(1); while(1); 总结和归纳:C程序的通用架构、工作原理和运行特点C语言的简单学习方式机器人做算术题:数据类型、运算符与表达式数据类型、运算符与表达式简单项目设计: 直接在程序中加入算术表达式,
15、用串口调试助手输出运算结果 不断更改数据类型和运算表达式,熟悉和掌握C程序的数据类型、运算符和输出格式等,同时进一步掌握程序的编辑、编译、下载和调试方法。新的学习内容 整数、实数,基本四则运算符和表达式。#include int main(void) int i; uart_Init(); i=7*11; printf(Whats 7 X 11?n); printf(The answer is :%dn,i); while(1); C语言的简单学习方式机器人做算术题:数据类型、运算符与表达式数据类型、运算符与表达式复杂项目设计:设计程序,用串口调试助手输入两个数据,程序计算着两个数据的加减乘除
16、的运算结果,并将表达式在串口调试助手中打印出来按复位键重新运行程序,再来一次修改程序,让机器人做完一次运算后自动重复询问计算。修改程序,进行实数(浮点数)的四则运算。#include int main(void) int a,b; uart_Init(); printf(“Input the 1st number:”); scanf(“%d”,&a); printf(“Input the 2nd number:”); scanf(“%d”,&b); printf(“ab = %dn “,a*b); printf(“a/b = %dn “,a*b); printf(“a+b = %dn “,a*
17、b); printf(“a-b = %dn “,a*b); while(1); C语言的简单学习方式机器人做算术题:数据类型、运算符与表达式数据类型、运算符与表达式 总结归纳 C语言的数据类型 常量与变量 整型数据:短整型、整型和长整型,有符号和无符号 浮点型数据:单精度(float),双精度(double)和长双精度(long double) 字符型数据 算术运算符和算术表达式C语言的简单学习方式最简单的机器人C程序设计:表情流水灯LEDLED灯与单片机的连接电路图灯与单片机的连接电路图脑子用多了,现在动动手,给机器人装上几盏脑子用多了,现在动动手,给机器人装上几盏LEDLED灯灯 搭接电路
18、的面包板介绍和线路搭建搭接电路的面包板介绍和线路搭建C语言的简单学习方式最简单的机器人C程序设计:表情流水灯编写程序,让LED灯闪烁起来#include#includeint main(void)uart_Init(); /初始化串口printf(The LED connected to P1_0 is blinking!n);while(1)P1_0=1; / P1_0 输出高电平delay_nms(500); /延时500msP1_0=0; / P1_0 输出低电平delay_nms(500); /延时500ms时序图简介时序图简介时序图反应的是单片机输时序图反应的是单片机输出高、低电压信
19、号与时间出高、低电压信号与时间的关系图的关系图 ,实际上也体,实际上也体现了单片机程序代码的执现了单片机程序代码的执行顺序。行顺序。C语言的简单学习方式最简单的机器人C程序设计:表情流水灯 归纳和总结 BoeBot.h头文件中定义了两个延时函数:头文件中定义了两个延时函数: void delay_nms( int )void delay_nms( int )毫秒级的延时毫秒级的延时 void delay_nus(int )void delay_nus(int )微秒级的延时微秒级的延时。 修改这两个函数的参数,可以改变修改这两个函数的参数,可以改变LEDLED灯的闪烁频率灯的闪烁频率 whil
20、e(while(表达式表达式) ) 循环体语句循环体语句 while(1):当表达式为非当表达式为非 0 0 值时,不停的执行值时,不停的执行while while 语句中的内嵌语句,其特点是先判断表达式,后执行语句中的内嵌语句,其特点是先判断表达式,后执行语句。语句。 P1_0=1:这是这是5151单片机定义的单片机定义的IOIO的方式,使用方的方式,使用方式是式是PX(03)_NPX(03)_N(0707)=?=?。 AT89S52AT89S52有有4 4组组IOIO,每个,每个IOIO为为8 8位,从位,从0707。C语言的简单学习方式最简单的机器人C程序设计:表情流水灯 项目拓展 改变
21、延时函数,重新编译和下载程序,了解时序图与LED灯的对应关系 在机器人面包板上再加上3盏LED灯,修改程序,让机器人变化出不同的效果,进一步掌握时序和程序的执行关系 再加上4盏灯,编写程序控制8盏灯的流水闪烁。现在还是直接通过1个个单独的IO口控制灯的亮和灭,是不是太繁琐? 这个问题留到后续的课程来解决!C语言的简单学习方式机器人的控制电机机器人的控制电机连续旋转伺服电机连续旋转伺服电机伺服电机与单片机的连线原理图(左)和实际接线示意图(右)伺服电机与单片机的连线原理图(左)和实际接线示意图(右)知识点:工程连线图识别知识点:工程连线图识别C程序的循环控制:让机器人动起程序的循环控制:让机器人
22、动起来来C语言的简单学习方式伺服电机控制信号伺服电机控制信号 零点标定信号时序图零点标定信号时序图 while(1) P1_0=1; /P1_0输出高电平输出高电平 P1_1 =1; /P1_1输出高电平输出高电平 delay_nus(1500); /延时延时1.5ms P1_0=0; /P1_0输出低电平输出低电平 P1_1=0; /P1_0输出低电平输出低电平 delay_nus(20000); /延时延时20ms知识点:零点标定信号知识点:零点标定信号C程序的循环控制:让机器人动起程序的循环控制:让机器人动起来来这个控制程序逻辑同LED灯的控制程序完全一样C语言的简单学习方式测试伺服电机
23、测试伺服电机1.3 ms1.3 ms的控制脉冲序列使电机顺时针全速旋转的控制脉冲序列使电机顺时针全速旋转 1.7ms1.7ms的连续脉冲序列使电机逆时针全速旋转的连续脉冲序列使电机逆时针全速旋转while(1) P1_0=1; P1_1=1; delay_nus(1300); P1_0=0; P1_1=0; delay_nus(20000); while(1) P1_0=1; P1_1=1; delay_nus(1700); P1_0=0; P1_1=0; delay_nus(20000); 知识点:机器人的运动由高电平持续时间决定知识点:机器人的运动由高电平持续时间决定要让机器人不断的运动,
24、就要不断的给电机发命令要让机器人不断的运动,就要不断的给电机发命令C程序的循环控制:让机器人程序的循环控制:让机器人动起来动起来C语言的简单学习方式实现方式:通过控制循环的执行次数就可以控制运动距离或者时间实现方式:通过控制循环的执行次数就可以控制运动距离或者时间forfor循环循环 for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3) 3) 语句语句按如下方式理解按如下方式理解for(for(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值) ) 语句语句for (Counter=1;Counter=100;Counter+)for (Co
25、unter=1;Counter=100;Counter+) P1_1=1; P1_1=1; delay_nus(1700); delay_nus(1700); P1_1=0; P1_1=0; delay_nms(20); delay_nms(20); FOR语句:直接控制循环次数语句:直接控制循环次数C程序的循环控制:让机器人程序的循环控制:让机器人动起来动起来项目:让机器人运动一段距离停下或者运动一段时间停下项目:让机器人运动一段距离停下或者运动一段时间停下C语言的简单学习方式实现方式:实现方式:do 语句语句 while (表达式)执行语句,直到表达式不成立表达式)执行语句,直到表达式不成
26、立 while(表达式)表达式) 语句语句 表达式成立时,一直执行语句表达式成立时,一直执行语句while(while(表达式表达式) ) 语句语句 while( cm 30 )while( cm 30 ) P1_1=1; P1_1=1; delay_nus(1700); delay_nus(1700); P1_1=0; P1_1=0; delay_nms(20); delay_nms(20); C程序的循环控制:让机器人程序的循环控制:让机器人动起来动起来项目:让机器人运动到某一个条件成立或者某一个条件成项目:让机器人运动到某一个条件成立或者某一个条件成立时,机器人一直运动立时,机器人一直运
27、动do do 语句语句 while(表达式表达式) dodo P1_1=1; P1_1=1; delay_nus(1700); delay_nus(1700); P1_1=0; P1_1=0; delay_nms(20); delay_nms(20); while( cm 30 )C语言的简单学习方式函数的定义和调用:机器人复杂运动轨迹的控制函数的定义和调用:机器人复杂运动轨迹的控制机器人的四个基本动作 全速前进一段距离 全速后退一段距离 全速左转一个角度 全速右转一个角度让机器人走一个复杂轨迹 全速前进20步 左转90步 全速前进20步 左转90步 全速前进20步 左转90步 全速前进20步
28、 左转90步C语言的简单学习方式函数的定义和调用:机器人复杂运动轨迹的控制函数的定义和调用:机器人复杂运动轨迹的控制为了简化程序的编写,将机器人的四个基本动作程序各定义成一个函数 全速前进一段距离void Forward(int steps) 全速后退一段距离void Backward(int steps) 全速左转一个角度void TurnLeft(int steps) 全速右转一个角度void TurnRight(int steps) Forward,Backward等是定义函数的名称 后面括号中的数据类型函数带的参数类型,决定函数执行时的运动大小。函数可以不带参数,即括号里面可以是空的,
29、但必须有括号。定义函数带的参数可以有多个,多个参数定义之间需用逗号隔开。 函数前面的void表示函数执行完,没有返回值,这个void是定义函数类型的标识符之一。还有很多其它的函数标识符。函数定义时必须有类型标识符。 示例void Forward(int steps) for(int i=0;isteps;i+)C语言的简单学习方式函数的定义和调用:机器人复杂运动轨迹的控制函数的定义和调用:机器人复杂运动轨迹的控制 调用函数让机器人走复杂轨迹的程序 调用时,必须给带参数的函数中的参数一个确定的值,如果有多个参数,就要给多个确定的值,具体的值之间用逗号隔开。 函数调用实例for(int i=0;i
30、4;i+)Forward(20);TurnLeft(90);C语言的简单学习方式选择结构程序设计:让机器人根据感知运动选择结构程序设计:让机器人根据感知运动 机器人项目设计:让机器人具有触须感知功能,让机器人能够在一个封闭的空间自由漫游,而不会停下来。实现方式:实现方式:if(表达式)表达式) 语句语句1;else 语句语句2;if(表达式)表达式) 复合语句;复合语句; else 复合语句;复合语句;表达式就是判断触须连接端口位的输入信号是否表达式就是判断触须连接端口位的输入信号是否0或者或者1表达式可以是符合表达式,即多个条件的逻辑运算表达式可以是符合表达式,即多个条件的逻辑运算C语言的简
31、单学习方式选择结构程序设计:让机器人根据感知运动触须传感器示意图和电路图:触须传感器示意图和电路图:触须安装示意图触须安装示意图触须电路原理图触须电路原理图C语言的简单学习方式void Right_Turn(void) int i; for(i=1;i=26;i+)P1_1=1;delay_nus(1700); P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);void Backward(void) int i; for(i=1;i=65;i+)P1_1=1;delay_nus(1300); P1_1=0;P1_0=1;delay_nus(1
32、700);P1_0=0;delay_nms(20);#include#includeint P1_4state(void)/获取获取P1_4的状态的状态,右胡须右胡须return (P1&0 x10)?1:0;int P2_3state(void)/获取获取P2_3的状态的状态,左胡须左胡须return (P2&0 x08)?1:0;void Forward(void) P1_1=1;delay_nus(1700); P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Left_Turn(void) int i; for(i=1;i=
33、26;i+)P1_1=1;delay_nus(1300); P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);选择结构程序设计:让机器人根据感知运动选择结构程序设计:让机器人根据感知运动C语言的简单学习方式int main(void)uart_Init();printf(Program Running!n); while(1)if(P1_4state()=0)&(P2_3state()=0)Backward(); /向后向后Left_Turn();/向左向左Left_Turn();/向左向左else if(P1_4state()=0)Back
34、ward();/向后向后Left_Turn();/向左向左 else if(P2_3state()=0)Backward();/向后向后Right_Turn();/向右向右else Forward();/向前向前选择结构程序设计:让机器人根据感知运动选择结构程序设计:让机器人根据感知运动C语言的简单学习方式选择结构程序设计:让机器人根据感知运动本项目要点:本项目要点: ifif语句语句 根据给定的条件进行判断,以决定执行某个分支程序段。根据给定的条件进行判断,以决定执行某个分支程序段。ifif语句其中之一的形式为:语句其中之一的形式为: if(if(表达式表达式1)1) 语句语句1;1; else if( else if(表达式表达式2 2) 语句语句2 2; elseelse 语句语句3;3; 其语义是:如果表达式的值为真,则执行语句其语义是:如果表达式的值为真,则执行语句1 1,否则执行语句,否则执行语句2 2,否则执行下面语句。,否则执行下面语句。?操作符?操作符 C C语言提供了一个可以代替某些语言提供了一个可以代替某些“if-else”if-else”语句的简便易用的操作符语句的简便易用的操作符“?”?”。该操作符是三元的,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学法学的考试题及答案
- 成龙数学考试题目及答案
- 民族风的课件
- 新质生产力的未来发展趋势研判
- 新质生产力赋能专业成长
- 教学工作方案幼儿园大班
- 新质生产力的关键发展领域
- 什么是新质生产力
- 电网安全运营规范讲解
- 2025年影像学影像诊断学术专项考试答案及解析
- 2025年农村应急广播系统使用与维护培训模拟题集及解析答案
- 班级日常管理规范及实施方案
- 2026年高考政治一轮复习:必修+选必修共7册主观题背诵考点汇编
- 2025年《数字孪生与虚拟调试技术应用》课程标准
- TCCEAS001-2022建设项目工程总承包计价规范
- 人教版小学三年级数学(上册)全册教案
- 2024-2025学年人教版(2024)七年级英语上册 教学计划
- 小学语文分层作业设计
- 米亚基点焊机MDA-4000B全中文说明书
- 年产xxx套劳保用品项目营销策划方案_范文
- U型桥台通用计算
评论
0/150
提交评论