1、一、IAR EWARM 集成开发环境及 LM LINK 的使用 .31.1 IAR EWARM 简介 .31.2 LM LINK 调试器介绍 .31.3 IAR EWARM 的安装(具体参见附件中 PDF) .3二、基础实验部分 .42.1 7289 EX BOARD 的使用 .42.1.1 实验目的 .42.1.2 实验内容 .42.1.3 实验原理 .42.1.4 实验步骤 .72.1.5 实验程序 .72.2 红外线传感器测距 .92.2.1 实验目的 .92.2.2 实验内容 .92.2.3 实验原理 .92.2.4 实验步骤 .122.2.5 试验程序 .132.3 步进电机控制 .
2、192.3.1 实验目的 .202.3.2 实验内容 .202.3.3 实验原理 .202.3.4 实验步骤 .222.3.5 实验程序 .22三、高级实验 .333.1 步进电机匀加减速控制 .333.1.1 实验原理 .333.1.2 实验例程 .363.2 含姿势修正的走直线实验 .443.2.1 实验原理 .453.2.2 程序设计 .473.3 无记忆功能的走迷宫实验 .503.3.1 实验原理 .503.3.2 程序设计 .51四、智能算法 .784.1 迷宫坐标和绝对方向的建立 .784.2 相对方向与绝对方向的转换 .794.3 坐标转换 .804.4 墙壁资料储存 .804.
3、5 迷宫搜索方法 .814.5.1 右手法则 .814.5.2 左手法则 .824.5.3 求心法则 .824.6 寻找最优路径的方法 .834.6.1 等高图制作原理 .844.6.2 等高图制作范例 .844.6.3 转弯加权的等高图 .864.7 程序设计 .864.7.1 电脑鼠相对方向的墙壁资料获取 .884.7.2 右手法则程序设计 .894.7.3 左手法则程序设计 .904.7.4 中右法则程序设计 .914.7.5 中左法则程序设计 .924.7.6 求心法则程序设计 .924.7.7 等高图制作程序 .964.7.8 直接到指定坐标程序设计 .984.7.9 搜寻到终点的最
4、短路径 .1014.7.10 未走过的支路统计 .1024.7.11 主函数程序设计 .103一、IAR EWARM 集成开发环境及 LM LINK 的使用1.1 IAR EWARM 简介IAR Embedded Workbench for ARM(下面简称 IAR EWARM) 是一个针对 ARM处理器 的集成开发环境, 它包含项目管理器、 编辑器、 C/C+编译器和 ARM 汇编器、 连接器 XLINK和支持 RTOS的调试工具 C-SPY。 在 EWARM环境 下可以使用 C/C+和汇编 语言方便地开发嵌入式应用程序。 比较其它的 ARM开发环境 , IAR EWARM具有入门 容易、
5、使用方便 和代码紧凑等特点。目前 IAR EWARM 支持 ARM Cortex-M3 内核的最新版本是 4.42a, 该版本支持 Luminary 全系列的 MCU。 为了方便 用户学习评估, IAR 提供一个限制 32K 代码的免费试用版本。 用 户可以到 IAR 公司的网 站 下载。1.2 LM LINK 调试器介绍LM LINK 是由广州致远电子有限公司开发的低成本高性能 USB JTAG 调试器,它专门 用于对 Luminary 系列单片机程序的调试与下载。该调试器结合 IAR EWARM 集成开发环境, 可支持所有 LM3S 系列 MCU 的程序的下载与调试。LM LINK 采用
6、 USB 接口与电脑连接,打破传统的用并口和串口下载程序的方式,无论 是台式电脑还是笔记本电脑都应用自如。透明外壳封装、设计小巧、晶莹剔透、外形比手机 还小、价格低廉、性价比极高、调试下载更快、使用更加方便。如图 1.1 所示。图 1.1 LM LINK 外观图1.3 IAR EWARM 的安装(具体参见附件中 PDF)二、基础实验部分2.1 7289 EX BOARD 的使用7289 EX BOARD 模块是一个键盘控制以及数码管驱 PACK 板,控制芯片为ZLG7289B,ZLG7289B 提供了 SPI 接口和键盘中断信号,方便与处理器连接,可驱动 8 位共阴数码管或 64 只独立 LE
7、D 和 64 个按键。在本模块上有 8 个 8 段共阴极数码管及 12 个按键。ZLG7289 与微控制器的接口采用三线制 SPI 串行总线,与 LM3S615 上的标准四线制 SPI接口有所差别,所以只能用软件来模拟三线制 SPI 接口与 ZLG7289 通信。使用 7289 EX BOARD 模块不需要自己编写驱动程序,编者已经为用户编写好驱动软件包。用户只需要调用几个函数就可以完全操作键盘和数码显示。2.1.1 实验目的学会 7289 EX BOARD 模块的使用,利用提供的 7289 软件包显示数据和读取按键值。2.1.2 实验内容1. 上电或者复位后,8 个数码管按照自己的编号分别显
8、示 07。2. 当有键按下时,所有数码管一起显示出按键的编号,由于共有 12 个键,所以显示的范围为 0b。3. 检测按键使用中断方式。2.1.3 实验原理ZLG7289B 针对 MicroMouse615 的程序软件包由两个文件组成: “ZLG7289.h ”和 “ZLG7289.c”。头文件“ZLG7289.h”包括 ZLG7289B 的 I/O 接口定义和用户指令集声明, C 语言文件 “ZLG7289.c”是这些指令的具体实现。1 zlg7289InitZLG7289 软件包初始化程序。函数原型:void zlg7289Init (void)描述:该函数对 LM3S615 上连接到 Z
9、LG7289 的 SPI 端口进行初始化,使能 I/O 口,并设置CS、CLK 和 DIO 端口为输出。初始化各端口状态并复位 ZLG7289。函数代码参见程序清单 2.1。注意:该代码未对 ZLG7289_KEY 端口初始化。程序清单 2.1 zlg7289Initvoid zlg7289Init (void)SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOA ); /* 使能GPIO A 口外设 */GPIODirModeSet(GPIO_PORTA_BASE,ZLG7289_CS|ZLG7289_CLK|ZLG7289_DIO,GPIO_DIR_MOD
10、E_OUT); /* 设置 I/O 口为输出模式 */GPIOPinWrite(GPIO_PORTA_BASE, ZLG7289_DIO, 0xff);GPIOPinWrite(GPIO_PORTA_BASE, ZLG7289_CLK, 0x00);GPIOPinWrite(GPIO_PORTA_BASE, ZLG7289_CS , 0xff);zlg7289Reset(); /* 复位ZLG7289 */2 zlg7289Download向 ZLG7289 下载要显示的数据。函数原型:void zlg7289Download(uint8 ucMod, int8 cX, int8 cDp, i
11、nt8 cDat)参数: ucMod:选择译码方式,共有 三种译码方式,取值范围为 02。 cX:数码管编号,取值范围为 07。cDp:cDp = 0:小数点熄灭;cDp = 1:小数点点亮。cDat:要显示的数据。 描述: 下面对与三种译码方式分别说明:1). ucMod = 0,按方式 0 译码。显示数据按照表 2.1 进行译码。表 2.1 方式 0 译码表cDat 的值 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07显示结果 0 1 2 3 4 5 6 7cDat 的值 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F显示结果
12、 8 9 - E H L P 无显示2). ucMod = 1,按方式 1 译码。显示数据按照表 2.2 进行译码。表 2.2 方式 1 译码表cDat 的值 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07显示结果 0 1 2 3 4 5 6 7cDat 的值 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F显示结果 8 9 A B C D E F3). ucMod = 2,该方式是下载数据,但不译码。cDat 的 bit0 bit6 分别对应数码管的 g、f、e、d、c、b、a 位。对应的位值为 1 时,该段被点亮;反之熄灭。3
13、zlg7289Key从 ZLG7289 读出按键值。函数原型:int8 zlg7289Key (void) 返回: cKey:若有按键按下则返回按键的编号;若没有按键按下,则返回 0xFF。描述:当有按键按下时,ZLG7289 的 INT 管脚变为低电平,这时调用该函数读取按键值。若 有按键则返回按键编号,没有按键返回 0xFF。在 7289 EX BOARD 上只有 12 个按键,编号为 011,和 PCB 上的丝印编号一致。4 zlg7289Cmd执行 ZLG7289 纯指令。函数原型:void zlg7289Cmd(int8 cCmd) z 参数: cCmd:传送的指令。描述:cCmd
14、的长度为一个字节,不同的值表示不同的命令。其值的含义参考表 2.3。该函数 主要做一些显示控制。表 2.3 纯指令指令表cCmd 值 0xA4 0xBF 0xA0 0xA1 0xA2 0xA3指令功能 复位 测试 左移 右移 循环左移 循环右移返回:无。扩展: 由于指令不方便记忆,在“ZLG7289.h”文件中用宏定义的方式为用户定义了一些指令集,如程序清单 2.2 所示。程序清单 2.2 宏定义指令集#define zlg7289Reset() zlg7289Cmd(0xA4) /* 复位(清除)指令 */#define zlg7289Test() zlg7289Cmd(0xBF) /* 测
15、试指令 */#define zlg7289SHL() zlg7289Cmd(0xA0) /* 左移指令 */#define zlg7289SHR() zlg7289Cmd(0xA1) /* 右移指令 */#define zlg7289ROL() zlg7289Cmd(0xA2) /* 循环左移指令 */#define zlg7289ROR() zlg7289Cmd(0xA3) /* 循环右移指令 */5 zlg7289CmdDat执行 ZLG7289 带数据指令。函数原型:void zlg7289CmdDat(uint8 cCmd, int8 cDat)参数: cCmd:命令字。 cDat:数
16、据。描述:该函数是执行带数据的指令,如控制某一位数码管闪烁或者消隐,把 8 个数码管看成64 个独立的 LED,分别控制它们点亮或者熄灭。扩展:把一些常用指令定义为宏,如程序清单 2.3 所示,用户就可以方便使用。在闪烁和消隐 控制中,cX 参数为一个字节长度,其 8 位分别对应 8 个数码管。在段点亮和关闭指令中, 每一个数码管被独立成 8 个 LED,即共有 64 个 LED。cSeg 参数代表被控制的 LED 编号, 在同一个数码管中,编号由低到高的顺序为:g、f、e、d 、c 、b、a、dp。程序清单 2.3 宏定义指令集#define zlg7289Flash(cX) zlg7289
17、CmdDat(0x88, (cX) /* 闪烁控制 cX 的 8 个位对应数码管的 8 个位 0:闪烁 1:不闪烁 */#define zlg7289Hide(cX) zlg7289CmdDat(0x98, (cX) /* 消隐控制 cX的 8 个位对应数码管的 8 个位 0:消隐 1:显示 */#define zlg7289SegOn(cSeg) zlg7289CmdDat(0xE0, (cSeg) /* 段点亮指令 8 个数码管被看成 64 个独立 LED cSeg: 0 63 */#define zlg7289SegOff(cSeg) zlg7289CmdDat(0xC0, (cSeg)
18、 /* 段关闭指令 8 个数码管被看成 64 个独立 LED cSeg: 0 63 */2.1.4 实验步骤1. 打开 IAR EWARM 集成开发环境,建立工作区和新建一个项目;2. 将文件“Type.h” , “ZLG7289.c”和“ZLG7289.h ”一起复制到您的工程文件夹下;3. 新建“mian.c”文件,并加入到工程;4. 把文件“ZLG7289.c”添加进工程中;5. 把参考程序拷入“mian.c”中;6. 在“startup.c”文件里的开始位置中声明中断服务函数,如图 2.1 所示;图 2.1 中断服务函数申明7. 在“startup.c”文件里修改 GPIO 端口 A
19、的中断入口地址,如图 2.2 所示。图 2.2 更改中断向量表8. 编译下载程序。2.1.5 实验程序程序清单 2.6 Main.c#include “Zlg7289.h“#include “hw_memmap.h“#include “hw_ints.h“#include “interrupt.h“#include “gpio.h“#include “sysctl.h“/* Function name: GPIO_Port_A_ISR* Descriptions: 端口 A 中断服务函数* input parameters: 无* output parameters: 无* Returned
20、value: 无*/void GPIO_Port_A_ISR (void)uint8 ucIntStatus;uint8 ucKey;ucIntStatus = GPIOPinIntStatus(GPIO_PORTA_BASE, true); /* 读 PA 口中断状态 */if(ucIntStatus /* 清中断 */ucKey = zlg7289Key(); /* 读按键值 */* 若按键有效,则让 8 个数码管一起显示出来*/if (ucKey != 0xff) zlg7289Download(1, 0, 0, ucKey);zlg7289Download(1, 1, 0, ucKey
21、);zlg7289Download(1, 2, 0, ucKey);zlg7289Download(1, 3, 0, ucKey);zlg7289Download(1, 4, 0, ucKey);zlg7289Download(1, 5, 0, ucKey);zlg7289Download(1, 6, 0, ucKey);zlg7289Download(1, 7, 0, ucKey);/* Function name: main* Descriptions: 主函数* input parameters: 无* output parameters: 无* Returned value: 无*/m
22、ain (void)SysCtlClockSet( SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |SYSCTL_XTAL_6MHZ ); /* 使能 PLL,50M */zlg7289Init(); /* 初始化ZLG7289 */GPIODirModeSet(GPIO_PORTA_BASE, ZLG7289_KEY, GPIO_DIR_MODE_IN); /* 设置 KEY 端口为输入 */GPIOIntTypeSet(GPIO_PORTA_BASE, ZLG7289_KEY, GPIO_FALLING_EDGE); /* 配置引脚下
23、降沿触发中断 */GPIOPinIntEnable(GPIO_PORTA_BASE, ZLG7289_KEY); /* 使能引脚输入中断 */IntEnable(INT_GPIOA); /* 使能GPIO PA 口中断 */* 显示数据*/zlg7289Download (0, 0, 0, 0);zlg7289Download (0, 1, 0, 1);zlg7289Download (0, 2, 0, 2);zlg7289Download (0, 3, 0, 3);zlg7289Download (0, 4, 0, 4);zlg7289Download (0, 5, 0, 5);zlg728
24、9Download (0, 6, 0, 6);zlg7289Download (0, 7, 0, 7);while (1); /* 等待按键中断 */2.2 红外线传感器测距MicroMouse615 上共有 5 组红外线传感器,每组红外线传感器由红外线发射和红外线接 收组成。MicroMouse615 上的红外接收头是一体化红外线接收头。2.2.1 实验目的1. 掌握一体化红外接收头的工作特性。2. 学会如何产生红外线的调制信号。3. 学会如何使用一体化红外接收头传感器测距。2.2.2 实验内容1. 利 用五组传感器检测一定范围内的障碍物,即可以判断一定距离的范围内是否存在 障碍物。2. 左
25、右两侧的传感器加入一项功能,能够粗略判断障碍物的远近距离。即可以指示出 没有障碍物、检测到障碍物和障碍物靠的太近三种状态。2.2.3 实验原理1 硬件连接如图 2.3 所示,W1 与 RF1 组成红外线发射电路,控制红外线发射的端口连接到微控制 器,在五组传感器里,RF1,RF3,RF5 共同连接到 PE0 端口;RF2 ,RF4 共同连接到 PB0 端口。红外接收头 U1 U5 的输出信号信号分别连接到微控制器的 PB1 PB5 端口。图 2.3 红外检测电路2 一体化红外线接收头工作原理红外线传感器检测电路如图 2.3 所示,由 U1 为一体式红外线接收传感器,其型号为 IRM8601S。该接收头内部集成自动增益控制电路、带通滤波电路、解码电路及输出驱动电路。为了便于阅读,首先介绍一下调制的概念,调制是