实验4 输入输出流

合集下载

java输入输出流实验报告总结

java输入输出流实验报告总结

java输入输出流实验报告总结Java输入输出流是Java中非常重要的概念,也是Java程序设计的基础。

在Java 程序中,输入输出流用于处理与设备之间的数据传输,例如键盘、鼠标、文件等。

Java的输入输出流主要包含两种类型:字节流和字符流。

字节流以字节为最小读写单位,而字符流以字符为最小读写单位。

Java的输入流有很多种类型,例如:InputStream、ByteArrayInputStream、FileInputStream等。

这些输入流的共同特点是读取外部数据到程序中。

Java的输出流也有多种类型,例如:OutputStream、ByteArrayOutputStream、FileOutputStream等。

这些输出流的共同特点是将程序中的数据输出到外部。

下面将以实验报告的形式进行总结,详细介绍Java输入输出流的原理和使用方法。

实验一:字节流输入输出1. 实验目的:掌握字节流输入输出的基本使用方法。

2. 实验内容:编写一个程序,实现从文件中读取数据,然后将数据输出到另一个文件中。

3. 实验步骤:a. 创建一个输入流对象,用于读取原始文件的数据。

b. 创建一个输出流对象,用于将读取到的数据输出到目标文件中。

c. 循环读取输入流中的数据,直到读取到文件末尾。

d. 将读取到的数据写入输出流中。

e. 关闭输入流和输出流。

4. 实验结果:成功读取原始文件中的数据,并将数据输出到目标文件中。

实验二:字符流输入输出1. 实验目的:掌握字符流输入输出的基本使用方法。

2. 实验内容:编写一个程序,实现从键盘输入文字,然后将文字输出到屏幕上。

3. 实验步骤:a. 创建一个字符输入流对象,用于读取键盘输入的文字。

b. 创建一个字符输出流对象,用于将读取到的文字输出到屏幕上。

c. 循环读取输入流中的文字,直到读取到换行符。

d. 将读取到的文字写入输出流中。

e. 关闭输入流和输出流。

4. 实验结果:成功从键盘输入文字,并将文字输出到屏幕上。

字符及字符串输入输出与顺序程序设计实验报告

字符及字符串输入输出与顺序程序设计实验报告

字符及字符串输入输出与顺序程序设计实验实验报告2.2.1 实验目的1、学习和掌握字符及字符串的输入输出方法。

2、掌握顺序程序的设计方法。

3、进一步掌握调试工具的使用方法。

2.2.2 实验预习要求1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号为0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。

2、复习BCD码运算调整指令。

3、根据“2.2.3 实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。

4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。

2.2.3实验内容从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。

1、问题分析比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。

由于数字0 9的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。

综上所述,需要考虑以下问题。

(1)从键盘输入一个一位十进制数的方法通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:MOV AH, 01HINT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中SUB AL, 30H ;减去30H后得到键入数字所代表的数值(2)提示信息字符串的显示通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。

实验一 P1口输入、输出实验

实验一 P1口输入、输出实验

实验一P1口输入、输出实验一.实验要求1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

2.P1口做输入口,接八个拨动开关,以实验机上74LS273做输出口,编写程序读取开关状态,将此状态,在发光二极管上显示出来。

二.实验目的1.学习P1口的使用方法。

2.学习延时子程序的编写和使用。

三. 实验电路及连线实验一时,P1.0-P1.7接L0-L7。

实验二时,P1.0-P1.7接K0-K7,PO0-PO7接L0-L7。

CS273接8300H。

四.实验说明1.P1口是准双向口。

它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。

因为内部上拉电阻阻值是20KΩ~40KΩ,故不会对外部输入产生影响。

若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。

2.延时子程序的延时计算问题对于程序DELAY:MOV R0,#00HDELAY1:MOV R1,#0B3HDJNZ R1,$DJNZ R0,DELAY1查指令表可知MOV,DJNZ 指令均需用两个机器周期,而一个机器周期时间长度为12/11.0592MHz,所以该段程序执行时间为:((0B3+1)×256+1)×2×12÷11059200=100.002mS五.实验框图程序框图:TP1A.ASM主程序框图TP1B.ASM主程序框图六.附加实验内容1、用P1口的P1.0-P1.3作输出口接4个发光二极管,P1.4-P1.7作输入口接4个拨动开关,将开关的状态读进来并在发光二极管上显示。

七.实验报告要求1、书写实验目的、实验内容、实验连线、以及实验中的观察结果;2、画出流程图、编写实验程序,写出实验的心得体会。

嵌入式系统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.。

汇编语言_输入输出程序设计

汇编语言_输入输出程序设计

《汇编语言程序设计教程》之输入输出程序设计指导老师:XXX制作人:XXX一、实验目的通过学习《汇编语言程序设计教程》的相关知识完成输入输出程序的相关操作,理解有关改程序的理论知识,掌握设计报告的流程以及解决问题的方法,并且提高利用计算机分析解决综合性实际问题的基本能力,将理论与实践相结合,实现对知识的升华以及灵活运用,具体步骤如下:1)掌握输入输出指令的使用;2)了解对CMOS RAM的读写3)访问CMOS RAM,编程,以“年/月/日时:分:秒”的格式,显示当前的日期、时间。

观察并记录运行结果。

二、实验原理及基本技术路线图(方框原理图)程序源代码:assume cs:code,ds:datadata segmenttime db 'yy/mm/dd hh:mm:ss',0dh,0ah,'$'cmos db 9,8,7,4,2,0data endscode segmentstart:mov ax,datamov ds,axmov bx,0mov si,0mov cx,6a: push cxmov al,cmos[bx]out 70h,alin al,71hmov ah,almov cl,4shr al,cland ah,0fhadd ax,3030hmov word ptr time[si],axinc bxadd si,3pop cxloop amov ah,6mov al,0mov bh,1fhmov cx,0mov dx,184fhint 10hmov ah,2mov bh,0mov dh,13mov dl,32int 10hmov dx,offset timemov ah,9int 21hmov ax,4c00hint 21hcode endsend start三、所用仪器、材料(设备名称、型号、规格等)Masm 6.0,debug。

四、实验方法、步骤1.使用masm6.0将所写的程序进行编译,生成exe文件,运行。

数字量输入输出实验

数字量输入输出实验

数字量输入输出实验一、实验目的了解P1口作为输入输出方式使用时,CPU 对P1口的操作方式。

二、实验环境1、软件环境要求Windows XP操作系统以及Keil C51 单片机集成开发环境。

2、硬件环境要求电脑一台,TD-51单片机系统,开关及LED显示单元,单次脉冲单元。

三、实验内容编写实验程序,将P1口的低4位定义为输出,高4位定义为输入,数字量从P1口的高4位输入,从P1口的低4位输出控制发光二极管的亮灭。

提高部分:LED灯控制要求:通过KK1实现LED灯工作方式即时控制,完成LED灯左循环、右循环、间隔闪烁功能。

四、实验分析P1口是8位准双向口,每一位均可独立定义为输入输出,输入位置1。

通过A的左/右移位及赋值55H、0AAH,再将A值送入P1,可实现LED灯左循环、右循环、间隔闪烁功能。

五、实验步骤(一)基础实验程序及实验程序流程图如下。

实验程序:ORG 0000HLJMP MAINORG 0100HMAIN:MOV P1,#0F0H ;将开关状态送入P1高位MOV A,P1 ;送入ASWAP A ;高低位互换MOV P1,A ;将开关状态送入P1低位JMP MAIN ;循环SJMP $END程序流程图:图1 LED开关控制显示功能图图2 实验接线图实验步骤:1. 按图2所示,连接实验电路图,图中“圆圈”表示需要通过排线连接;2. 编写实验程序,编译链接无误后进入调试状态;3. 运行实验程序,观察实验现象,验证程序正确性;4. 按复位按键,结束程序运行,退出调试状态;5. 自行设计实验,验证单片机其它IO 口的使用。

(二)提高实验程序及实验程序流程图如下。

实验程序:实验程序流程图:ORG 0000HLJMP MAINORG 0100HMAIN:KT: ;检查KK1SETB P3.3JNB P3.3,KTCLR P3.3LL1: ;左循环MOV A,#01HX1:MOV P1,ACALL DELAYRL ASETB P3.3JNB P3.3,X1CLR P3.3LL2: ;右循环MOV A,#80HX2:MOV P1,ACALL DELAYRR ASETB P3.3JNB P3.3,X2CLR P3.3LL3: ;间隔闪烁MOV A,#55HMOV P1,ACALL DELAYMOV A,#0AAHMOV P1,ACALL DELAYSETB P3.3JNB P3.3,LL3CLR P3.3JMP KTDELAY: ;延时子程序MOV R2,#00H图3 实验流程图MOV R3,#00HABC:DJNZ R2,ABCDJNZ R3,ABCRETSJMP $END实验步骤:(1)按图4连接实验电路;(2)编写实验程序,编译、链接无误后启动调试;(3)运行实验程序,每按一次KK1+,观察实验现象;(4)验证程序功能,实验结束按复位按键退出调试。

电力电子实验报告

电力电子实验报告

电力电子实验报告学院名称电气信息学院专业班级电气自动化03班学号学生姓名指导教师实验一电力晶体管(GTR)驱动电路研究一.实验目的1.掌握GTR对基极驱动电路的要求2.掌握一个实用驱动电路的工作原理与调试方法二.实验内容1.连接实验线路组成一个实用驱动电路2.PWM波形发生器频率与占空比测试3.光耦合器输入、输出延时时间与电流传输比测试4.贝克箝位电路性能测试5.过流保护电路性能测试三.实验线路四.实验设备和仪器1.MCL-07电力电子实验箱2.双踪示波器3.万用表4.教学实验台主控制屏五.实验方法1.检查面板上所有开关是否均置于断开位置2.PWM波形发生器频率与占空比测试(1)开关S1、S2打向“通”,将脉冲占空比调节电位器RP顺时针旋到底,用示波器观察1和2点间的PWM波形,即可测量脉冲宽度、幅度与脉冲周期,并计算出频率f与占空比D当S2通,RP右旋时:当S2断,RP右旋时:当S2通,RP左旋时:当S2断,RP左旋时:(2)将电位器RP左旋到底,测出f与D。

(3)将开关S2打向“断”,测出这时的f与D。

(4)电位器RP顺时针旋到底,测出这时的f与D。

(5)将S2打在“断”位置,然后调节RP,使占空比D=0.2左右。

3.光耦合器特性测试(1)输入电阻为R1=1.6K 时的开门,关门延时时间测试a.将GTR单元的输入“1”与“6”分别与PWM波形发生器的输出“1”与“2”相连,再分别连接GTR单元的“3”与“5”,“9”与“7”及“6”与“11”,即按照以下表格的说明连线。

b.GTR单元的开关S1合向“”,用双踪示波器观察输入“1”与“6”及输出“7”与“11”之间波形,记录开门时间ton(含延迟时间td和下降时间tf)以及关门时间toff(含储存时间ts和上升时间tr)对应的图为:(2)输入电阻为R2=150 时的开门,关门延时时间测试将GTR单元的“3”与“5”断开,并连接“4”与“5”,调节电位器RP顺时针旋到底(使RP短接),其余同上,记录开门、关门时间。

嵌入式系统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.。

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

实验4 输入输出流
1实验目的
(1)深入理解C++的输入输出的含义与实现方法。

(2)掌握标准输入输出流的应用,包括格式输入输出。

(3)掌握对文件的输入输出操作。

2实验内容
建立两个磁盘文件f1.dat和f2.dat,编程实现以下工作:
①从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中存10个整数);
②读取f1.dat文件中的10个数,存放在f2.dat文件原有数据的后面;
③读取f2.dat中的20个整数,将它们按从小到大顺序保存在f2.dat文件中(不保留原有的
数据)。

参考程序
#include <iostream>
#include <fstream>
using namespace std; //VC++ 6.0要此行
//fun1函数从键盘输入20个整数,分别存放在两个磁盘文件中
void fun1()
{int a[10];
ofstream outfile1("f1.dat"),outfile2("f2.dat"); //分别定义两个文件流对象
if(!outfile1) //检查打开f1.dat是否成功
{cerr<<"open f1.dat error!"<<endl;
exit(1);
}
if(!outfile2) //检查打开f2.dat是否成功
{cerr<<"open f2.dat error!"<<endl;
exit(1);
}
cout<<"enter 10 integer numbers:"<<endl;
for(int i=0;i<10;i++) //输入10个数存放到f1.dat文件中
{cin>>a[i];
outfile1<<a[i]<<" ";}
cout<<"enter 10 integer numbers:"<<endl;
for(i=0;i<10;i++) //输入10个数存放到f2.dat文件中
{cin>>a[i];
outfile2<<a[i]<<" ";}
outfile1.close(); //关闭f1.dat文件
outfile2.close(); //关闭f2.dat文件
}
//从f1,dat读入10个数,然后存放到f2.dat文件原有数据的后面
void fun2()
{ifstream infile("f1.dat"); //f1.dat作为输入文件
if(!infile)
{cerr<<"open f1.dat error!"<<endl;
exit(1);
}
ofstream outfile("f2.dat",ios::app);
//f2.dat作为输出文件,文件指针指向文件尾,向它写入的数据放在原来数据的后面if(!outfile)
{cerr<<"open f2.dat error!"<<endl;
exit(1);
}
int a;
for(int i=0;i<10;i++)
{infile>>a; //磁盘文件f2.dat读入一个整数
outfile<<a<<" "; //将该数存放到f2.dat中
}
infile.close();
outfile.close();
}
//从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat
void fun3()
{ifstream infile("f2.dat"); //定义输入文件流infile,以输入方式打开f2.dat
if(!infile)
{cerr<<"open f2.dat error!"<<endl;
exit(1);
}
int a[20];
int i,j,t;
for(i=0;i<20;i++)
infile>>a[i]; //从磁盘文件f2.dat读入20个数放在数组a中
for(i=0;i<19;i++) //用起泡法对20个数排序
for(j=0;j<19-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
infile.close(); //关闭输入文件f2.dat
ofstream outfile("f2.dat",ios::out);
// f2.dat作为输出文件,文件中原有内容删除
if(!outfile)
{cerr<<"open f2.dat error!"<<endl;
exit(1);}
cout<<"data in f2.dat:"<<endl;
for( i=0;i<20;i++)
{outfile<<a[i]<<" "; //向f2.dat输出已排序的20个数
cout<<a[i]<<" ";} //同时输出到显示器
cout<<endl;
outfile.close();
}
int main()
{fun1(); //分别调用3个函数
fun2();
fun3();
return 0;
}
3预习内容
第7章。

4实验要求
提交实验报告,内容包括相关的理论知识、程序分析和运行结果、程序设计和调试过程和实验小结。

的可以附实验源程序。

相关文档
最新文档