资源描述
实验三 GPIO输出控制实验一、 实验目的熟悉LPC2000系列ARM7微控制器的GPIO输入控制。二、实验设备l 硬件:PC机 一台LPC2131教学实验开发平台 一套l 软件:Windows 98/XP/2000系统,ADS1.2集成开发环境。三、实验内容1. P0.7管脚控制EasyARM教学实验开发平台上的蜂鸣器报警。2. GPIO 输出实验流水灯实验实验预习要求:LPC2000 GPIO管脚的设置和控制。四、实验原理1.GPIO 输出实验,蜂鸣器控制在 EasyARM2131 开发板上,接有一个蜂鸣器,由P0.7 控制,通过跳线JP11 选择连接。蜂鸣器控制电路如所示。图 3-1 蜂鸣器控制电路如果跳线JP11 选择蜂鸣器,当P0.7 输出低电平时,蜂鸣器鸣叫,当P0.7 输出高电平则停止鸣叫。程序设置PINSEL0 使P0.7 连接GPIO,并通过IO0DIR将其设置为输出状态,然后通过IO0CLR和IO0SET清零和置位P0.7 口,控制蜂鸣器,流程图见图 3-2。图 3-2 蜂鸣器控制实验流程图2 GPIO 输出实验流水灯实验单路LED 控制EasyARM2131 开发板上有8 个独立的LED,分别由8 个GPIO口控制,现在使用其中一路进行实验,使用的电路如图 3-3所示。图 3-3 单路LED 电路图当跳线 JP12 连接LED1 时,P1.18 采用灌电流方式驱动LED1,当P1.18 输出低电平时,LED1 点亮,当P1.18 输出高电平时,LED1 熄灭。实验程序首先设置管脚连接GPIO,接着设置P1.18 口为输出模式,然后通过IO1CLR和IO1SET控制P1.18,驱动LED1 的亮灭。GPIO 输出实验流水灯实验EasyARM2131 开发板上的8 路LED(LED8LED1)分别可选择P125:18进行控制,电路如图 3-4 所示。图 3-4 8 路LED 控制电路当跳线JP12 全部选择LED8LED1 后,P1.25P1.18 分别控制这8 路LED,就可以进行流水灯实验。流水灯显示花样可以通过数组人为定义,亦可通过一定的算法计算,程序清单所示为采用人为定义数组控制显示花样的实验程序,流程图如图 3-5 所示。图 3-5 流水灯花样显示流程图五、实验步骤实验内容1步骤 启动ADS1.2IDE集成开发环境,选择ARM Executable Image for lpc2131工程模板建立一个工程BeepCon_C。 在user组里编写主程序代码main.c。将EasyARM教学实验开发平台上的P0.7管脚与Beep跳线短接gde台ngtheng 444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444。 选择Project-Debug,启动AXD进行JLINK仿真调试。在工程窗口中选择DebugInRAM生成目标,然后编译连接工程(单击Make按钮)。如图所示。选择 DebugInRAM 生成目标时,编译连接生成的目标代码就是用于在片内RAM 调试。打开ADS开发环境下的【Edit】-【DebugInFLASH Settings.】,在”ARM fromELF”下Output format做如图选择,输出文件选择你的文件同一目录下,扩展名.HEX 全速运行程序,程序将会在main.c的主函数中停止(因为main函数起始处默认设置有断点)。 单击Context Variable图标按钮(或者选择Processor Views-Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择System Views-Debugger Internals 即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。 可以单步运行程序,可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。在FLASH 中调试在工程窗口中选择 DebugInFLASH 生成目标,然后编译连接工程(单击Make 按钮)。选择 DebugInFLASH 生成目标时,编译连接生成的目标代码就是用于在片内FLASH 调试。编译连接通过后,按键盘的F5 键,启动AXD进行调试。注意,由于程序要烧写到片内FLASH,默认选项在每次装载FLASH 地址的调试文件时,将会擦除FLASH 并下载代码到FLASH 中。脱机运行使用 DebugInFLASH 生成目标,并进行调试后(使用JLINK 仿真器),程序即烧写到片内FLASH 中。将JLINK 电源断开,重新上电,程序将脱机运行;实验内容2实验步骤 启动ADS1.2IDE集成开发环境,选择ARM Executable Image for lpc2131工程模板建立一个工程LedDisp_C。 在user组里编写主程序代码main.c。 选用DebugInRam生成目标,然后编译链接工程。 将EasyARM教学实验开发平台上的P1.18:25管脚对应与LED1:8跳线短接gde台ngtheng 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666。 选择Project-Debug,启动AXD进行JLINK仿真调试。 全速运行程序,程序将会在main.c的主函数中停止。 单击Context Variable图标按钮(或者选择Processor Views-Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择System Views-Debugger Internals 即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。 可以单步运行程序,可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断LED1LED8控制是否正确。(3)实验参考程序GPIO输出控制实验的参考程序见3-1。程序清单1 Error! No text of specified style in document.GPIO输出控制实验1的参考程序/* 文件名:main.c* 功 能:蜂鸣器控制。对蜂鸣器进行控制,采用软件延时方法。* 使用I/O口直接控制,采用灌电流方式。* 说 明:将P0.7与Beep短接。*/#include config.h#define BEEPCON 10; dly-) for(i=0; i5000; i+); /* 名 称:main()* 功 能:控制蜂鸣器蜂鸣。*/int main(void) PINSEL0 = 0x00000000; / 设置管脚连接GPIO IO0DIR = BEEPCON; / 设置I/O为输出 while(1) IO0SET = BEEPCON;/ BEEPCON = 1 DelayNS(200); IO0CLR = BEEPCON;/ BEEPCON = 0 DelayNS(200); return(0);程序清单 2#include config.h/* LED8LED1 8 个LED 分别由P1.25P1.18 控制 */const uint32 LEDS8 = (0xFF 0; dly-)for (i=0; i50000; i+);/* 函数名称:main()* 函数功能:流水灯显示实验。* 调试说明:连接跳线 JP12 至LED8LED1。*/* 流水灯花样,低电平点亮,注意调用时候用了取反操作 */const uint32 LED_TBL = 0x00, 0xFF, / 全部熄灭后,再全部点亮0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, / 依次逐个点亮0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, / 依次逐个叠加0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, / 依次逐个递减0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, / 两个靠拢后分开0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 / 从两边叠加后递减;int main (void) uint8 i;PINSEL1 = 0x00000000; / 设置管脚连接GPIOIO1DIR = LEDS8; / 设置LED 控制口为输出while (1) for (i=0; i42; i+) /* 流水灯花样显示 */IO1SET = (LED_TBLi) 18);DelayNS(20);IO1CLR = (LED_TBLi) 18);DelayNS(20);return 0;参考程序3/* 文 件 名:main.c* 功 能:LED显示控制。* 通过GPIO直接控制8个LED产生流水灯效果* 说 明:P1.18:25管脚对应与LED1:8跳线短接,把P0.16与KEY跳线短接,* 使用KEY1键来操作流水灯的运行方向*/#include config.hconst uint32 LEDS8 = 0xFF 18;/P125:18控制LED1LED8,低电平点亮const uint32 KEY = 1 0; dly-) for(i=0; i5000; i+); /* 名 称:main()* 功 能:根据表DISP_TAB来控制LED显示。*/int main(void) uint8 i; PINSEL0 = 0x00;/ P015:0 用作GPIOPINSEL1 = 0x00;/ P031:16 用作GPIO PINSEL2 = PINSEL2 & (0x08);/ P125:16连接GPIOIO1DIR = LEDS8;/ 设置P125:18为输出口,控制LED7:0 while(1) if(IO0PIN&KEY)!=0) / 测试KEY 按键 for(i=0; i8; i+)IO1CLR = DISP_TABi18;DelayNS(50);IO1SET = 0xffffffff; DelayNS(10); if(IO0PIN&KEY)=0) / 测试KEY 按键 for(i=0; i8; i+)IO1CLR = DISP_TAB2i0; dly-) for(i=0; i50000; i+); /* 名称:main()* 功能:控制LED闪烁*/int main(void) PINSEL0 = 0x00000000;/ 设置所有管脚连接GPIO PINSEL1 = 0x00000000; IO0DIR = LEDCON;/ 设置LED4控制口为输出 while(1) IO0SET = LEDCON; DelayNS(30); IO0CLR = LEDCON; DelayNS(30); return(0);六、思考(1)理解实验参考程序中Startup.S文件的作用。(2)实验程序中的main()函数名是否可以更改为其它名字?(提示:main只是一个标号。)(3)在实验参考程序中,如何控制蜂鸣器报警的速度?七、实验报告要求写出实验目的、实验仪器设备、实验原理、实验内容、源代码和操作步骤,调试结果。
展开阅读全文