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

合集下载

《嵌入式系统原理与应用》实验报告01-GPIO输出控制实验

《嵌入式系统原理与应用》实验报告01-GPIO输出控制实验
二、实验设备(环境)及要求
硬件:PC机;
软件:PC机操作系统windows XP,ADS1.2集成开发环境,Proteus软件。
3、实验内容与步骤
实验内容:
LPC2138外接3个按键,4个LED灯,实现不同流水灯的效果。
4、实验结果与数据处理
1.实验连接图
图1 实验原理图
2.程序代码
#include "config.h"
图3.3:模式3下蓝灯亮起
图3.4:模式3下绿灯亮起
5、分析与讨论
在这一次实验中,我学会了通过教程下载并安装了ADS和Proteus软件,同时根据录播,一步一步地熟悉两个软件的时候,同时也完成了利用仿真实验模拟了GPIO输出控制。初步掌握并理解了Proteus仿真软件的使用,对ARM7有了进一步的了解,为之后的学习打下了基础。
}
void LED_3(void)
{
IO0SET = 0x0001;
delay(1000);
IO0CLR = 0x0001;
IO0SET = 0x0040;
delay(1000);
IO0CLR = 0x0040;
IO0SET = 0x0008;
delay(1000);
IO0CLR = 0x0008;
delay(1000);
IO0CLR = 0x0008;
IO0SET = 0x0040;
delay(1000);
IO0CLR = 0x0040;
IO0SET = 0x0200;
delay(1000);
IO0CLR = 0x0200;
}
void LED_2(void)
{
IO0SET = 0x0200;

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统实验报告在本学期的嵌入式系统课程中,我与我的实验伙伴进行了多次实验。

在这篇报告中,我将分享我们实验的过程和结果。

实验一:GPIO控制LED灯在这个实验中,我们使用了Raspberry Pi 3B+开发板和一根杜邦线。

我们在电路板上将一盏LED灯与GPIO引脚连接起来,并编写了一个程序来控制这个引脚的电平状态。

在这个实验中,我们学习了GPIO的基本概念以及如何使用Python编程语言编写GPIO控制程序。

我们成功地让LED灯在不同的时间间隔内闪烁,并且了解了如何使用GPIO.setup()和GPIO.output()函数来控制GPIO引脚的输入和输出。

实验二:串口通信在第二个实验中,我们使用了两个Raspberry Pi 3B+开发板和两根串口线。

我们连接了两个板子的GPIO引脚,使得它们可以通过串口进行通信。

我们使用Python编写了两个程序来进行通信。

一个程序将发送一条消息,另一个程序将接收这个消息并将其打印出来。

通过使用串口通信,我们学会了如何使用Python编写程序来完成数据交换,并掌握了串口通信的基本概念。

实验三:Pi camera模块在第三个实验中,我们使用了Pi camera模块和一个Raspberry Pi 3B+开发板。

我们将摄像头连接到开发板上,并编写了一个程序来捕捉摄像头图像。

我们学习了如何使用Python编程语言来控制Pi camera模块,包括如何设置摄像头参数并如何捕捉静态图像。

我们还尝试了使用OpenCV库来处理图像。

实验四:蓝牙控制在最后一个实验中,我们使用了一个蓝牙透传模块、Raspberry Pi 3B+开发板和一些电路元件。

我们将蓝牙透传模块连接到GPIO引脚,并编写了一个程序来通过蓝牙信号控制电机。

在这个实验中,我们学习了如何使用蓝牙模块进行无线控制。

我们通过使用Python编写控制程序,成功地将蓝牙信号转换成GPIO引脚的电平信号来控制电机。

总结在这个嵌入式系统的实验中,我们学习了许多关于嵌入式系统的知识和技能。

GPIO实验报告(Word最新版)

GPIO实验报告(Word最新版)

GPIO实验报告(Word最新版)GPIO(General Purpose Input/Output)是指通用输入输出口,可以连接各种传感器、执行器以及外部设备等,用于实现与外部世界的交互。

GPIO在嵌入式系统中起到了非常重要的作用,本文将介绍基于树莓派的GPIO实验。

实验目的通过本次实验,了解如何在树莓派上使用GPIO控制LED灯的开关,同时熟悉GPIO编程接口的使用方法。

实验器材与环境1.树莓派4B开发板一块2.亮LED灯(红色)一盏3.电阻220欧姆两个4.面包板一个1.树莓派系统:Raspbian Buster with Desktop(full)2.编程语言:Python3.x实验步骤1.硬件连接首先需要将亮LED灯和220欧姆电阻连接到树莓派的GPIO口上。

因为树莓派的GPIO 输出电压是3.3V,而LED灯的电压是2.0V,因此需要使用电阻将电压控制在合适范围内,以免LED灯过亮或过暗。

连接的具体方式如下:将LED灯的正极连接到树莓派的GPIO17口(BCM编码方式下的编号),负极连接到220欧姆电阻上,再将电阻的另一端连接到树莓派的GND口(BCM编码方式下的编号)。

2.软件配置在树莓派的终端窗口中输入以下指令,安装GPIO库和Python语言的GPIO编程接口:```sudo apt-get updatesudo apt-get install python3-gpiozero```安装完成后,我们就可以通过Python代码来控制树莓派的GPIO口了。

打开新的终端窗口,输入以下命令:```sudo nano led.py```其中led.py是我们将要编写的Python程序的文件名,可以自行命名。

在终端窗口中会打开一个文本编辑器,在其中输入以下代码:led = LED(17)while True:led.on()sleep(1)led.off()sleep(1)```代码解释:1.首先从GPIO库中导入LED类和sleep函数;2.定义led变量,将它赋值为LED(17),代表树莓派的GPIO17口控制LED灯的开关;3.在无限循环中,通过led.on()和led.off()来控制LED灯的开和关,同时通过sleep 函数来产生延时效果。

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

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

真验四GPIO 输进真验之阳早格格创做一、真验手段1、不妨使用GPIO的输进模式读与开闭旗号.2、掌握GPIO相闭寄存器的用法战树坐.3、掌握用C谈话编写步调统造GPIO.二、真验环境PC机一台ADS 1.2集成开垦环境一套EasyARM2131教教真验仄台一套三、真验真质1.真验通过跳线JP8 连交,步调检测按键KEY1 的状态,统造蜂鸣器BEEP 的鸣喊.按下KEY1,蜂鸣器鸣喊,紧开后停止蜂鸣.(调通真验后,改为KEY3键举止输进).2.当检测到KEY1有按键输进时面明收光二极管LED4并统造蜂鸣器响,硬件延时后闭掉收光管并停止蜂鸣,而后循环那一历程曲到检测按键不输进.(键输进改为键KEY4,收光管改为LED6).3.分离真验三,当按下按键Key1时,开用跑马灯步调并统造蜂鸣器响,硬件延时后闭掉收光管并停止蜂鸣,而后循环那一历程曲到检测按键再次按下.四、真验本理当P0 心用于GPIO输进时(如按键输进),里面无上推电阻,需要加上推电阻,电路图拜睹图 4.2.举止 GPIO 输进真验时,先要树坐IODIR 使交心线成为输进办法,而后读与IOPIN 的值即可.图 4.2按键电路本理图真验通过跳线 JP8 连交,步调检测按键KEY1 的状态,统造蜂鸣器BEEP 的鸣喊.按下KEY1,蜂鸣器鸣喊,紧开后停止蜂鸣.正在那个真验中,需要将按键KEY1 输出心P0.16 设为输出心而蜂鸣器统造心P0.7 树坐为输出心.蜂鸣器电路如图 4.3所示,当跳线JP6 连交蜂鸣器时,P0.7 统造蜂鸣器,矮电通常蜂鸣器鸣喊.LED灯电路如图4.4所示,矮电通常灯明.图 4.3蜂鸣器统造电路图 4.4 LED 统造电路步调最先树坐管足连交寄存器PINSEL0 战PINSEL1,树坐P0.16 为输进,树坐为输出.而后检测端心P0.16 的电仄,对于举止相映的统造,过程图如图 4.5所示,真止步调睹步调浑单 4.1.图 4.5按键输进真验过程图五、真验步调、源代码及调试截止真质1真验步调①开用ADS1.2IDE集成开垦环境,采用ARM ExecutableImage for lpc2131工程模板修坐一个工程BEEP_key.②正在user组里编写主步调代码main.c.③采用DebugInFLASH死成目标,而后编译链交工程.④将EasyARM教教真验开垦仄台上的相映管足跳线短交.⑤采用Project->Debug,开用AXD举止JLINK仿真调试.⑥齐速运止步调,步调将会正在main.c的主函数中停止.如下图所示:⑦单打Context Variable图标按钮(大概者采用ProcessorViews->Variables)挨开变量瞅察窗心,通过此窗心不妨瞅察局部变量战局部变量.采用System Views->Debugger Internals 即可挨开LPC2000系列ARM7微统造器的片内中寄存器窗心.通过变量窗心不妨瞅察变量BEEP、KEY1等的值战ARM7微统造器的片内中寄存器窗心.如下图所示:⑧不妨单步运止步调,先按下Key1,瞅察IO0PIN寄存器的值,而后断开Key1,瞅察IO0PIN寄存器的值.不妨树坐/与消断面;大概者齐速运止步调,停止步调运止,瞅察变量的值,推断蜂鸣器统造是可精确.如下图所示:图4.6 已按下Key1时IO0PIN 的值图4.7 按下Key1时IO0PIN的值由上二图可知,当按下Key1时,IO0PIN寄存器的第16位由1形成0(F形成E),key1与P,按下Key1时,1形成0,寄存器值变更,蜂鸣器响,证明统造是精确的.局面形貌:按下KEY1,蜂鸣器鸣喊,紧开后停止蜂鸣.源代码:#include "config.h"const uint32 BEEP = 1 << 7; // P0.7 统造蜂鸣器const uint32 KEY1 = 1 << 16; // P0.16 连交KEY1(改为KEY3时,只需“const uint32 KEY1 = 1 << 16”改为“const uint32 KEY3 = 1 << 18”,其余稳定.)/***************************************************** **************************************** 函数称呼:main()** 函数功能:GPIO 输进真验尝试.** 检测按键KEY1.KEY1 按下,蜂鸣器蜂鸣,紧开后停止蜂鸣.** 跳线证明:把 JP8 的KEY1 跳线短交,JP11 连交蜂鸣器.****************************************************** *************************************/int main (void){ PINSEL0 = 0x00000000; // 所有管足连交GPIOPINSEL1 = 0x00000000;IO0DIR = BEEP; // 蜂鸣器统造心输出,其余输进while (1){ if ((IO0PIN & KEY1) == 0) IO0CLR = BEEP; // 如果KEY1 按下,蜂鸣器鸣喊else IO0SET = BEEP; // 紧开则停止蜂鸣}return 0;}真质二真验步调①开用ADS1.2IDE集成开垦环境,采用ARM ExecutableImage for lpc2131工程模板修坐一个工程BEEP_key.②正在user组里编写主步调代码main.c.③采用DebugInFLASH死成目标,而后编译链交工程.④将EasyARM教教真验开垦仄台上的相映管足跳线短交.⑤采用Project->Debug,开用AXD举止JLINK仿真调试.⑥齐速运止步调,步调将会正在main.c的主函数中停止.如下图所示:⑦单打Context Variable图标按钮(大概者采用Processor Views->Variables)挨开变量瞅察窗心,通过此窗心不妨瞅察局部变量战局部变量.采用System Views->Debugger Internals 即可挨开LPC2000系列ARM7微统造器的片内中寄存器窗心.通过变量窗心不妨瞅察变量BEEP、KEY1等局部变量、i 等当天变量战ARM7微统造器的片内中寄存器窗心.如下图所示:左图所示为ARM7微统造器的片内寄存器窗心.图4.9 当天变量图4.8 局部变量⑧不妨单步运止步调,先按下Key1,瞅察IO0PIN寄存器的值,而后断开Key1,瞅察IO0PIN寄存器的值.不妨树坐/与消断面;大概者齐速运止步调,停止步调运止,瞅察变量的值,推断蜂鸣器统造是可精确.如下图所示:.图已按下KEY1时IO0PIN的值图 4.11 按下KEY1后IO0PIN的值对于比图 4.10战4.11,创造按下KEY1后,IO0PIN寄存器的第16位由1形成0;而KEY,当按下时输进矮电仄,那证明KEY1的统造是精确的.上图所示为运止“IO0CLR = BEEP”后IO0PIN寄存器的值,与图4.10对于比,创造第8位由1形成0,BEEP对于应P,那证明BEEP的统造是对于的.局面形貌:当按下KEY1时,蜂鸣器鸣响,LED4明;当紧开KEY1后,蜂鸣器静音,LED4灭.源代码如下:#include "config.h"const uint32 BEEP = 1 << 7; // P0.7 统造蜂鸣器const uint32 KEY1 = 1 << 16; // P0.16 连交KEY1(改为KEY4按键时,只需把上句代码改为“const uint32 KEY4=1<<19”,其余稳定)const uint32 LEDS4= 1 << 21; // P1[21]统造LED4,矮电仄面明(改为LED6时,只需把上句代码改为“const uint32 LED6=1<<23”,其余稳定.)/***************************************************** ************************ 函数称呼:main()** 函数功能:GPIO 输进真验尝试.** 检测按键KEY1.KEY1 按下,蜂鸣器蜂鸣,紧开后停止蜂鸣.** 跳线证明:把 JP8 的KEY1 跳线短交,JP11 连交蜂鸣器.****************************************************** *************************************/int main (void){Uint32 i;PINSEL0 = 0x00000000; // 所有管足连交GPIOPINSEL1 = 0x00000000;IO0DIR = BEEP; // 蜂鸣器统造心输出0IO1DIR = LEDS4; // 树坐LED4灯明while (1){ if ((IO0PIN & KEY1) == 0)for(i=0; i<1000; i++); // 硬件延时{IO0CLR = BEEP; // 如果KEY1 按下,蜂鸣器鸣喊IO1DCLR = LEDS4; // 树坐LED4灯明}else{IO0SET = BEEP; // 紧开则停止蜂鸣IO1SET= LEDS4; // 树坐LED4灯灭}for(i=0; i<1000; i++); // 硬件延时}return 0;}真质三真验步调①开用ADS1.2IDE集成开垦环境,采用ARM ExecutableImage for lpc2131工程模板修坐一个工程BEEP_key.②正在user组里编写主步调代码main.c.③采用DebugInFLASH死成目标,而后编译链交工程.④将EasyARM教教真验开垦仄台上的相映管足跳线短交.⑤采用Project->Debug,开用AXD举止JLINK仿真调试.⑥齐速运止步调,步调将会正在main.c的主函数中停止.如下图所示:⑦单打Context Variable图标按钮(大概者采用ProcessorViews->Variables)挨开变量瞅察窗心,通过此窗心不妨瞅察局部变量战局部变量.采用System Views->Debugger Internals 即可挨开LPC2000系列ARM7微统造器的片内中寄存器窗心.通过变量窗心不妨瞅察变量BEEP、KEY1等的值战ARM7微统造器的片内中寄存器窗心.如下图所示:⑧不妨单步运止步调,先按下Key1,瞅察IO0PIN寄存器的值,而后断开Key1,瞅察IO0PIN寄存器的值.不妨树坐/与消断面;大概者齐速运止步调,停止步调运止,瞅察变量的值,推断蜂鸣器统造是可精确.如下图所示:1时IO0PIN的值1时IO0PIN 的值由上二图可知,当按下Key1时,IO0PIN寄存器的第16位由1形成0(F形成E),key1与P,按下Key1时,1形成0,寄存器值变更,蜂鸣器响,流火灯明,证明统造是精确的.局面形貌:当按下按键KEY1时,蜂鸣器鸣响,流火灯明;紧开后,蜂鸣器静音,流火灯灭.源代码如下:#include "config.h"const uint32 BEEP = 1 << 7; // P0.7 统造蜂鸣器const uint32 KEY = 1 << 16; // P0.16 连交KEY1const uint32 LEDS8 = 0xFF << 18; // P1[25:18]统造LED8~LED1,矮电仄面明void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--){for(i=0; i<50000; i++);}}/***************************************************** **************************************** 函数称呼:liushuideng()** 函数功能:流火灯隐现真验.** 调试证明:连交跳线 JP12 至LED8~LED1.****************************************************** *************************************//* 流火灯格式,矮电仄面明,注意调用时间用了与反支配 */ 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 liushuideng(void){ uint8 i;PINSEL1 = 0x00000000; // 树坐管足连交GPIOIO1DIR = LEDS8; // 树坐LED 统造心为输出while (1){for (i=0; i<42; i++){ /* 流火灯格式隐现 */IO1SET = ~((LED_TBL[i]) << 18);DelayNS(20);IO1CLR = ((LED_TBL[i]) << 18);DelayNS(20);}}return 0;}//主函数int main(void){uint32 i;PINSEL0 = 0x00000000; // 所有管足连交GPIOPINSEL1 = 0x00000000;IO0DIR = BEEP; // 蜂鸣器统造心输出0while (1){ if ((IO0PIN & KEY) == 0){for(i=0; i<1000; i++); // 硬件延时{IO0CLR = BEEP; // 如果KEY 按下,蜂鸣器鸣喊liushuideng();}}else{IO0SET = BEEP; // 紧开则停止蜂鸣IO1SET= LEDS8;}for(i=0; i<100; i++); // 硬件延时}return 0;}六、思索题1、如果将P0.30树坐为GPIO输进模式,且管足悬空,那么读与P0.30得到的值是0仍旧1?大概者是不决定?当管足悬空时,该管足有大概是下电仄也有大概是矮电仄.读与IO0PIN的值本来不克不迭决定管教的值.偶尔管足是下电仄,读与到的纷歧定是下电仄.2、如果需要读与目前P0.7的输出值(不是管足上的电仄),怎么样真止?将该管足与一个LED连交,若LED明,则输出值为0,可则为1.。

gpio实验报告总结

gpio实验报告总结

GPIO实验报告总结一、实验目的与背景本次GPIO实验的主要目的是深入了解GPIO(General Purpose Input/Output)接口的工作原理和应用,通过实际操作和数据分析,提高对嵌入式系统硬件接口的理解和掌握。

实验背景是基于当前嵌入式系统在各种应用中的普及,GPIO 接口作为其中重要的硬件接口,对于理解嵌入式系统的运作方式具有重要意义。

二、GPIO基础知识GPIO接口是一种通用输入输出接口,它允许CPU与外部设备或传感器进行通信。

通过设置GPIO引脚的电平状态,CPU可以向外部设备发送数据,同时也可以接收外部设备发送的数据。

在嵌入式系统中,GPIO接口被广泛应用于各种硬件设备的控制和数据采集。

三、实验设备与工具本次实验使用的设备包括开发板、杜邦线、电源适配器、串口调试工具等。

其中,开发板提供了丰富的GPIO接口和外设接口,方便我们进行实验操作。

串口调试工具用于实时监控和调试实验过程。

四、实验步骤与操作连接实验设备:将开发板与电源适配器连接,为开发板提供稳定的电源。

使用杜邦线连接开发板的GPIO接口和外设接口,确保连接可靠。

编写程序:根据实验要求,编写相应的程序代码。

在程序中,我们需要配置GPIO引脚的工作模式(输入或输出),并控制引脚的电平状态进行数据传输。

下载程序:将程序代码下载到开发板中,启动程序。

实验操作:通过串口调试工具观察程序的运行状态和GPIO引脚的电平变化。

根据实验要求,进行相应的操作,如读取传感器数据、控制外部设备等。

记录数据:在实验过程中,记录关键步骤的实验数据和结果,以便后续分析和解释。

五、实验数据与结果通过实验操作,我们获得了以下数据和结果:GPIO引脚配置成功,可以正常工作在输入或输出模式。

通过GPIO接口成功读取了传感器数据,数据准确无误。

通过GPIO接口成功控制了外部设备,实现了预期的功能。

在实验过程中,记录了详细的实验数据和结果,包括GPIO引脚的电平状态、传感器数据、外部设备控制状态等。

gpio实验报告

gpio实验报告

gpio实验报告GPIO实验报告引言:GPIO(General Purpose Input/Output)是通用输入/输出引脚的简称,是一种常用的数字接口技术。

在嵌入式系统和电子设计中,GPIO被广泛应用于与外部设备进行数据交互的过程中。

本实验报告将介绍GPIO的原理、应用以及实验过程和结果。

一、GPIO的原理和应用1.1 GPIO的原理GPIO是一种数字接口技术,通过控制电压的高低来实现数据输入和输出。

在嵌入式系统中,GPIO通常由微控制器或单片机提供,可以通过编程来控制GPIO 的状态。

GPIO引脚通常具有输入和输出两种模式,可以根据需要进行配置。

1.2 GPIO的应用GPIO在嵌入式系统和电子设计中有广泛的应用。

例如,可以使用GPIO将传感器的数据输入到微控制器,实现数据采集和处理;同时,也可以使用GPIO将微控制器的计算结果输出到执行器,实现控制功能。

此外,GPIO还可以用于控制LED灯、蜂鸣器等外部设备,实现各种交互效果。

二、实验过程和结果2.1 实验准备在进行GPIO实验之前,我们需要准备以下材料:- 一块可编程的嵌入式开发板- 杜邦线- LED灯- 电阻2.2 实验步骤1. 将LED灯的长脚连接到开发板的GPIO引脚上,短脚连接到电阻上,再将电阻的另一端连接到开发板的地线上。

2. 打开开发板的开发环境,创建一个新的项目。

3. 在项目中编写代码,配置GPIO引脚为输出模式。

4. 在代码中控制GPIO引脚的电平,使LED灯点亮。

5. 将代码下载到开发板上,观察LED灯是否亮起。

2.3 实验结果经过实验,我们成功地控制了GPIO引脚,使LED灯点亮。

这验证了GPIO的工作原理和应用。

三、实验总结通过本次实验,我们了解了GPIO的原理和应用,并成功地进行了实验验证。

GPIO作为一种常用的数字接口技术,在嵌入式系统和电子设计中具有重要的作用。

掌握GPIO的使用方法,可以实现与外部设备的数据交互和控制功能。

嵌入式实验四实验报告

嵌入式实验四实验报告

嵌入式实验四实验报告实验四:嵌入式编程设计
实验设计目的:
1. 学习使用嵌入式开发工具进行编程设计;
2. 学习使用C语言编写嵌入式程序;
3. 学习使用GPIO模块进行输入输出;
4. 学习使用中断处理函数。

实验器材:
1. 嵌入式开发板;
2. USB数据线;
3. 电脑;
4. LED灯;
5. 电阻;
6. 蜂鸣器;
7. 其他必要的电路元件。

实验步骤:
1. 连接开发板和计算机,安装开发板驱动程序;
2. 打开嵌入式开发工具,创建一个新的工程;
3. 在工程中添加一个C文件,编写程序;
4. 编写程序实现以下功能:
- 使用GPIO模块控制LED灯的亮、灭;
- 使用GPIO模块读取按键状态;
- 使用GPIO模块控制蜂鸣器的开、关;
- 使用Timer模块计时;
- 使用中断处理函数处理外部中断;
- 其他必要的功能;
5. 编译程序,下载到开发板;
6. 运行程序,测试功能是否正常。

实验结果与分析:
实验结果应当是LED灯、蜂鸣器、按键正常工作,可以通过按键控制LED灯的亮、灭、蜂鸣器的开、关。

实验总结:
通过本次实验,我学会了使用嵌入式开发工具进行编程设计,掌握了使用C语言编写
嵌入式程序的方法。

通过实验,我深入理解了嵌入式系统的原理和实现方法,对嵌入
式系统的应用有了更加深入的了解。

在今后的学习和工作中,我将能够更好地运用嵌
入式技术解决实际问题。

GPIO的使用实验报告

GPIO的使用实验报告

GPIO的使用实验报告本实验报告以“GPIO的使用”为主题,介绍了GPIO的基本概念、使用方法和在实际应用中的一些案例。

报告总共分为四个部分:介绍部分、实验原理、实验过程和实验结果分析。

一、介绍部分GPIO是General Purpose Input/Output的简称,中文名称为通用输入输出。

它是处理器芯片与外部电路之间的一个接口,可以通过编程来控制和读取电平状态。

通常情况下,GPIO的引脚既可以作为输入引脚,也可以作为输出引脚。

二、实验原理三、实验过程1. 设置GPIO引脚模式:在Python中,可以使用RPi.GPIO库来控制GPIO引脚。

首先需要导入RPi.GPIO库,然后使用GPIO.setmode(GPIO.BCM)来设置编码方式为BCM。

接着可以使用GPIO.setup(函数来设置引脚的输入/输出模式。

例如,GPIO.setup(17, GPIO.OUT)将引脚17设置为输出模式。

2. 控制输出引脚:使用GPIO.output(函数可以控制引脚的电平状态。

例如,GPIO.output(17, GPIO.HIGH)将引脚17设置为高电平,GPIO.output(17, GPIO.LOW)将引脚17设置为低电平。

3. 读取输入引脚:使用GPIO.input(函数可以读取引脚的电平状态。

例如,state = GPIO.input(17)将引脚17的电平状态赋值给变量state。

四、实验结果分析在实验中,我们先将引脚设置为输出模式,然后控制引脚输出高低电平,观察LED等外部设备的亮灭情况。

接着将引脚设置为输入模式,读取引脚的电平状态,判断外部设备的开关状态。

通过这些操作,我们可以了解到GPIO的基本使用方法和在实际应用中的一些场景。

总结:本次实验通过树莓派和GPIO库控制了GPIO引脚的输入和输出。

实验结果表明,我们可以通过编程实现对GPIO引脚的控制,进而控制外部设备的工作状态,实现了与外部电路的交互。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四GPIO 输入实验一、实验目的1、能够使用GPIO的输入模式读取开关信号。

2、掌握GPIO相关寄存器的用法和设置。

3、掌握用C语言编写程序控制GPIO。

二、实验环境PC机一台ADS 1.2集成开发环境一套EasyARM2131教学实验平台一套三、实验内容1.实验通过跳线JP8 连接KEY1与P0.16,程序检测按键KEY1 的状态,控制蜂鸣器BEEP 的鸣叫。

按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。

(调通实验后,改为KEY3键进行输入)。

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

(键输入改为键KEY4,发光管改为LED6)。

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

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

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

图4.2按键电路原理图实验通过跳线JP8 连接KEY1_P0.16,程序检测按键KEY1 的状态,控制蜂鸣器BEEP 的鸣叫。

按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。

在这个实验中,需要将按键KEY1 输入口P0.16 设为输入口而蜂鸣器控制口P0.7 设置为输出口。

蜂鸣器电路如图 4.3 所示,当跳线JP6 连接蜂鸣器时,P0.7 控制蜂鸣器,低电平时蜂鸣器鸣叫。

LED灯电路如图4.4所示,低电平时灯亮。

图4.3 蜂鸣器控制电路图 4.4 LED 控制电路程序首先设置管脚连接寄存器PINSEL0 和PINSEL1,设置P0.16 为输入,设置P0.7,P1.21 为输出。

然后检测端口P0.16 的电平,对P0.7, P1.21进行相应的控制,流程图如图4.5 所示,实现程序见程序清单 4.1。

图 4.5 按键输入实验流程图五、实验步骤、源代码及调试结果内容1实验步骤①启动ADS1.2IDE集成开发环境,选择ARM Executable Image for lpc2131工程模板建立一个工程BEEP_key。

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

③选用DebugInFLASH生成目标,然后编译链接工程。

④将EasyARM教学实验开发平台上的相应管脚跳线短接。

⑤选择Project->Debug,启动AXD进行JLINK仿真调试。

⑥全速运行程序,程序将会在main.c的主函数中停止。

如下图所示:⑦单击Context Variable图标按钮(或者选择Processor Views->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。

选择System Views->Debugger Internals 即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。

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

如下图所示:⑧可以单步运行程序,先按下Key1,观察IO0PIN寄存器的值,然后断开Key1,观察IO0PIN寄存器的值。

可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。

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

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

源代码:#include "config.h"const uint32 BEEP = 1 << 7; // P0.7 控制蜂鸣器const uint32 KEY1 = 1 << 16; // P0.16 连接KEY1(改为KEY3时,只需“const uint32 KEY1 = 1 << 16”改为“const uint32 KEY3 = 1 << 18”,其余不变。

)/********************************************************************************************* 函数名称:main()** 函数功能:GPIO 输入实验测试。

** 检测按键KEY1。

KEY1 按下,蜂鸣器蜂鸣,松开后停止蜂鸣。

** 跳线说明:把JP8 的KEY1 跳线短接,JP11 连接蜂鸣器。

*******************************************************************************************/int main (void){ PINSEL0 = 0x00000000; // 所有管脚连接GPIOPINSEL1 = 0x00000000;IO0DIR = BEEP; // 蜂鸣器控制口输出,其余输入while (1){ if ((IO0PIN & KEY1) == 0) IO0CLR = BEEP; // 如果KEY1 按下,蜂鸣器鸣叫else IO0SET = BEEP; // 松开则停止蜂鸣}return 0;}内容二实验步骤①启动ADS1.2IDE集成开发环境,选择ARM Executable Image for lpc2131工程模板建立一个工程BEEP_key。

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

③选用DebugInFLASH生成目标,然后编译链接工程。

④将EasyARM教学实验开发平台上的相应管脚跳线短接。

⑤选择Project->Debug,启动AXD进行JLINK仿真调试。

⑥全速运行程序,程序将会在main.c的主函数中停止。

如下图所示:⑦单击Context Variable图标按钮(或者选择Processor Views->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。

选择System Views->Debugger Internals 即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。

通过变量窗口可以观察变量BEEP、KEY1等全局变量、i等本地变量和ARM7微控制器的片内外寄存器窗口。

如下图所示:左图所示为ARM7微控制器的片内寄存器窗口。

图4.9 本地变量图4.8 全局变量⑧可以单步运行程序,先按下Key1,观察IO0PIN寄存器的值,然后断开Key1,观察IO0PIN寄存器的值。

可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。

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

上图所示为运行“IO0CLR = BEEP”后IO0PIN寄存器的值,与图4.10对比,发现第8位由1变为0,BEEP对应P0.7管脚,这说明BEEP的控制是对的。

现象描述:当按下KEY1时,蜂鸣器鸣响,LED4亮;当松开KEY1后,蜂鸣器静音,LED4灭。

源代码如下:#include "config.h"const uint32 BEEP = 1 << 7; // P0.7 控制蜂鸣器const uint32 KEY1 = 1 << 16; // P0.16 连接KEY1(改为KEY4按键时,只需把上句代码改为“const uint32 KEY4=1<<19”,其余不变)const uint32 LEDS4= 1 << 21; // P1[21]控制LED4,低电平点亮(改为LED6时,只需把上句代码改为“const uint32 LED6=1<<23”,其余不变。

)/***************************************************************************** 函数名称:main()** 函数功能:GPIO 输入实验测试。

** 检测按键KEY1。

KEY1 按下,蜂鸣器蜂鸣,松开后停止蜂鸣。

** 跳线说明:把JP8 的KEY1 跳线短接,JP11 连接蜂鸣器。

*******************************************************************************************/int main (void){Uint32 i;PINSEL0 = 0x00000000; // 所有管脚连接GPIOPINSEL1 = 0x00000000;IO0DIR = BEEP; // 蜂鸣器控制口输出0IO1DIR = LEDS4; // 设置LED4 灯亮while (1){ if ((IO0PIN & KEY1) == 0)for(i=0; i<1000; i++); // 软件延时{IO0CLR = BEEP; // 如果KEY1 按下,蜂鸣器鸣叫IO1DCLR = LEDS4; // 设置LED4 灯亮}else{IO0SET = BEEP; // 松开则停止蜂鸣IO1SET= LEDS4; // 设置LED4 灯灭}for(i=0; i<1000; i++); // 软件延时}return 0;}内容三实验步骤①启动ADS1.2IDE集成开发环境,选择ARM Executable Image for lpc2131工程模板建立一个工程BEEP_key。

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

③选用DebugInFLASH生成目标,然后编译链接工程。

④将EasyARM教学实验开发平台上的相应管脚跳线短接。

⑤选择Project->Debug,启动AXD进行JLINK仿真调试。

⑥全速运行程序,程序将会在main.c的主函数中停止。

如下图所示:⑦单击Context Variable图标按钮(或者选择Processor Views->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。

相关文档
最新文档