《嵌入式系统原理与应用》实验报告01-GPIO输出控制实验
- 格式:doc
- 大小:632.17 KB
- 文档页数:11
嵌入式系统实验报告在本学期的嵌入式系统课程中,我与我的实验伙伴进行了多次实验。
在这篇报告中,我将分享我们实验的过程和结果。
实验一: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引脚的电平信号来控制电机。
总结在这个嵌入式系统的实验中,我们学习了许多关于嵌入式系统的知识和技能。
嵌⼊式系统原理及应⽤实验报告嵌⼊式系统原理及应⽤1、实验⽬的练习ARM汇编语⾔程序设计。
2、实验环境PC个⼈计算机、Windows XP操作系统、ADS1.2集成开发环境软件。
3、实验要求⽤ARM指令集设计⼀段汇编语⾔程序,完成两个64位⼆进制数的乘法运算,两个乘数分别放在r1、r0和r3、r2中(r1和r3放⾼位字),结果存在r7、r6、r5、r4中。
4实验原理及基本技术线路图ARM的乘法指令把⼀对寄存器的内容相乘,然后根据指令类型把结果累加到其它的寄存器。
长整形的“乘累加”要使⽤代表64位的⼀对寄存器,最终的结果放在⼀个⽬标寄存器或者⼀对寄存器中。
乘法指令的语法:MLA {}{S} Rd,Rm,Rs,RnMUL{}{S} Rd,Rm,RsMLA 乘累加Rd=(Rm×Rs)+RnMUL 乘法Rd=Rm×Rs{}{S} RdLo,RdHi,Rm,RsSMLAL 长整型有符号乘累加[RdHi,RdLo]=[RdHi,RdLo]+(Rm×Rs)SMULL 长整型有符号乘法[RdHi,RdLo]=Rm×RsUMLAL 长整型⽆符号乘累加[RdHi,RdLo]=[RdHi,RdLo]+(Rm×Rs)UMULL 长整型⽆符号乘法[RdHi,RdLo]=Rm×Rs长整型乘法指令产⽣64位的结果。
由于结果太⼤,不能存放在⼀个32位寄存器,所以把结果存放在2个32位的寄存器RdLo和RdHi中。
RdLo存放低32位,RdHi存放⾼32位。
利⽤UMULL和SUMLL指令可以进⾏32位宽度的⽆符号或有符号的整数乘法运算,得到64位的结果。
在实际应⽤中,有许多需要长整型乘法运算的应⽤。
例如,处理C中long long整型算术运算等。
对于64位整数乘法运算可利⽤如下页图所⽰的扩展⽅法来实现。
其中:R0,R1分别存放被乘数的低32位和⾼32位;R2,R3分别存放乘数的低32位和⾼32位;128位结果由低到⾼依次存放在R4,R5,R6,R7中。
真验四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(General Purpose Input/Output)接口的工作原理和应用,通过实际操作和数据分析,提高对嵌入式系统硬件接口的理解和掌握。
实验背景是基于当前嵌入式系统在各种应用中的普及,GPIO 接口作为其中重要的硬件接口,对于理解嵌入式系统的运作方式具有重要意义。
二、GPIO基础知识GPIO接口是一种通用输入输出接口,它允许CPU与外部设备或传感器进行通信。
通过设置GPIO引脚的电平状态,CPU可以向外部设备发送数据,同时也可以接收外部设备发送的数据。
在嵌入式系统中,GPIO接口被广泛应用于各种硬件设备的控制和数据采集。
三、实验设备与工具本次实验使用的设备包括开发板、杜邦线、电源适配器、串口调试工具等。
其中,开发板提供了丰富的GPIO接口和外设接口,方便我们进行实验操作。
串口调试工具用于实时监控和调试实验过程。
四、实验步骤与操作连接实验设备:将开发板与电源适配器连接,为开发板提供稳定的电源。
使用杜邦线连接开发板的GPIO接口和外设接口,确保连接可靠。
编写程序:根据实验要求,编写相应的程序代码。
在程序中,我们需要配置GPIO引脚的工作模式(输入或输出),并控制引脚的电平状态进行数据传输。
下载程序:将程序代码下载到开发板中,启动程序。
实验操作:通过串口调试工具观察程序的运行状态和GPIO引脚的电平变化。
根据实验要求,进行相应的操作,如读取传感器数据、控制外部设备等。
记录数据:在实验过程中,记录关键步骤的实验数据和结果,以便后续分析和解释。
五、实验数据与结果通过实验操作,我们获得了以下数据和结果:GPIO引脚配置成功,可以正常工作在输入或输出模式。
通过GPIO接口成功读取了传感器数据,数据准确无误。
通过GPIO接口成功控制了外部设备,实现了预期的功能。
在实验过程中,记录了详细的实验数据和结果,包括GPIO引脚的电平状态、传感器数据、外部设备控制状态等。
长治学院计算机系嵌入式实验报告姓名:李泽梅班级:计算机1002 实验题目:ADC实验实验时间:2013年5月20日同组成员:樊利霞一、实验目的掌握S3C2410A的模/数(A/D)转换器的应用设置,进行电压信号的测量。
二、实验内容使用AIN0和AIN1测量两路直流电压,并将测量结果通过UART0向PC机发送。
三、实验器材硬件:PC机 1台MagicARM2410教学实验开发平台 1台软件:Windows 98/2000/XP操作系统ADS 1.2集成开发环境超级终端程序(Windows系统自带)四、实验原理S3C2410A具有1个8通道的10位模数转换器(ADC),有采样保持功能,输入电压范围是0~3.3V,在 2.5MHz的转换器时钟下,最大的转换速率可达500KSPS。
A/D转换器的AIN5、AIN7还可以与控制脚nYPON、YMON、nXPON和XMON 配合,实现触摸屏输入功能;ADC功能框图为了正确使用A/D 转换器,需要设置A/D 转换器的时钟,还有A/D 转换器的工作模式设置和输入通道选择,这都是通过ADCCON 寄存器来设置的。
然后置位ADCCON 寄存器的ENABLE_START 位来控制启动A/D 转换,读ADCCON 寄存器的ECFLG 位来判断A/D 转换是否已经结束。
当一次A/D 转换结束后,通过读ADCDAT0寄存器来取得A/D 转换结果,寄存器的低10位数据有效;实验电路图五、实验步骤 (1) 启动ADS 1.2,使用ARM Executable Image for DeviceARM2410工程模板建立一个工程ADC01。
(2) 在工程src 组中的main.c 中编写实验代码。
(3) 选用DebugRel 生成目标,然后编译链接工程。
(4) 将MagicARM2410实验箱上的UART0连接跳线JP1短接,使用串口延长线把MagicARM2410实验箱的CZ11与PC 机的COM1连接。
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的使用方法,可以实现与外部设备的数据交互和控制功能。
嵌入式gpio实验总结嵌入式GPIO实验总结嵌入式系统是指将计算机硬件系统集成在其他电子设备中的计算机系统。
在嵌入式系统中,GPIO(General Purpose Input/Output)是一种通用输入输出接口,用于与外部设备进行数字信号的交互。
在本次实验中,我们通过使用嵌入式GPIO接口,控制外部设备的输入和输出,以实现特定功能。
在实验过程中,我们首先了解了GPIO的基本原理和使用方法。
GPIO接口通常由一组引脚组成,每个引脚可以配置为输入或输出模式。
通过配置引脚的模式和状态,我们可以向外部设备发送信号或接收外部设备发送的信号。
在配置GPIO引脚之前,我们需要确定引脚的编号和所属的GPIO 控制器。
不同的嵌入式平台或开发板可能具有不同的GPIO引脚编号和控制器。
因此,在实验开始之前,我们需要查阅相关文档或资料,以确定正确的引脚编号和控制器。
在配置GPIO引脚之后,我们可以使用相应的API函数来读取或写入引脚的状态。
对于输出模式的引脚,我们可以使用API函数将引脚状态设置为高电平或低电平,从而控制外部设备的行为。
对于输入模式的引脚,我们可以使用API函数读取引脚的状态,以获取外部设备发送的信号。
在实验过程中,我们使用了一些常见的外部设备,如LED灯、按钮和蜂鸣器,来演示GPIO的使用。
通过配置GPIO引脚,并使用相应的API函数,我们成功地控制了LED灯的亮灭、按钮的检测和蜂鸣器的鸣叫。
这些操作都是通过对GPIO引脚的状态进行读取或写入实现的。
通过本次实验,我们深入了解了嵌入式GPIO的原理和使用方法。
GPIO接口在嵌入式系统中具有广泛的应用,可以用于控制各种外部设备,实现各种功能。
掌握了GPIO的使用,我们可以根据实际需求,灵活地配置和控制嵌入式系统的输入输出,从而实现更多的功能和应用。
总结起来,嵌入式GPIO实验是学习嵌入式系统的重要一环。
通过实验,我们了解了GPIO的基本原理和使用方法,掌握了配置和控制GPIO引脚的技巧。
1、熟悉 GPIO 内部结构和工作模式、2、掌握基于库函数的开发方法3、掌握 GPIO 输入输出控制STM32 固件库向下实现与寄存器的直接相关操作, 向上为用户提供配置寄存 器的标准接口。
Typedef struct {U16 GPIO_Pin;GPIOSpeed_TypeDef GPIOMode_TypeDef } GPIO_InitTypeDef; GPIO_SetBits GPIO_Speed; GPIO_Mode;1LCDGPIO_SetBits(GPIOA,GPIO_Pin_8); //PA8=1 ,背光灯亮;GPIO_ResetBits(GPIOA,GPIO_Pin_8); //PA8=0 ,背光灯灭。
(1)复制创建的工程模板文件夹到桌面,并将文件夹改名为“LCD 背光控制”。
将原工程模板编译一下,直到没有错误和警告为止。
(2)在main.c 文件中输入如下源程序,对GPIO 管脚进行初始化,给PA.8 引脚赋值控制LCD 背光亮灭。
编译工程,如没有错误,则会在output 文件夹中生成“工程模板.hex”文件,如有错误则修改源程序直至没有错误为止。
(3)将生成的目标文件通过ISP 软件下载到开发板微控制器的FLASH 存储器当中,复位运行,检查实验效果。
LED在STM32 的工程里添加用户自己的.c 和.h 文件,保存在外设文件夹内。
(1)新建led.c 和led.h 文件并将其保存在APP 文件夹led 目录中。
(2)编写led.c 源代码,保存。
(3)编写led.h 源代码,保存在MDK 中设置包含头文件路径。
(4)编写主函数,完成LCD 背光控制。
嵌入式系统原理与应用实验指导书南航金城学院2013.2目录目录 (1)第一部分试验箱硬件结构 (2)第二部分实验 (11)实验一ADS1.2集成开发环境练习 (11)实验二汇编指令实验1 (17)实验三汇编指令实验2 (20)实验四汇编指令实验3 (23)实验五ARM微控制器工作模式实验 (28)实验六 C语言程序实验 (33)实验七 C语言调用汇编程序实验 (36)实验八GPIO输出控制实验 (39)实验九GPIO输入实验 (46)实验十外部中断实验 (50)实验十一UART通讯实验 (56)实验十二I2C接口实验 (64)实验十三定时器实验 (75)实验十四PWM DAC实验 (81)实验十五ADC实验 (87)实验十六RTC实验 (94)实验十七步进电机控制实验 (101)实验十八直流电机控制实验 (105)附录1 DeviceARM2410 专用工程模板 ..................................................... 错误!未定义书签。
第一部分试验箱硬件结构MagicARM2410教学实验开发平台是一款可使用μC/OS-II、Linux和WinCE操作系统、支持QT、MiniGUI图形系统、集众多功能于一身的ARM9教学实验开发平台。
采用Samsung公司的ARM920T内核的S3C2410A微处理器,扩展有充足的存储资源和众多典型的嵌入式系统接口。
MagicARM2410实验箱参考如图1.1所示。
图1.1 MagicARM2410实验箱外观图MagicARM2410实验箱功能框图如图1.2所示。
图1.2 MagicARM2410实验箱功能框图1.1 S3C2410A芯片简介S3C2410A是Samsung公司推出的16/32位RISC处理器(ARM920T内核),适用于手持设备、POS机、数字多媒体播放设备等等,具有低价格、低功耗、高性能等特点。
班级学号姓名实验日期室温大气压成绩实验题目:GPIO输出实验——按键输入检测实验一、实验目的:1、通过本实验学会ARM7.0软件的安装及掌握对该软件和EasyJTAG仿真器的使用;2、了解EasyARM2131开发板硬件结构,掌握各引脚功能和接线;3、掌握相关实验的程序,并能作出简单的修改并实现其功能;4、掌握GPIO输出实验---按键输入的检测。
二、实验仪器:EasyARM2131开发板一块及相关导线、计算机一台三、实验原理:下面是工程窗口中的图标介绍:如图4.2所示,当P0口连接GPIO且用于输入时,如用于检测按键的时候,由于P0口作GPIO输入时,内部无上拉内阻,所以需要加10K左右的上拉电阻,把I/O口拉到高电平。
当P0口用于GPIO输入时(如按键输入),内部无上拉电阻,需要加上拉电阻,电路如图4.14图4.14 按键输入原理图实验通过跳线JP8连线KEY3_P0.18,程序检测按键KEY3的状态,控制蜂鸣器BEEP的蜂鸣。
在实验中,需要将按键KEY3输入口P0.18设为输入口,而蜂鸣器控制口P0.7设为输出口。
蜂鸣器电路如图1.11所示,当跳线JP6连线蜂鸣器时,P0.7控制蜂鸣器,低电平时蜂鸣器蜂鸣。
程序首先设置管脚连线寄存器PINSEL0和PINSEL1,设置P0.7为输出。
然后检测端口P0.18的电平,对P0.7进行相应的控制,流程图如图4.15所示,实现程序见程序清单4.7。
四、实验步骤:1、接好开发板与计算机的相关接线2、打开已安装好的H-JTAG和H-Flasher软件,并在H-Flasher软件中选择Flasher Selation→PHILIPS→LPC2318;然后再选择Programming→check。
操作过程中出现的窗口如下图(1)、(2)所示:图(1)图(2)3、Metrowerks CodeWarrior for ARM Developer Suite v1.2软件,点击File选择Open打开GPIO输出实验——按键输入检测实验文件夹,选择GPIO_Leds8-2.mcp文件,双击main.c ,打开主程序,并运行检查是否出现错误,无误后点击Dubeg按钮;操作过程中的窗口如下图(3)、(4)所示:图(3)图(4)4、出的AXD窗口中选择Options,点击configure target后,在跳出的choose target窗口中点击Ok,点击运行按钮(若点击运行按钮,开发板中的LED不会亮)则在PIO_Leds8-a.mcp窗口中点击Run按钮运行,并观察开发板上出现的现象是否符合实验要求窗口如下图(5)所示:图(5)5、程序清单4.7:按键输入程序如下#include "config.h"const uint32 BEEP = 1 << 7; // P0.7控制蜂鸣器const uint32 KEY1 = 1 << 18; // P0.18连接KEY3/************************************************************ ************************************************ 函数名称:main()** 函数功能:GPIO输入实验测试。
《嵌入式系统导论》实验报告学院:姓名:上海工程技术大学电子电气工程学院实验一GPIO (按键和LED)实验一、实验要求1、掌握基于STM32F103微控制器的嵌入式系统、仿真器和开发用PC机之间的连接方法,能够搭建基于STM32F103微控制器的嵌入式系统交叉开发环境。
2、熟悉常用的嵌入式开发工具KEIL MDK或IAR EWARM的操作环境和基本功能(包括编辑、编译、链接、调试和下载等),学会创建、配置和管理STM32工程,掌握嵌入式程序的基本调试方法,学会使用逻辑分析仪窗口和外设窗口等信息窗口调试嵌入式程序。
3、理解LED和按键的构件原理,学会设计它们与微控制器间的接口电路4、掌握STM32F103微控制器GPIO的工作原理,熟悉STM32的GPIO库函数5、学会使用STM32的GPIO库函数在KEIL MDK 或IAR EWARM下开发基于LED和按键的简单嵌入式应用程序二、实验环境1、硬件:ALIENTEK STM32F103 嵌入式开发板2、软件:KEIL MDK 或IAR EWARM三、实验内容1、流水灯实验一:在KEIL MDK 或IAR EWARM 中建立STM32工程,并使用GPIO库函数和延时循环设计基于无限循环架构的嵌入式应用程序,使开发板上的红色LED以一定周期闪烁。
采用软件仿真的方式调试程序,通过“ LogicAnalyzeF',观察程序模拟运行时连接红色LED的引脚PA8上的输出波形。
采用硬件下载的方式调试程序,观察程序下载硬件运行时红色LED的闪烁情况。
2、按键控制LED实验:在KEIL MDK或IAR EWARM 中建立STM32工程,并使用GPIO库函数设计基于无限循环架构的嵌入式应用程序,实现以下功能:当按键KEY0按下时,目标板上红色LED点亮;当按键KEY0释放时,目标板上红色LED熄灭。
采用软件仿真的方式调试程序,通过“AngiyzeF'和“ Peripherals f GPIOC”,观察程序模拟运行时连接红色LED的引脚PA8和连接按键KEY0的PC5上的输出波形。
嵌入式系统gpio-输入输出实验报告嵌入式系统GPIO输入输出实验报告一、实验目的本实验旨在深入理解嵌入式系统中GPIO(General Purpose Input/Output)输入输出模块的功能及操作方法,通过实际操作学习GPIO的寄存器配置和使用方法,提高对嵌入式系统硬件的控制能力。
二、实验原理GPIO是一种通用输入输出接口,可以用于连接和控制外部设备。
它通常具有多个引脚,每个引脚都可以独立地配置为输入或输出模式,并可以通过软件控制实现高低电平的输入输出操作。
GPIO模块的主要功能包括:输入输出电平控制、输入输出方向控制、输出数据寄存器、输入数据寄存器等。
三、实验步骤1.硬件连接:连接开发板与PC,通过USB接口进行通信。
确保开发板的电源已经接通,并连接GPIO引脚与PC的串口。
2.开发环境搭建:安装开发板的驱动程序和开发工具,如Keil、JLink等。
3.编程语言选择:本实验采用C语言进行编程操作。
4.GPIO初始化和配置:根据实验要求,使用Keil软件编写代码,对GPIO进行初始化和配置。
具体步骤包括:定义GPIO引脚、设置引脚方向、配置输出数据寄存器等。
5.GPIO输入输出操作:通过Keil软件编写代码,实现GPIO的输入输出操作。
具体步骤包括:读取输入数据、写入输出数据等。
6.程序调试和测试:使用JLink工具对编写的程序进行调试和测试,确保程序的正确性和稳定性。
7.数据记录和分析:记录实验过程中的数据,包括输入输出的电平、时间等,进行分析和处理。
四、实验结果与分析通过本实验的操作,我们成功地实现了GPIO的输入输出操作。
在实验过程中,我们发现GPIO的配置和使用需要注意以下几点:1.GPIO引脚的编号和物理位置无关,因此需要根据实际需求进行选择和配置。
2.GPIO的输入输出方向可以独立设置,输入输出电平也可以通过软件进行控制。
3.在进行GPIO输入输出操作时,需要先对相应的寄存器进行配置,才能实现正确的输入输出。
院系:计算机科学学院专业:
年级:
学号:
姓名:
指导教师:
年月日
实验步骤与结果分析1.通过编译、下载、仿真可以看到我们想要的结果
图2-1
2.得到一个1K的仿真频率
2.1 因为得到的是更新频率,所以根据公式:
计数初值CCRx_Val = TIM2计数时钟频率/ 更新频率
所以有CCRx_Val = 0X1700
2.2 在工程中将对应的CCRx_Val值改为0X1770,然后编译、仿真、测频率,如图所示:
图2-2
实验结果分析:
通过本次实验达到了开始的实验目的和要求,加强对TIMERx定时器的理解和使用,以及在仿真过程中学会了怎样应对出现的问题。
实验步骤与结果分析1.在编译、下载之后,会在LCD上显示相应的英文字母和数字。
2.通过修改显示学号和名字,如图所示:
图3-1
实验结果分析:
通过本次实验,达到了实验预期的效果,学会了用怎样实现在LCD上显示中文名,和学号等功能。
昆明理工大学机电工程学院嵌入式系统设计与应用实验报告书实验名称:流水灯实验年级专业及班级:级机自班姓名:学号:指导教师:张文斌、高贯斌评定成绩:教师评语:实验时间: 2014 年 12 月 13 日实验一PORTA口输入、输出实验一、实验要求1.PORTA口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
2.PORTA0、PORTA1作输入口接两个拨动开关,PORTA2、PORTA3作输出口,接两个发光二极管,编写程序读取开关状态,将此状态,在发光二极管上显示出来。
注:行数不够时可加行三、实验程序流程图P1口循环点灯程序框图p1口输入输出程序框图四、实验程序1流水灯#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */ void delay (){unsigned int i,k,j;for (i=0;i<600;i++)for (k=0;k<600;k++)}void main(void) {/* put your own code here */DDRA=0FXXPORTA=0FXXEnableInterrupts;for(;;) {PORTE=0x00;PORTB=0x01;delay();PORTE=0x00;PORTB=0x02;delay();PORTE=0x00;PORTB=0x04;delay();PORTE=0x00;PORTB=0x08;delay();PORTE=0x00;PORTB=0x10;delay();PORTE=0x00;PORTB=0x20;delay();PORTE=0x00;PORTB=0x40;delay();PORTE=0x00;PORTB=0x80;delay();PORTE=0x00;PORTB=0xFF;delay();_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */}}2四个口做输入四个口做输出#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */ void main(void) {/* put your own code here */DDRA=0xFF;PORTA=0XFF;EnableInterrupts;for(;;) {If(PORTA_PA0==0)PORTA_PA5=0;else PORTA_PA5=01;If(PORTA_PA1==0)PORTA_PA6=0;else PORTA_PA6=01;If(PORTA_PA2==0)PORTA_PA4=0;else PORTA_PA4=01;If(PORTA_PA3==0)PORTA_PA7=0;else PORTA_PA7=01;_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */}}五、实验现象以及碰到什么问题?如何解决?实验现象:程序输入后,单片机上的LED灯流动交替闪烁问题:在做更改时间,获取设置值时,出现按得次数、间隔时间与得到的值不符。
试验四【1 】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 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与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 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存放器的值.可以设置/撤消断点;或者全速运行程序,停滞程序运行,不雅察变量的值,断定蜂鸣器控制是否准确.如下图所示:.图未按下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 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存放器的值.可以设置/撤消断点;或者全速运行程序,停滞程序运行,不雅察变量的值,断定蜂鸣器控制是否准确.如下图所示: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; // 所有管脚衔接GPIO PINSEL1 = 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.。