您的当前位置:首页正文

嵌入式系统GPIO 输入输出实验报告

来源:个人技术集锦
实验四 GPIO 输入实验

一、实验目的

1、能够使用GPIO的输入模式读取开关信号。 2、掌握GPIO相关寄存器的用法和设置。 3、掌握用C语言编写程序控制GPIO。

二、实验环境

PC机

一台

ADS 集成开发环境 一套

EasyARM2131教学实验平台 一套

三、实验内容

1.实验通过跳线 JP8 连接KEY1与,程序检测按键KEY1 的状态,控制蜂鸣器BEEP 的鸣叫。按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。(调通实验后,改为KEY3键进行输入)。

2.当检测到KEY1有按键输入时点亮发光二极管LED4并控制蜂鸣器响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键没有输入。(键输入改为键KEY4,发光管改为LED6)。

3.结合实验三,当按下按键Key1时,启动跑马灯程序并控制蜂鸣器响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键再次按下。

四、实验原理

当P0 口用于GPIO输入时(如按键输入),内部无上拉电阻,需要加上拉电阻,电路图参见图 。

进行 GPIO 输入实验时,先要设置IODIR 使接口线成为输入方式,然后读取IOPIN 的值即可。

图 按键电路原理图

实验通过跳线 JP8 连接,程序检测按键KEY1 的状态,控制蜂鸣器BEEP 的鸣叫。按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。

在这个实验中,需要将按键KEY1 输入口 设为输入口而蜂鸣器控制口 设置为输出口。蜂鸣器电路如图 所示,当跳线JP6 连接蜂鸣器时, 控制蜂鸣器,低电平时蜂鸣器鸣叫。LED灯电路如图所示,低电平时灯亮。

图 蜂鸣器控制电路

图 LED 控制电路

程序首先设置管脚连接寄存器PINSEL0 和PINSEL1,设置 为输入,设置, 为输出。然后检测端口 的电平,对, 进行相应的控制,流程图如图 所示,实现程序见程序清单 。

图 按键输入实验流程图

五、实验步骤、源代码及调试结果

内容1

实验步骤

① 启动集成开发环境,选择ARM Executable Image for lpc2131工程模板建立一

个工程BEEP_key。

② 在user组里编写主程序代码。

③ 选用DebugInFLASH生成目标,然后编译链接工程。 ④ 将EasyARM教学实验开发平台上的相应管脚跳线短接。 ⑤ 选择Project->Debug,启动AXD进行JLINK仿真调试。 ⑥ 全速运行程序,程序将会在的主函数中停止。如下图所示:

⑦ 单击Context Variable图标按钮(或者选择Processor Views->Variables)打开

变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择System Views->Debugger Internals 即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。

通过变量窗口可以观察变量BEEP、KEY1等的值和ARM7微控制器的片内外寄存器窗口。如下图所示:

⑧ 可以单步运行程序,先按下Key1,观察IO0PIN寄存器的值,然后断开Key1,观察IO0PIN寄存器的值。可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。如下图所示:

由上两图可知,当按下Key1时,IO0PIN寄存器的第16位由1变为0(F变为E),key1与相连,按下Key1时,管脚输出电平由1变为0,寄存器值变化,蜂鸣器响,说明控制是正确的。

图 未按下Key1时IO0PIN的值 图 按下Key1时IO0PIN的值

现象描述:按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。 源代码:

#include \"\"

const uint32 BEEP = 1 << 7;

图 未按下KEY1时IO0PIN的值 图 按下KEY1后IO0PIN的值

对比图和,发现按下KEY1后,IO0PIN寄存器的第16位由1变为0;而KEY1对应管脚,当按下时输入低电平,这说明KEY1的控制是正确的。

上图所示为运行 “IO0CLR = BEEP”后IO0PIN寄存器的值,与图对比,发现第8位由1变为0,BEEP对应管脚,这说明BEEP的控制是对的。 现象描述:当按下KEY1时,蜂鸣器鸣响,LED4亮;当松开KEY1后,蜂鸣器静音,

LED4灭。

源代码如下:

#include \"\"

const uint32 BEEP = 1 << 7;

因篇幅问题不能全部显示,请点此查看更多更全内容