gpio控制实验实验报告(9篇)
篇一:gpio控制实验实验报告
GPIO实验
实验1LED闪烁
一.实验任务
P0,P1端口的LED亮300ms,灭300ms,如此循环。发光二极管在不停地一亮一灭,时间间隔为300ms。形成闪烁的效果。
二、实验步骤
1.用keil软件在电脑上编写和编译源程序。
2、在ME850实验开发仪上,将JP1(MCU类型选择跳线)的跳线帽
短接在“51”的位置,JP9的跳线帽全部插上;
3、将AT89S51单片机芯片放入ME850的锁紧插座,芯片缺口方向在上;
4、启动MEFlash软件,正常打开候后右下角会显示实验仪的型号和连接状态。如不能联机,强检查USB驱动是否正常安装,供电电压是否为正常的5V;
5、在软件中点击“器件”按钮,选择型号“AT89S52”;
6、在软件中点击“加载”按钮,定位到产品光盘Examples_A51\EX1_LED\LED.HEX,点击“打开”,弹出“加载文件”对话框,安默认点击确定即可;
7、在软件中点击“擦除”按钮,再点击“编程”按钮,编程完毕,即可看到16个发光二极管都在闪烁了。
三、汇编源程序:
ORG0000H;汇编起始地址为0000HAJMPMAIN;跳转到主程序
ORG0050H;汇编起始地址为0050H
MAIN:MOVP0,#0FFH;将端口P0初始化高电平
MOVP2,#0FFH;将端口P2初始化高电平
LOOP:MOVP0,#00H;将端口P0设置为低电平,LED显示
MOVP2,#00H;将端口P2设置为低电平,LED显示
ACALLDELAY;调用子程序DELAY,延时300ms
MOVP0,#0FFH;将端口P0设置为高电平关闭LED显示
MOVP2,#0FFH;将端口P2设置为高电平关闭LED显示
ACALLDELAY;跳转到延时子程序DELAY,延时300ms
AJMPLOOP
;跳转到LOOP子程序
;------------------------------------------------;延时子程序
;延时300ms(11.0592MHz);------------------------------------------------DELAY:;用R5、R6、R7控制循环
MOVR5,#3;R5赋值为3DEL1:MOVR6,#200;R6赋值为200DEL2:MOVR7,#230;R7赋值为230DEL3:DJNZR7,DEL3;第一层循环
DJNZR6,DEL2;第二层循环
DJNZR5,DEL1;第三层循环
RET
END;结束,返回主程序
四.程序流程图
延时300ms后,程序返回,继续执行。
注意事项:
1)是否正确加载了烧写文件(必须先选芯片再加载文件)
2)检查是否正确放置了芯片(现房芯片,再压下锁紧座手柄锁紧)
3)检查单片机芯片是否已经损坏;如已损坏,需更换器件
五.实验现象
P0、P2端口的LED亮300ms,灭300ms,如此循环。发光二极管在不停地一亮
一灭,间隔时间为300ms,形成闪烁效果。
实验2LED流水灯
一
实验任务
P0、P2端口的LED先从从右至左方向依次点亮,再从左至右方向依次点亮,如此循环形成流水灯效果。
二、实验步骤
1、首先在硬盘上建立一个文件夹;
2、启动KeilC51软件;
3、执行KeilC51软件的菜单“Project|NewProject??”,弹出一个名为“CreateNewProject”的对话框。输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;
4、紧接着弹出“OptionsforTarget‘Target1’”,为刚才的项目选择ATMEL的AT89S52的CPU。选择之后,点击“确定”按钮;
5、接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;
6、执行
菜单“File|New??”,出现一个名为“Text1”的文档。接着执行菜单“File|Save”弹出一个名为“SaveAs”的对话框,将文件名改为“.asm”后缀,然后保存;
7、添加源程序文件到工程中,一个空的源程序文件建成。单击KeilC51软件左边项目工作窗口“Target1”上的“+”,将其展开。然后右击“SourceGroup1”文件夹弹出下拉菜单,单击其中的“AddFilestoGroup‘SourceGroup1’”项;
8、在弹出的对话框中先选择文件类型为“AsmSourcefile(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“SourceGroup1”文件夹中;
输入源程序代码;
9、点击工具栏“Optionsfortarget”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。点击Output选项,选中“CreateHexFile”,10、单击编译按钮,编译当前源程序;
11、运行,查看效果。
三、汇编源程序
ORG0000H;汇编起始地址为0000HAJMPMAIN;跳转到主程序
ORG0050H;汇编起始地址为0050H;------------------------------------------------MAIN:MOVP0,#0FFH;将端口P0初始化为高电平
MOVP2,#0FFH;将端口P2初始化为高电平
LOOP:MOVA,#0FEH;赋初始值
MOVR0,#08H;移动次数8次
LOOPL:;左移显示
MOVP0,A;送数显示
MOVP2,A;送数显示
RLA;左移一位
ACALLDELAY;延时300msDJNZR0,LOOPL;是否左移8次?
控制循环8次
MOVP0,#0FFH;关闭LED显示
MOVP2,#0FFH;关闭LED显示
ACALLDELAY;延时300ms
MOVA,#7FH;赋初始值
MOVR0,#08H;移动次数
LOOPR:;右移显示
MOVP0,A;送数显示
MOVP2,A;送数显示
RRA;右移一位
ACALLDELAY;延时300msDJNZR0,LOOPR;是否右移8次?控制循环8次
MOVP0,#0FFH;关闭显示
MOVP2,#0FFH;关闭显示
ACALLDELAY;延时300ms
AJMPLOOP;跳转到LOOP
;------------------------------------------------;延时子程序
;延时300ms(11.0592MHz);------------------------------------------------DELAY:;R5、R6、R7控制循环
MOVR5,#3;R5赋值为3DEL1:MOVR6,#200;R6赋值为200DEL2:MOVR7,#230;R7赋值为230DEL3:DJNZR7,DEL3;第一层循环
DJNZR6,DEL2;第二层循环
DJNZR5,DEL1;第三层循环
RET;------------------------------------------------END;结束
四、流程图
五、实验现象
LED灯从右至左依次点亮,然后又从左向右依次点亮。可按F10或F11控制。
实验3继电器控制
一.实验任务
用按键控制继电器的工作状态:
K1-吸和键,K2-释放键
按K1键,继电器吸合,DL11灯亮
按K2键,继电器释放,DL11灯灭
二.实验步骤
首先短接JP16短接子,使继电器借口电路使能,并将JP8的8个短接子全部
用短接帽短接,使独立按键与相应的端口接通。
其余步骤仿照实验2的步骤
三.程序流程图
四.汇编源程序
KEY_NEWEQU40HKEY_OLDEQU41H
K1BITP1.4;K2BITP1.5;RELAYBITP3.6;继电器控制线
;----------------------------------------------------------ORG0000H;汇编起始地址为0000HAJMPMAIN;跳转到主程序
ORG0050H;汇编起始地址为0050HMAIN:;主程序
MOVSP,#60H;设置栈指针
MOVP0,#0FFH;将P0端口初始化为高电平
MOVP2,#0FFH;将P2端口初始化为高电平
MOVKEY_OLD,#03H;初始键比较值
KEY_CHK:;循环检测按键是否按下
ACALLSCAN_KEY;输入按键状态
XRLA,KEY_OLD;查按键值是否改变
JZKEY_CHK;若无键被按,则跳回KEY_CHK
ACALLDELAY;延时去抖
ACALLSCAN_KEY;再次检查按键值
XRLA,KEY_OLD;查按键值是否改变
JZKEY_CHK;若无键被按,则跳回KEY_CHK
MOVKEY_OLD,KEY_NEW;保存按键状态
ACALLPROC_KEY;转移到子程序PROC_KEYAJMPKEY_CHK;跳转到子程序KEY_CHK
;---------------------------------------------------------
;扫描按键子程序
;返回值:A---按键状态
;---------------------------------------------------------SCAN_KEY:CLRA;清零
MOVC,K1MOVACC.0,C;把K1赋给ACC.0MOVC,K2MOVACC.1,C;把K2赋给ACC.1MOVKEY_NEW,A;无键按下key_new=03HRET;返回
;---------------------------------------------------------
;按键处理子程序
;---------------------------------------------------------PROC_KEY:MOVA,KEY_NEWJNBACC.0,PROC_K1;K1键按下
JNBACC.1,PROC_K2;K2键按下
RETPROC_K1:;按键K1处理程序
CLRRELAY;继电器吸合
RET;返回
PROC_K2:;按键K2处理程序
SETBRELAY;继电器释放
RET;返回
;---------------------------------------------------------
;延时子程序(10MS)
;---------------------------------------------------------DELAY:;R6、R7控制循环
MOVR6,#10;R6赋值为10DEL1:MOVR7,#185;R7赋值为185DEL2:NOP;空操作,延迟一个机器周期
NOPNOPDJNZR7,DEL2;第一层循环
DJNZR6,DEL1;第二层循环
RET;返回
;---------------------------------------------------------
END;结束
五.实验现象
按K1键,DL11亮;按K2键,DL11灭。
篇二:gpio控制实验实验报告
GPIO实验报告(Word最新版)
GPIO(GeneralPurposeInput/Output)是指通用输入输出口,可以连接各种传感器、执行器以及外部设备等,用于实现与外部世界的交互。GPIO在嵌入式系统中起到了非常重要的作用,本文将介绍基于树莓派的GPIO实验。
实验目的通过本次实验,了解如何在树莓派上使用GPIO控制LED灯的开关,同时熟悉GPIO编程接口的使用方法。
实验器材与环境
1.树莓派4B开发板一块
2.亮LED灯(红色)一盏
3.电阻220欧姆两个
4.面包板一个
1.树莓派系统:RaspbianBusterwithDesktop(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编程接口:
```
sudoapt-getupdate
sudoapt-getinstallpython3-gpiozero
```
安装完成后,我们就可以通过Python代码来控制树莓派的GPIO口了。
打开新的终端窗口,输入以下命令:
```
sudonanoled.py
```
其中led.py是我们将要编写的Python程序的文件名,可以自行命名。
在终端窗口中会打开一个文本编辑器,在其中输入以下代码:
led=LED(17)
whileTrue:
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函数来产生延时效果。
4.运行Python程序
保存代码并退出文本编辑器。接下来在终端窗口中输入以下命令,运行Python程序:
程序将会开始运行,LED灯的状态会周期性地变化。
实验结果与分析
本次实验实现了通过Python代码控制树莓派GPIO口控制LED灯的开关,并且成功运行了代码,观察到了LED灯的状态周期性变化的效果。
本次实验还涉及到了Python编程语言,主要了解了Python下的GPIO编程接口的使用方法,为以后的树莓派应用开发奠定了一定的基础。
本次实验比较简单,但对于初学者而言,了解了GPIO接口的使用方法和Python编程的基础知识,也是很有益的。在以后的学习和应用中,这些知识都会有所用处。
结论
篇三:gpio控制实验实验报告
实验二
通用GPIO的使用
(4学时)
一、实验目的1、掌握C51芯片I/O接口的性能特点。
2、掌握STM32芯片I/O接口的性能特点。
3、对于C51芯片,使用P0、P1口做I/O接口,实现输入和
输出控制。
4、对于STM32芯片掌握GPIO的功能设定方法,使用
GPIO完成输入与输出的电路驱动
二、实验内容
1.
P1口做为输出口控制“单只数码管循环显示0~9”。
2.编写一段程序,并修改硬件电路,用P1.0-P1.6口控制LED,P1.7控制LED的亮与灭(P1.7接按键,按下时LED亮,不按时LED灭)。
3、用STM32芯片I/O接口实现流水灯的控制。
三、思考题
1、为什么P0作为I/O接口时,要接上拉电阻?
答:因为P0口作为I/O接口时内部是漏极开路型。
2、在实验内容2中,如果P0某个管脚接按键,该如何修改硬件和软件?
3、设计一单片机控制电路,用八只开关分别控制八只LED的亮灭。
四、实验结果分析
对于问题2四、结论
这次对单片机GPIO口的实验,我们分别做了51单片机和STM32f103r6对GPIO端口的应用,再通过protues的仿真验证,证明我们的思路是正确的。由于在这次实验中没有吧protues8.6版本安装好,导致实验过程中出现了了一些延误,没能按照老师课堂的进度,但在实验课过后过后,及时复习和查资料,解决了这个问题。实验过程中不足的有,对于实验仍处于生搬硬套的阶段,无法将老师理论课所讲与实验结合在一起,对于写代码的能力有待提高。
篇四:gpio控制实验实验报告
篇五:gpio控制实验实验报告
GPIO实验
------10903070313_某某
一、实验目的:
⑴:熟悉ARM开发板基本组成电路,并通过配套教材熟悉ARM芯片特性。了解ADS1.2软件使用,并会用该软件编译调试开发板。
⑵:了解H—JTAG软件原理,利用教材中提供的LED测试程序,完成实验。
⑶:进一步掌握ADS1.2集成开发环境的使用方法。
⑷:掌握LPC2000专用工程模板的添加和使用。
⑸:能够在EasyARM2100教学实验开发平台上运行第一个程序(无操作系统)。
⑹:熟悉LPC2000系列ARM7微控制器的GPIO控制。
⑺:了解应用程序的固化方法。
二、实验内容及原理:
⑴:单LED闪烁
使用P0.25的输出功能,控制一个LED闪动。采用灌电流方式驱动LED,即输出地电平时LED点亮。程序首先设置PINSEL0,PINSEL1进行管教连线,然后由IO0DIR设置P0.25口为输出模式,即可通过对IO0SET和IO0CLR寄存器进行口线设置1或置0输出控制。
⑵:单键输入
GPIO是一个双向的I/O口,内部无上拉电阻,所以作于键盘输入时,要上拉电阻。进行GPIO输入时,先要设置IODIR使口线为输入方式,然后读取IOPIN的值即可。使用P0016口作按键的输入,每一次有效按键即对LED4进行取反控制。
⑶:多键多LED(选作)KEY1按下LED1取反,......,KEY4按下LED4取反,KEY5按下LED全灭,KEY6按下LED全亮。
⑷:模拟SPI数码显示
EasyARM2100开发实验板提供了一位静态数码管,由74HC595直接驱动。74HC595是一个串入并出的一位寄存器,三态输出口,可以通过SQH进行级连,支持100MHz时钟频
率。通过3个GPIO口模拟对74HC595进行控制,驱动数字数码管显示数字0~F。
⑸:LED及数码编码显示
程序驱动数码管循环显示16进制数0~F,并使用LED1~LED4指示当前数值,LED4表示高位(d3),LED1指示低位(d0),点亮为1,熄灭为0。
⑹多键及显示组合(选作)KEY1按下数码显示“1”,......,KEY6按下数码显示“6”,同时LED显示数据BCD编码。三、实验器材
PC机一台,周立功开发板一块(EasyARM2100)
四、实验预习与要求:
(1)认真复习LPC2000系列ARM7微控制器的GPIO控制机制以及LPC2100管脚连接
模块等内容。
(2)了解EasyARM2100教学实验开发平台的硬件结构,注意蜂鸣器的相关控制电路。
(3)了解EasyARM2100教学实验开发平台上的跳线。
(4)仔细阅读附带文档《ADS集成开发环境及仿真器应用》或其它相关资料,了解GPIO
的设置、74HC595时序、逻辑控制方法、LPC2000专用工程模板。
五、程序流程图
⑴:单LED闪烁
⑵:单键输入
⑶:模拟SPI数码显示
⑷:LED及数码编码显示
六、实验源程序为(C语言):
⑴:单LED闪烁
#include"config.h"#define
LEDCON
0x0040000voidDelayNS(uint32dly){
uint32i;
for(;dly>0;dly--)
for(i=0;i<50000;i++)
;}intmain(void){
PINSEL0=0x00000000;
PINSEL1=0x00000000;
IO0DIR=LEDCON;
while(1)
{
IO0SET=LEDCON;
DelayNS(30);
IO0CLR=LEDCON;
DelayNS(30);
}
return(0);}⑵:单键输入
#include"config.h"#define
LEDCON
0x00400000#define
KEY
0x0001000voidWaitKey(void){
uint32i;
while(1)
{
while((IO0PIN&KEY)!=0)
;
for(i=0;i<50000;i++)
;
if((IO0PIN&KEY)==0)
break;
}
while((IO0PIN&KEY)==0)
;}
intmain(void){
PINSEL0=0x00000000;
PINSEL1=0x00000000;
IO0DIR=LEDCON;
while(1)
{
IO0SET=LEDCON;
WaitKey();
IO0CLR=LEDCON;
WaitKey();
}
return(0);}⑶:模拟SPI数码显示
#include"config.h"#defineSPI_CS
0X2000010#defineSPI_DATA0x00000040#defineSPI_CLK
0x00000010#defineSPI_IOCON(SPI_CS|SPI_DATA|SPI_CLK)
voidDelayNS(uint32dly){
uint32i;
for(;dly>0;dly--)
for(i=0;i<50000;i++);}voidHC595_SendDat(uint8dat){
uint8i;
IO0CLR=SPI_CS;
for(i=0;i<8;i++)
{
IO0CLR=SPI_CLK;
if((dat&0x80)!=0)
IO0SET=SPI_DATA;
else
IO0CLR=SPI_DATA;
dat<<=1;
IO0SET=SPI_CLK;
}
IO0SET=SPI_CS;}
intmain(void){
Constuint8DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0X99,0x82,0xF8,0x80,0x90,0x88,0x83,0x83,0xC6,0xA1,0x86,0x8E};
uint8i;
PINSEL0=0x00000000;
PINSEL1=0x00000000;
IO0DIR=SPI_IOCON;
while(1)
{
for(i=0;i<16;i++)
{
HC595_SendDat(DISP_TAB[i]);
DelayNS(50);
}
}
return(0);}⑷:LED及数码编码显示
#include"config.h"
#defineSPI_CS(1<<29)#defineSPI_DATA(1<<6)#defineSPI_CLK(1<<4)#defineBEEP(1<<7)#defineSPI_IOCON(SPI_CS|SPI_DATA|SPI_CLK)#defineLED_IOCON(0x0F<<22)
voidDelayNS(uint32dly){
uint32i;
for(;dly>0;dly--)
for(i=0;i<50000;i++);}
voidHC595_SendDat(uint8dat){
uint8i;
IO0CLR=SPI_CS;
for(i=0;i<8;i++)
{
IO0CLR=SPI_CLK;
if((dat&0x80)!=0)
IO0SET=SPI_DATA;
elseIO0CLR=SPI_DATA;
dat<<=1;
IO0SET=SPI_CLK;
}
IO0SET=SPI_CS;}
constuint8DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
intmain(void){
uint8i;
PINSEL0=0x00000000;
PINSEL0=0x00000000;
IO0DIR=SPI_IOCON|LED_IOCON|BEEP;
while(1)
{
for(i=0;i<16;i++)
{
HC595_SendDat(DISP_TAB[i]);
IO0SET=0x0F<<22;
IO0CLR=i<<22;
}
IO0CLR=BEEP;
DelayNS(50);
IO0SET=BEEP;
DelayNS(50);
}}return(0);七、实验步骤:
㈠、找到开发板的芯片及flash
1.计算机并口与开发板JTAG口相连接打开JTAG软件
H-JTAGServer在Flasher里面选择autodownload。
2.然后点击左上角的放大镜
看是否可以找到开发板CPU。
3.如果找到CPU,软件界面会出现ARM7字样以及芯片ID号。
4.如果找到CPU,在flashselection里选择LPC21145.configuration里设置晶振的频率为11.0592打开H-Flasher点击check,会出现ARM7相关字样,证明可以找到flash
㈡、编写程序代码仿真并验证结果
打开CodeWarriorforARMDevelopersuite编写相应的代码,测试没有语法错误后仿真并查看运行结果,对比是否与预期的是否相同。如果与结果存在出入,检查源程序是否存在逻辑上的错误,修改并知道实验结果正确。
八、实验结果:
单LED闪烁实验结果:实验电路板上的LED按一定周期快速闪烁。
单键输入实验结果:当按下EasyARM2100实验板的第一个按钮时对应的LED灯熄灭,再次按下时又点亮,实现按键取反的效果。
模拟SPI数码显示实验结果:程序驱动数字数码管显示数字0~F。
LED及数码编码显示实验结果:除了数字数码管显示数字0~F,四个LED灯显示对应的以点亮/熄灭分别代表1/0二进制数,并伴随蜂鸣。
经过实验,实验结果与预期结果基本吻合,表示实验成功。
九、实验结论:
通过本次试验在一定程度上,了解H—JTAG软件原理,熟悉了ARM开发板基本组成电路,并通过配套教材熟悉ARM芯片特性以及ADS1.2软件使用,并会用该软件编译调试开发板掌握了LPC2000专用工程模板的添加和使用。在老师的讲解下以及帮助下,能够在EasyARM2100教学实验开发平台上运行第一个程序。并熟悉了LPC2000系列ARM7微控制器的GPIO控制。了解了简单的应用程序的固化方法,并能根据教材提示完成实验。掌握了LPC2000系列ARM7微控制器的GPIO控制机制以及LPC2100管脚连接和模块等内容,了解了EasyARM2100教学实验开发平台的硬件结构,以及教学实验开发平台上的跳线。老师的教学态度很认真,对于实验的的改进方面的建议是,教学时可以照顾下水平低的同学,适当的降慢课程的讲解速度。实验课程,必要时使用一下软件视频教学。
篇六:gpio控制实验实验报告
三、实验效果分析(包括仪器设备等使用效果)
一、实验效果分析
1、在进行实验时要严格按照实验步骤进行实验,否则试验程序出错则实验效果会发生偏差。
2、由于本实验属于硬件实验的范畴,所以实验起初时要先设定实验属于硬件实验,而不是直接进行。
3、经过一系列的调制修改,实验达到了要求的效果,实验成功。
教
师
评
语
指导老师
年
月
日
江西师范大学物理与通信电子学院
教学实验报告
通信工程
专业2013年11月26日
实验名称
GPIO控制实验
指导老师
姓
名
年级
11级
学号
成绩
一、预习部分
1、实验目的2、实验基本原理
3、主要仪器设备(含必要的元器件、工具)
一、实验目的:
1、了解GPIO片上外设2、掌握延时程序应用
3、用GPIO口实现LED指示灯控制。
二、实验基本原理:
通用目的输入输出片内外设提供了专用的通用目的引脚,可以配置位输入或输出。当配置为一个输出时,用户可以写一个内部寄存器以控制输出引脚上驱动的状态。当配置为输入引脚时,用户可以通过内部寄存器的状态检测到输入的状态。另外,GPIO片内外设可以用不同的中断/事件产生CPU中断和EDMA事件。一旦在GPIO使能寄存器被使能,GPIO引脚可以用作通用目的输入/输出。用户可以使用GPIO方向寄存器独立配置每条GPIO引脚为输入或输出。当配置为输出(GPXDIR位=1),GPIO值寄存器(GPVAL)的GPXVAL位的值就被送到相应的GPn引脚。当配置为输入(GPXDIR位=0)时,输入状态可以从相应的GPXVAL读取TMS320VC5502有1-位通用输出引脚XF和8-位通用I/O引脚GPIO[7:0],其中GPIO3、GPIO5与McBSP2复用引脚。SEED-DEC5502模板上这些引脚的使用情况如下:
XF用于点亮LED指示灯D1。XF=1,点亮;XF=0,熄灭。
GPIO[2:0]:经电平转换后连至外设扩展总线的备用引脚。
GPIO3:与McBSP2的CLKX2复用引脚,当配置为GPIO3时,用作COM1的。
GPIO4:经电平转换后连至外设扩展总线的备用引脚。
GPIO5:与McBSP2的FSX2复用引脚,当配置为GPIO5时,用作COM1的。
GPIO6:经电平转换后连至外设扩展总线的备用引脚。
GPIO7:用于点亮LED指示灯D5。XF=1,点亮;XF=0,熄灭。
通过本实验,要求掌握GPIO口的应用;熟悉延时程序的应用。
1、5502_GPIO.c:这是实验的主程序包含系统初始化,GPIO引脚点亮程序等;
2、vectors.s55:包含5502的中断向量表;
3、SEED_DEC5502.cmd:声明了系统的存储器配置与程序各段的连接关系。
三、主要仪器设备
计算机、ccs软件
二、实验操作部分
1、实验数据、表格及数据处理
2、实验操作过程(可用图表示)
3、结论
一、实验操作过程
1.打开CCS,进入CCS的操作环境。
2.装入DEC5502_GPIO.pjt工程文件,添加SEED_DEC5502.gel文件。
3.装载程序DEC5502_GPIO.out,进行调试。
4.在5502_LED.c程序的第69行“delay();”处,第72行“delay();”处,第75行“delay();”
处,第78行“delay();”处设置断点。
5.运行程序,程序会停在第一个断点处,关闭指示灯D1;
6.继续运行程序,程序每次都会停在第二个断点处,点亮指示灯D1;
7.继续运行程序,程序每次都会停在第三个断点处,点亮指示灯D5;
8.继续运行程序,程序每次都会停在第四个断点处,关闭指示灯D5;
9.也可直接执行程序,观察指示灯D1,D5的闪烁情况。
二、实验截图
篇七:gpio控制实验实验报告
《嵌入式系统原理与应用》实验报告
实验序号:03实验项目名称:GPIO输入输出控制实验
学
号
姓
名
黄鹏程
专业、班
实验时间
实验地点
实验楼1#318指导教师
一、实验目的1.掌握LPC2200专用工程模板的使用;
2.掌握Proteus仿真软件的安装和使用;
3.熟悉LPC2000系列ARM7微控制器的GPIO控制。
二、实验设备(环境)及要求
硬件:PC机;
软件:PC机操作系统windowsXP,ADS1.2集成开发环境,Proteus软件。
三、实验内容与步骤
实验内容:
编写程序配置LPC2138的P0.2,P0.5为GPIO功能,并P0.2驱动LED灯,P0.5外接按键,实现按下按键,使LED灯闪烁的效果。
四、实验结果与数据处理
#include"config.h"#definePIN_P050x0000002intmain(void){inti;PINSEL0=PINSEL0&0xfffff3cf;IO0DIR=IO0DIR|0x04;
while(1){if((IO0PIN&PIN_P05)==0)IO0SET=0X04;elseIO0CLR=0x04;for(i=0;i<1000;i++);
}return0;}实验结果如图所示
五、分析与讨论
六、教师评语
签名:
日期:
成绩
篇八:gpio控制实验实验报告
..实验四
GPIO输入实验
一、实验目的1、能够使用GPIO的输入模式读取开关信号。
2、掌握GPIO相关寄存器的用法和设置。
3、掌握用C语言编写程序控制GPIO。
二、实验环境
PC机
一台
ADS1.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.4LED控制电路
程序首先设置管脚连接寄存器PINSEL0和PINSEL1,设置P0.16为输入,设置P0.7,P1.21为输出。然后检测端口P0.16的电平,对P0.7,P1.21进行相应的控制,流程图如图
4.5所示,实现程序见程序清单
4.1。
图
4.5按键输入实验流程图
;.
..五、实验步骤、源代码及调试结果
内容1实验步骤
①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_key。
②在user组里编写主程序代码main.c。
③选用DebugInFLASH生成目标,然后编译链接工程。
④将EasyARM教学实验开发平台上的相应管脚跳线短接。
⑤选择Project->Debug,启动AXD进行JLINK仿真调试。
⑥全速运行程序,程序将会在main.c的主函数中停止。如下图所示:
;.
..⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择SystemViews->DebuggerInternals即可打开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"constuint32BEEP=1<<7;//P0.7控制蜂鸣器
constuint32KEY1=1<<16;//P0.16连接KEY1(改为KEY3时,只需“constuint32KEY1=1<<16”改为“constuint32KEY3=1<<18”,其余不变。)
/*********************************************************************************************函数名称:main()**函数功能:GPIO输入实验测试。
**检测按键KEY1。KEY1按下,蜂鸣器蜂鸣,松开后停止蜂鸣。
**跳线说明:把
JP8的KEY1跳线短接,JP11连接蜂鸣器。
*******************************************************************************************/intmain(void){PINSEL0=0x00000000;//所有管脚连接GPIO;.
..PINSEL1=0x00000000;IO0DIR=BEEP;//蜂鸣器控制口输出,其余输入
while(1){if((IO0PIN&KEY1)==0)IO0CLR=BEEP;//如果KEY1按下,蜂鸣器鸣叫
elseIO0SET=BEEP;//松开则停止蜂鸣
}return0;}
内容二
实验步骤
①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_key。
②在user组里编写主程序代码main.c。
③选用DebugInFLASH生成目标,然后编译链接工程。
④将EasyARM教学实验开发平台上的相应管脚跳线短接。
⑤选择Project->Debug,启动AXD进行JLINK仿真调试。
;.
..⑥全速运行程序,程序将会在main.c的主函数中停止。如下图所示:
⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择SystemViews->DebuggerInternals即可打开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"constuint32BEEP=1<<7;//P0.7控制蜂鸣器
constuint32KEY1=1<<16;//P0.16连接KEY1(改为KEY4按键时,只需把上句代码改为“constuint32KEY4=1<<19”,其余不变)
constuint32LEDS4=1<<21;//P1[21]控制LED4,低电平点亮
(改为LED6时,只需把上句代码改为“constuint32LED6=1<<23”,其余不变。)
/*****************************************************************************函数名称:main()**函数功能:GPIO输入实验测试。
**检测按键KEY1。KEY1按下,蜂鸣器蜂鸣,松开后停止蜂鸣。
**跳线说明:把
JP8的KEY1跳线短接,JP11连接蜂鸣器。
*******************************************************************************************/intmain(void){
Uint32i;
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++);}return0;}
//软件延时
内容三
实验步骤
①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_key。
②在user组里编写主程序代码main.c。
③选用DebugInFLASH生成目标,然后编译链接工程。
④将EasyARM教学实验开发平台上的相应管脚跳线短接。
⑤选择Project->Debug,启动AXD进行JLINK仿真调试。
⑥全速运行程序,程序将会在main.c的主函数中停止。如下图所示:
;.
..
⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。
通过变量窗口可以观察变量BEEP、KEY1等的值和ARM7微控制器的片内外寄存器窗口。如下图所示:
;.
..
⑧可以单步运行程序,先按下Key1,观察IO0PIN寄存器的值,然后断开Key1,观察IO0PIN寄存器的值。可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。如下图所示:
图4.12未按下Key1时IO0PIN的值
图4.13按下Key1时IO0PIN的值
由上两图可知,当按下Key1时,IO0PIN寄存器的第16位由1变为0(F变为E),key1与P0.16相连,按下Key1时,P0.16管脚输出电平由1变为0,寄存器值变化,蜂鸣器响,流水灯亮,说明控制是正确的。
现象描述:当按下按键KEY1时,蜂鸣器鸣响,流水灯亮;松开后,蜂鸣器静音,流水灯灭。
;.
..
源代码如下:
#include"config.h"
constuint32BEEP=1<<7;//P0.7控制蜂鸣器
constuint32KEY=1<<16;//P0.16连接KEY1constuint32LEDS8=0xFF<<18;//P1[25:18]控制LED8~LED1,低电平点亮
voidDelayNS(uint32dly){uint32i;
for(;dly>0;dly--){for(i=0;i<50000;i++);}}
/*********************************************************************************************函数名称:liushuideng()**函数功能:流水灯显示实验。
**调试说明:连接跳线JP12至LED8~LED1。
*******************************************************************************************//*流水灯花样,低电平点亮,注意调用时候用了取反操作*/constuint32LED_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//从两边叠加后递减
};intliushuideng(void){uint8i;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);}}return0;}
//主函数
intmain(void){uint32i;PINSEL0=0x00000000;//所有管脚连接GPIOPINSEL1=0x00000000;IO0DIR=BEEP;//蜂鸣器控制口输出0;.
..
while(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++);}return0;}
//软件延时
//软件延时
六、思考题
1、如果将P0.30设置为GPIO输入模式,且管脚悬空,那么读取P0.30得到的值是0还是1?或者是不确定?
当管脚悬空时,该管脚有可能是高电平也有可能是低电平。读取IO0PIN的值并不能确定管教的值。有时管脚是高电平,读取到的不一定是高电平。
2、如果需要读取当前P0.7的输出值(不是管脚上的电平),如何实现?
将该管脚与一个LED连接,若LED亮,则输出值为0,否则为1.;.
篇九:gpio控制实验实验报告
GPIO实验报告
齐
鲁
理
工
学
院
实
验
报
告
课程名称:
微型计算机控制技术
时间:
20XX年.10.22地点:
D203班级:
20XX年级机制3班
姓名:
杨帆
学号:
*****4实验项目名称:
GPIO端口实验
实验指导教师:
赵保华
实验成绩评定:
一、实验目的ü通过实验掌握
ARM芯片使用
GPIO端口。
ü掌握
GPIO端口控制
LED显示。
ü掌握系统时钟的配置。
ü掌握库开发原理及方法。
二、实验设备
ü通过实验掌握
ARM芯片使用
GPIO端口。
ü掌握
GPIO端口控制
LED显示。
ü掌握系统时钟的配置。
ü掌握库开发原理及方法。
三、实验内容
控制信盈达Cotex-M3实验平台的发光二极
/6管
LED1、LED2、LED3、LED4,使它们有规律的点亮,具体顺序如下:LED1亮-LED2亮-LED3亮-LED4亮,如此反复。
四、实验原理
如图所示,LED1-4分别与
PB5PE5PA5PA6相连,通过
PB5PE5PA5PA6引脚的高低电平来控制发光二极管的亮与灭。当这几个管脚输出高电平的时候发光二极管熄灭,反之,发光二极管点亮。
GPIO管脚的每个位可以由软件配置成如下几种模式:
1.输入浮空:浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。做按键,是要读取电平状态,这种配置抗干扰性差,但是是处理信号方面一般是配置这个功能。如测试一个波形,这时候可以配置这个功能。
2.输入上拉:经过电阻连接到
VCC,能让
IO口在没有连接信号时候有一个确定的高电平,并且也能从
VCC处获得比较大的驱动电流。
3.输入下拉:经过电阻连接到
GND,能让
IO口在没有连接信号时候有一个确定的低电平。
4.模拟输入:芯片内部外设专用功能(ADC,DAC对应的IO口功能)
5.开漏输出:IO输出
0接
GND,IO输出
1,悬空,需要外接上拉电阻,才能实现输出高电平。
6.推挽式输出:IO输出
0接
GND,IO输出
1接
VCC,/6拥有比较强的驱动能力,如接
led,或三极管。
7.推挽式复用功能:GPIO口被用作第二功能时的配置情况(即并非作为通用
IO口使用),比如像片上外设的的UART,SPI模块对应的输出数据线。UART发送线就是复用功能,并且是输出方向。
8.开漏复用功能:GPIO口被用作第二功能时的配置情况(即并非作为通用
IO口使用),比如像片上外设的的IIC模块对应的数据线和时钟线,使用时候要外接上拉电阻。如
IIC总线的数据线和时钟线就要配置这种模式。
我们使用IO口输出一个电压值来控制LED灯亮灭,因此选择推挽输出工作模式。
五、软件程序设计
1)配置系统时钟
RCC,打开PB、PE、PA端时钟。
2)配置GPIO口
PB5、PE5、PA5、PA6为推挽输出工作模式。
3)IO口输出低电平控制灯亮,输出高电平控制灯灭。
参考程序:
main.c参考程序:
#include“stm32f10x.h“//芯片寄存器映射头文件
#include“led.h“//自己写的led头文件
staticvoidDelay(u32i);//延时函数的声明
/*主函数
*/intmain(void){GPIO_LED_Init();//LED灯初
/6始化
while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_5);//PB5管脚置0,LED1亮
Delay(*****);//延时
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5管脚置1,LED1灭
Delay(*****);//延时
GPIO_ResetBits(GPIOE,GPIO_Pin_5);//PE5管脚置0,LED2亮
Delay(*****);//延时
GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE5管脚置1,LED2灭
Delay(*****);GPIO_ResetBits(GPIOA,GPIO_Pin_5);Delay(*****);GPIO_SetBits(GPIOA,GPIO_Pin_5);Delay(*****);Delay(*****);GPIO_ResetBits(GPIOA,GPIO_Pin_6);GPIO_SetBits(GPIOA,GPIO_Pin_6);Delay(*****);}}/*延时函数
*/staticvoidDelay(u32i){for(;ii--);}led.c参考程序:
/****************************************************函数名:GPIO_LED_Init形参:无
返回值:无
函数功能:对4个LED灯进行初始化,并且关闭所有的****************************************************/led灯
#include“stm32f10x_gpio.h“voidGPIO_LED_Init(void){GPIO_InitTypeDefGPIO_InitStructure;//对GPIOB口的时钟打开
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//把IO口配置为输出模式,输出速度50MhzGPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed
/6=
GPIO_Speed_50MHz;//设置管脚
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_Init(GPIOB,GPIO_InitStructure);//根据以上配置初始化PB5GPIO_Init(GPIOE,GPIO_InitStructure);//根据以上配置初始化PE5GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6;GPIO_Init(GPIOA,GPIO_InitStructure);//根据以上配置初始化PA5和PA6//关闭四个led灯
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5管脚置1,LED1灭
GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE5管脚置1,LED2灭
GPIO_SetBits(GPIOA,GPIO_Pin_5);GPIO_SetBits(GPIOA,GPIO_Pin_6);}led.h参考程序:
#ifndef_LED_H_#define_LED_H_voidGPIO_LED_Init(void);//声明LED灯初始化函数
#endif六、实验操作步骤
1.准备实验环境
使用
STlink仿真器连接
信盈达STM32实验平台的主板
JTAG接口;
使用
实验平台附带的USB数据线,连接实验平台主板和PC。
2.打开开发环境,新建工程
1)新建工程,步骤参照附录1。
2)新建两个文件led.c(写函数的定义)和led.h(写函数的声明),保存到工程目录user/API,并且把led.c添加到工程
3)完成程序编写,编译链接工程。
打开
Flash菜单Download,将程序下载到开发板的Flash
/6中,按
RESET键复位,观察
LED的情况。
七、实验结果:
八、心得体会
通过本次实验,我学到了很多知识,通过实验掌握
ARM芯片使用
GPIO端口。掌握
GPIO端口控制
LED显示,掌握系统时钟的配置,掌握库开发原理及方法,感谢老师的指导和同学的帮助
/6
推荐访问:gpio控制实验实验报告 实验 控制 报告
下一篇:人大代表履职情况报告(4篇)