gpio控制流水灯实验报告总结9篇

时间:2022-11-08 17:50:06 来源:网友投稿

gpio控制流水灯实验报告总结9篇gpio控制流水灯实验报告总结  扬州大学广陵学院  课程设计报告  设计题目:姓学班时名:号:级:流水灯设计zty100036137微电81001  7月4日  间下面是小编为大家整理的gpio控制流水灯实验报告总结9篇,供大家参考。

gpio控制流水灯实验报告总结9篇

篇一:gpio控制流水灯实验报告总结

  扬州大学广陵学院

  课程设计报告

  设计题目:姓学班时名:号:级:流水灯设计zty100036137微电81001

  7月4日

  间:2013年

  目

  录

  一.设计任务与要求…………………………………………3

  二.实验目的…………………………………………….…..3

  三.实验思路…………………………………………….…..3

  1系统逻辑设计……………………………………...…3

  2源程序代码………………………………………..…3⑴LED流水灯控制模块………………………………….4⑵分频器…………………………………………………5

  ⑶四位选择器…………………………………………….5

  ⑷六位计数器…………………………………………..6⑸2位计数器…………………………………………...6

  3实验原理调用……………………………………….74仿真结果与分析…………………………….……….7

  四.心得体会……………………………………………..….8

  2

  一.设计任务与要求

  随着大规模集成电路技术和EDA技术的迅速发展,使得数字系统的硬件设计如同软件设计那样方便快捷,而VerilogHDL是当前应用最广泛的并成为IEEE标准的一种硬件描述语言。VerilogHDL是在C语言的基础上演化而来,具有结构清晰、文法简明、功能强大、高速模拟和多库支持等优点。此次课程设计通过使用VerilogHDL硬件描述语言设计了一个程序,使得流水灯可以根据自己所期望的方式点亮,并能在、MAX+plusⅡ进行仿真测试,得出出仿真结果。通过课程设计深入理解VHDL语言的精髓,加深对数字电路和VHDL基本单元的理解,理论联系实际,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。

  二、实验目的

  1、熟悉利用MAX+plusⅡ开发数字电路的基本流程和MAX+plusⅡ软件的相关操作。2、掌握基本的设计思路、软件环境参数配置和仿真。3、了解VerilogHDL语言设计或原理图设计方法。4、通过本知识点的学习,了解流水灯的工作原理,掌握其逻辑功能设计方法。

  三、实验思路

  根据时钟信号的脉冲输入,我们以改变每个LED点亮状态的保持的时间来改变LED的变换间隔时间,根据LED的循环点亮和时间间隔的改变设计成为一个直观的LED流水灯自动循环系统,由此思路我们就可以很容易的着手流水灯控制程序的设计。

  1.系统逻辑设计:

  根据以上的设计要求,运用模块化的设计思路,我们在MAX+plusⅡ软件系统中设计了LED流水灯控制模块、分频器模块、4位选择器、6位计数器、2位计数器,并通过各个模块程序之间的端口合理连接和协调,成功设计出LED流水灯灯控制电路,得到逻辑结构原理图,即为整个流水灯控制电路的逻辑结构。使用VerilogHDL语言设计相应的模块。

  2.源程序代码:

  ⑴LED流水灯控制模块

  控制流水灯闪烁方案。moduleLED(a,led);input[5:0]a;output[7:0]led;reg[7:0]led;always@(a)

  3

  begincase(a)0:led<=1:led<=2:led<=3:led<=4:led<=5:led<=6:led<=7:led<=

  8'b11111110;8'b11111101;8'b11111011;8'b11110111;8'b11101111;8'b11011111;8'b10111111;8'b01111111;

  8:led<=8'b00111111;9:led<=8'b10011111;10:led<=8'b11001111;11:led<=8'b11100111;12:led<=8'b11110011;13:led<=8'b11111001;14:led<=8'b11111100;15:led<=8'b11111010;16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:ledledledledledledledledledledledledledledledledledledledledledled<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=8'b00011111;8'b11000111;8'b11110001;8'b11111000;8'b11110010;8'b00111011;8'b00101111;8'b10111100;8'b00001111;8'b10000111;8'b11000011;8'b11100001;8'b11110000;8'b10111000;8'b11101000;8'b00011101;8'b00000111;8'b10000011;8'b11000001;8'b11100000;8'b01110000;8'b00111000;

  4

  38:led<=8'b11001000;39:led<=8'b00010101;default:led<=8'b00000000;endcaseendendmodule转化成symbol文件

  ⑵分频器

  分频器可以用四位计数器替代。4位选择器选择不同的计数时,就会实验分频器的功能。modulecounter4(q,clk);output[3:0]q;inputclk;reg[3:0]q;always@(negedgeclk)beginq<=q+1;endendmodule转化成symbol文件

  ⑶四选一选择器

  用来选择分频器不同时钟信号来控制流水灯亮暗速度。modulelx(cg,clk,sel);input[3:0]cg;input[1:0]sel;outputclk;regclk;always@(cgorsel)case(sel)2'b00:clk<=cg[0];2'b01:clk<=cg[1];2'b10:clk<=cg[2];2'b11:clk<=cg[3];default:clk<=2'bx;

  5

  endcaseendmodule转化成symbol文件

  ⑷六位计数器

  六位计数器的输出来控制彩灯亮暗顺序一次执行modulecounter6(q,clk,cout);output[5:0]q;outputcout;regcout;inputclk;reg[5:0]q;always@(posedgeclk)beginif(q==63)begincout<=1;q<=0;endelsebeginq<=q+1;cout<=0;endendendmodule转化成symbol文件

  ⑸2位计数器

  6位计数器进位输出是2位计数器输入,2位计数器输出,用来反馈给选择器,选择不同时钟信号。modulecounter2(q,clk);output[1:0]q;inputclk;reg[1:0]q;always@(negedgeclk)

  6

  beginq<=q+1;endendmodule转化成symbol文件

  3.文本式顶层文件调用

  moduleled8(a,e);inputa;output[7:0]e;rege;LEDa1(q,e);Counter6a2(q,clk,cout);Lxa3(cg,clk,sel);Counter4a4(q,clk);Counter2a5(q,clk);endmodule

  原理顶层文件图

  4.仿真结果与分析

  7

  从仿真结果中可以看出每一次波形过来时八盏彩灯亮的顺序和控制电路顺序一样,共设计四十种情况,当这四十种情况依次按照控制电路设计顺序亮结束时,剩余二十四种情况全部为熄灭,六十四种全部亮结束时再依次重复上面的顺序。

  四、心得体会

  通过本次课程设计,我基本对VerilogHDL的设计流程有了入门的了解和认识,在课堂之外进一步加深了对半定制课程各知识点的学习和以及MAX+plusⅡ软件开发平台的操作。也深深地感受到,工科的学习是来不得半点虚伪的,一定要自己动手操作,不懂就是不懂,而且不懂的多问问老师。对于程序的编写过程其实就是一个改错的过程,通过改错就会发现自己只是的不足。做课程设计的过程也是一个升华自我耐心的机会,不能因为一时找不到方法就放弃。课程设计与此同时也让我加深强了对课题的专业知识的认识和对专业文件检索能力。在短短的一周左右的时间里,我们经过自己的努力编写了流水灯设计。同时也感谢老师的帮助和提醒。

  8

  

  

篇二:gpio控制流水灯实验报告总结

  课程实验报告

  学院:姓名班级

  专业:学号指导老师

  2018年10月18日

  课程名称嵌入式系统原理与应用实验

  成

  实验名称GPIO输出-流水灯

  绩

  1.实验目的

  通过一个经典的跑马灯程序,了解STM32F1的IO口作为输出使用的方

  法。通过代码控制开发板上的4个LED灯交替闪烁,实现类似跑马灯的效果。

  2.实验内容

  工程文件建立、程序的调试,编译、jlink驱动的安装与配置、程序下载、实验结果验证。

  4.实验方法和步骤(含设计)(1)实验硬件连接图

  四个led灯如图连接到GPIO的6~9引脚上。

  (2)软件分析使用到的GPIO端口需配置为输出模式,使用推挽(PP)模式输出,IO口

  速度为50MHz。(3)实验步骤

  ①建立工程文件:导入程序运行需要的库,加入主程序,调试运行环境,使程序可以成功被编译和运行且没有错误和警告。

  ②安装JLINK驱动程序,点击下载按钮将程序烧写进开发板中。③检查led灯是否逐一顺序点亮,能够通过调整程序使点亮顺序改变。(4)原函数

  3.实验环境Windouws10KeiluVision5

  5.程序及测试结果

  6.实验分析与体会

  如果4个LED灯是与A口的PA1、PA2、PA3、PA4相连,将led.c文件中的“GPIOC”改为“GPIOA”,并将Pin_X改为对应的1~4脚。

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);改为RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);

  成绩评定

  实验日期:2018年10月18日

  教师签名:年月日

  

  

篇三:gpio控制流水灯实验报告总结

  实验二

  一、实验目的:

  1.正确安装keil软件

  IO口实现LED灯闪烁

  2.正确安装调试驱动,熟悉实验板的用法3.学习IO口的使用方法。

  二、实验设备:

  单片机开发板、学生自带笔记本电脑

  三、实验内容:

  利用单片机IO口做输出,接发光二极管,编写程序,使发光二极管按照要求点亮。

  四、实验原理:

  1.LPC1114一共有42个GPIO,分为4个端口,P0、P1、P2口都是12位的宽度,引脚从Px.0~Px.11,P3口是6位的宽度,引脚从P3.0~P3.5。引脚的内部构造如图所示。其中Rpu为上拉电阻、Rpd为下拉电阻。

  2.为了节省芯片的空间和引脚的数目,LPC1100系列微处理器的大多数引脚都采用功能复用方式,用户在使用某个外设的时候,要先设置引脚。控制引脚设置的寄存器

  称之为IO配置寄存器,每个端口管脚PIOn_m都分配一个了一个IO配置寄存器IOCON_PIOn_m,以控制管脚功能和电气特性。3.IOCON_PIOn_m寄存器其位域定义如表所列。

  位域符号描述

  选择管脚功能000:选择功能1001:选择功能2(如果未定义功能2,则保留)2:0FUNC010:选择功能3(如果未定义功能3,则保留)011:选择功能4(如果未定义功能4,则保留)100~111:保留

  选择功能模式(片内上拉/下拉电阻控制)00:无效模式(无上拉和下拉电阻被允许)4:3MODE01:允许下拉电阻10:允许上拉电阻11:中继模式

  滞后模式5HYS1:禁止0:允许

  6

  -

  保留,复位值为1

  选择模拟/数字模式(无AD功能,则保留,复位值为1)7ADMODE0:模拟输入模式1:数字功能模式

  选择为I2C模式9:8I2CMODE00:标准I2C模式/快速I2C模式(默认)01:标准I/O功能

  10:FM+I2C模式11:保留

  31:8

  -

  保留,复位值为0

  4.各引脚IOCON寄存器的位[2:0]配置不同的值所相应功能。

  5.GPIO寄存器GPIO数据寄存器用于读取输入管脚的状态数据,或配置输出管脚的输出状态,表5-5对GPIOnDATA寄存器位进行描述。

  位11:031:12

  符号DATA-

  访问R/W-

  描述管脚PIOn_0~PIOn_11输入数据(读)或输出数据(写)保留

  GPIO的数据方向的设置是通过对GPIOnDIR寄存器的位进行与或操作实现的,LPC1100微处理器和8051单片机的GPIO不同,在使用前一定要先设置数据方向才能使用,

  位符号访问值011:0IOR/W131:12引脚PIOn_0~PIOn_11配置为输出保留描述引脚PIOn_0~PIOn_11配置为输入

  6.发光二级管的工作电压和工作电流如何?_______________________________________________________________________________________________________________________________________________________________________________________________________________________________。7.发光二极管的限流电阻如何计算?__________________________________________________________________________。

  五、实验原理图:

  六、实验步骤:

  一、基本要求1、默写发光二极管闪烁程序。二、扩展要求1.查找关于呼吸灯的资料,弄懂呼吸灯工作原理。2.自行编写呼吸灯代码,在实验板子上面验证。

  七、程序框图:八、供参考程序:

  /*************************************************************************/#include"LPC11XX.H"//头文件#defineLED1_ON()(LPC_GPIO1->DATA&=~(1<<0))//点亮连接到P1.0的LED#defineLED1_OFF()(LPC_GPIO1->DATA|=(1<<0))//熄灭连接到P1.0的LED#defineLED2_ON()(LPC_GPIO1->DATA&=~(1<<1))//点亮连接到P1.1的LED#defineLED2_OFF()(LPC_GPIO1->DATA|=(1<<1))//熄灭连接到P1.1的LED/***************************************************************************FunctionName:Delay()*Description:延时函数*EntryParameter:None*ReturnValue:None**************************************************************************/voidDelay()

  {uint16_ti,j;for(i=0;i<5000;i++)for(j=0;j<200;j++);}/***************************************************************************FunctionName:LedInit()*Description:初始化LED引脚*EntryParameter:None*ReturnValue:None**************************************************************************/voidLedInit(void){LPC_SYSCON->SYSAHBCLKCTRL|=(1<<16);//使能IOCON时钟LPC_IOCON->R_PIO1_0&=~0x07;LPC_IOCON->R_PIO1_0|=0x01;//把P1.0脚设置为GPIOLPC_IOCON->R_PIO1_1&=~0x07;LPC_IOCON->R_PIO1_1|=0x01;//把P1.1脚设置为GPIOLPC_SYSCON->SYSAHBCLKCTRL&=~(1<<16);//禁能IOCON时钟LPC_GPIO1->DIR|=(1<<0);//把P1.0设置为输出引脚LPC_GPIO1->DATA|=(1<<0);//把P1.0设置为高电平LPC_GPIO1->DIR|=(1<<1);//把P1.1设置为输出引脚LPC_GPIO1->DATA|=(1<<1);//把P1.1设置为高电平}/***************************************************************************FunctionName:main()*Description:主函数*EntryParameter:None*ReturnValue:None**********************************************************************/intmain(void){LedInit();while(1){Delay();LED1_ON();LED2_OFF();Delay();LED1_OFF();LED2_ON();}}

  

  

篇四:gpio控制流水灯实验报告总结

  实验四:GPIO输出控制实验

  一、实验目的1.掌握LPC21XX专用工程模板的使用;2.掌握EasyJTAG仿真器的安装和使用;3.能够在EasyARM21XX开发板上运行第一个程序(无操作系统);4.熟悉LPC2000系列ARM7微控制器的GPIO控制。二、实验设备硬件:PC机一台、EasyARM2103开发板一套软件:Windows98/XP/2000系统,ADS1.2集成开发环境三、实验内容

  控制EasyARM2103开发板上的LED闪烁形成流水灯效果。四、实验预习要求

  仔细阅读《EasyARM2103》手册第4章的内容,熟悉GIPO的设置。仔细阅读《EasyARM2103》第2章的内容,了解EasyARM2103开发板的硬件结构,注意LED灯的相关控制电路。仔细阅读《EasyARM2103》第3章的内容,了解ADS1.2集成开发环境、LPC2200专用工程模板、EasyJTAG仿真器的应用。五、实验原理如何在EasyARM2103上运行第一个程序。安装ADS1.2(PC)了解ADS1.2(PC)连接EasyJTAG仿真器和EasyARM2103开发板(硬件)安装EasyJTAG驱动程序(PC)添加工程模板(PC)用工程模板建立第一个工程(PC)仿真调试第一个工程(PC+硬件)说明:(PC)----------------属于在PC机上操作,即软件的操作(硬件)--------------属于开发板硬件操作(PC+硬件)--------属于在PC机上进行软件操作,硬件上要连接或跳线操作六、实验步骤1.连接EasyJTAG仿真器和EasyARM2103开发板,然后安装EasyJTAG仿真器的驱动程序(若已经安装过,此步省略)。2.为ADS1.2增加LPC2103专用工程模板(若已增加过,此步省略)。3.启动ADS1.2,使用ARMExecutableImageforlpc2103工程模板建立一个工程BeepCon_C。4.建立C源文件BeepCon.c,编写实验程序,然后添加到工程的user组中。5.选用DebugInRAM生成目标,如图3.9所示,然后编译连接工程。

  图3.9选择生成目标

  6.将EasyARM2103开发板上的JP4跳线短接。

  7.选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。

  8.全速运行程序,程序将会在beepcon.c的主函数中停止(因为main函数起始处默认设置

  有断点)。

  9.单击ContextVariable图标按钮(或者选择【ProcessorViews】->【Variables】)打开变量观

  察窗口,通过此窗口可以观察局部变量和全局变量。选择【SystemViews】->【Debugger

  Internals】即可打开LPC2100系列ARM7微控制器的片内外设寄存器窗口。

  10.可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,观察变量

  的值,判断LED控制是否正确。

  11.实验结束后,在AXD中设置仿真器为片外RAM调试方式的设置,以便于后面实

  验的正确操作。、

  12.更改程序实现流水等的功能,一秒亮一盏灯,从左向右,一直循环。

  七、实验参考程序

  选择低速GPIO,控制LED灯闪烁,示例程序如程序清单4.1所示。此示例操作需要短接

  JP4的P0.17,输出控制LED1。

  程序清单4.1GPIO控制LED闪烁

  #include"config.h"#defineLED11<<17

  /*P0.17控制LED1

  */

  /****************************************************************************

  **函数名称:DelayNS

  **功能描述:延时函数

  **入口参数:uiDly值越大,延时时间越长

  **出口参数:无

  ****************************************************************************/

  voidDelayNS(uint32uiDly)

  {

  uint32i;

  for(;uiDly>0;uiDly--){

  for(i=0;i<50000;i++);

  }

  /***************************************************************************/

  **函数名称:main

  **功能描述:跳线JP4短接,LED1闪烁

  **入口参数:无

  **出口参数:无

  ****************************************************************************/

  intmain(void)

  {

  PINSEL1=PINSEL1&(~(0x03<<2));

  /*将P0.17设置为GPIO*/

  IO0DIR=LED1;

  /*设置LED控制口为输出*/

  IO0SET=LED1;

  /*LED1熄灭

  */

  while(1){

  IO0SET=LED1;

  /*LED1熄灭

  */

  DelayNS(50);

  /*延时

  */

  IO0CLR=LED1;

  /*LED1点亮

  */

  DelayNS(50);

  /*延时

  */

  }

  return0;

  }

  3.4.8思考

  为什么这个实验的工程不需要设置连接地址?(提示:LPC2200专用工程模板已集成了起

  动代码、编译选项和连接地址设置等等)

  在实验参考程序中,如何控制蜂鸣器报警的速度?

  在LPC2000系列ARM7微控制器中,有哪两个管脚作GPIO输出时需要外接上拉电阻?

  

  

篇五:gpio控制流水灯实验报告总结

  流水灯实验报告

  单片机流水灯试验

  一、实验目得:1、进一步熟悉KeilC51集成开发环境调试功能得使用2、学会自己编写程序,进行编译、仿真调试3、学会使用单片机得P0口作为I/O口去控制外围电路,实现LED灯以固定得频率进行闪烁、二、实验设备:1、PC机2、SW-51PROC单片机综合实验平台三、实验内容:1、编写一段程序,用单片机P0口得8个输出去控制8个LED灯,实现如下功能:先使8个LED灯轮流点亮,从左向右移动,时间间隔0、5s。以上过程循环实现、四、实验步骤:1、实验原理:单片机流水得实质就是单片机各引脚在规定得时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电得时间后便灭灯得过程,实验中使用了单片机得P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2得各端口逐一置零,中间使用时间间隔隔开各灯得亮灭。使用rl或rr

  a实现位得转换。

  A寄存器得位经过rra之后转换如下所示:A0A1A2A3A4A5A6A7然后将A寄存器转换一次便送给P2即MOVP2,A便将转换后得数送到了P2口,不断循环下去,便实现了逐位置一操作、2、实验电路图

  a11a223a34a4b1b2b3b45678GND0a11a223a34a4P2.4P2.5P2.6P2.75678a11a223a34a4P2.0P2.1P2.2P2.35678Vcc10+5v80C513通过仿真实验正确性

  代码如下:ORG0

  MOVA,#00000001BLOOP:MOVP2,ARLAACALLDELAYSJMPLOOPDELAY:MOVR1,#255DEL2:MOVR2,#250DEL1:DJNZR2,DEL1

  DJNZR1,DEL2RETEndORG0000HLJMPMAIN4、实验程序:

  ORG0050HMAIN:MOVR0,#14

  MOVDPTR,#TABLEL0:

  MOVA,#0L1:

  MOVCA,DPTR+A

  MOVP0,A

  ACALLDELAY1

  INCA41DJNZR0,L1SJMPL0

  DELAY1:

  MOVR1,#250LOOP1:

  MOVR2,#250LOOP2:

  NOP

  NOP

  NOP

  NOP

  NOP

  DJNZ

  2POOL,0Rﻩ

  DJNZR1,LOOP1

  RETTABLE:DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDHEND5、实验结果:

  五、实验总结这次试验我通过Proteus仿真实现对流水灯功能得实现。受益匪浅,对80c51得功能与结构有了深层次得了解,我深刻得明白,要想完全了解c51还有一定距离,但我会一如既往得同困难作斗争。在实验中,我遇到了不少困难,比如不知道怎么将程序写进单片机中,写好程序得却总出错,不知道什么原因,原来没有生成hex文件。这些错误令我明白以后在试验中要步步细心,避免出错、

  

篇六:gpio控制流水灯实验报告总结

  美创作

  实验四GPIO输入实验之迟辟智

  一、实验目的

  1、能够使用GPIO的输入模式读取开关信号.

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

  3、掌握用C语言编写法式控制GPIO.二、实验环境PC机一台

  ADS1.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.4LED控制电路法式首先设置管脚连接寄存器PINSEL0和PINSEL1,设置P0.16为输入,设置为输出.然后检测端口P0.16的电平,对

  进行相应的控制,流程图如图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与P,按下Key1时,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;//所有管脚连接GPIOPINSEL1=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寄存器的值.可以设置/取消断点;或者全速运行法式,停止法式运行,观察变量的值,判断蜂鸣器控制是否正确.如下图所示:

  .图未按下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"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图标按钮(或者选择Processor

  Views->Variables)翻开变量观察窗口,通过此窗口可以观察局部变量和全局变量.选择SystemViews>DebuggerInternals即可翻开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"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;//所有管脚连接GPIO

  PINSEL1=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控制流水灯实验报告总结

  自己用中断方法完成了本次实验也尝试用查询方法编写程序知道中断方法是在有中断请求时cpu再去处理之前可一直忙于其他事情而查

  流水灯控制实验报告及程序

  实验三流水灯控制实验姓名专业通信工程学号成绩一、实验目的1.掌握KeilC51软件与protues软件联合仿真调试的方法;2.掌握如何使用程序与查表等方法实现流水效果;3.掌握按键去抖原理及处理方法。1、实验仪器与设备1.微机1台2.KeilC51集成开发环境3.Proteus仿真软件二、实验内容1.用Proteus设计一流水灯控制电路。利用P1口控制8个发光二级管L1—L8。P3.3口接一按键K1。参考电路如下图所示。其中

  74LS240为八反响三态缓冲器/线驱动器。2.用中断或查询方式编写程序,每按动一次K1键,演示不同的流水效果。若用KEY表示按键的次数,则其对应的流水效果如下:①KEY=0:L1-L8全亮;②KEY=1:L1-L8先全灭,然后自右向左单管点亮,如此循环;③KEY=2:L1-L8先全灭,然后自右向左依次点亮,如此循环;④KEY=3:L1-L8先全亮,然后自左向右依次熄灭,如此循环;⑤KEY=4:L1-L8先全灭,然后整体闪烁,如此循环;

  ⑥KEY=5:自行设计效果。以上移位及闪烁时间间隔均设置为0.3秒,按动5次按键后,再按键时,流水效果从头开始循环。四、实验原理1.按键去抖原理:通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如下图所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5?10ms按键抖动会引起一次按键被误读多次。为了确保CPU寸键的一次闭合仅做一次处理,必须去除按键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。常用软件方法去抖动,即检测到按键闭合后执行一个5?10ms延时程序;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有按键按下。当检测到按键释放2.74LS240八反相三态缓冲器/线驱动器引脚排列图:3.中断原理:当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。每次按键是一次外部中断,按下按键后,CPU利用switchcase语句跳转到相应语句执行。五、实验步骤1.用Proteus设计流水灯控制电路;2.在KeilC51中编写流水灯控制程序,编译通过后,与Proteus联合调试;3.按动K1键,观察是否达到演示效果;

  4.试用中断和查询两种方式编写程序,比较二者区别。

  六、电路设计及调试

  1.实验电路

  2.程序设计与调试

  #include

  #defineucharunsignedchar

  #defineuintunsignedint

  uchari=0,j,k,m,n;

  uchar

  code

  table1[]={0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//自右

  向左单个点亮二极管的代码

  uchar

  code

  table2[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//自右向

  左依次点亮二极管的代码

  uchar

  code

  table3[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//自左向

  右依次熄灭二极管的代码

  uchar

  code

  table4[]={0x00,0x03,0x06,0x0c,0x18,0x30,0x60,0xc0};//双灯循环

  右移voiddelay(uinta);

  voidINT_1()interrupt2

  {

  EX1=0;

  delay(20);

  EX1=1;

  i++;

  if(i==6)

  i=0;

  }

  voidmain()

  {EA=1;//打开总中断EX1=1;//打开外部中断1IT1=1;//设置中断触发方式为下降沿触发方式while(1){switch(i){case0:P1=0xff;break;case1:P1=table1[j];delay(500);j++;if(j==10)j=0;break;case2:P1=table2[k];delay(500);k++;if(k==10)k=0;break;case3:P1=table3[m];delay(500);m++;if(m==10)m=0;break;case4:P1=0x00;delay(300);P1=~P1;delay(300);break;case5:P1=table4[n];delay(500);n++;if(n==10)n=0;break;default:break;}}}voiddelay(uinta){ucharb;for(a;a>0;a--)//循环600*255次机器在这里执行需要一段时间也就达到了延时效果for(b=255;b>0;b--);

  }在“Optionsfortarget”的“debug”里选中“ProteusVSMSimulator”并选择输出“hex”文件进行联合调试。分别进行全速调试与单步调试,看是否出现编程所想要实现的效果。3.实验结果按下不同的按键次数,执行不同的流水效果,自行设计效果为双灯循环右移。七、实验总结及问题通过本次流水灯控制实验,进一步掌握了KeilC51软件与proteus联合仿真调试的方法,逐步熟练了单步调试的方法。自己用中断方法完成了本次实验,也尝试用查询方法编写程序,知道中断方法是在有中断请求时CPU再去处理,之前可一直忙于其他事情,而查询方法需一直查询标志位,CPU不能做其他事情,中断方法效率要比查询方式高而且较简单。第一次用按键控制电路,学习了按键的去抖原理及使用方法。在实验中,会出现未知效果,总体看来原因不明,只要进行单步调试就可找到问题所在。思考:如果不进行去抖处理,CPU可能会误判,按下后认为按键松开,多次执行相应程序,得不到想要的控制效果。

  

  

篇八:gpio控制流水灯实验报告总结

  实验二

  实验2GPIO实现LED流水灯

  IO口实现LED灯闪烁

  一、实验目的:

  1.正确安装keil软件2.正确安装调试驱动,熟悉实验板的用法3.学习IO口的使用方法。

  二、实验设备:

  单片机开发板、学生自带笔记本电脑

  三、实验内容:

  利用单片机IO口做输出,接发光二极管,编写程序,使发光二极管按照要求点亮。

  四、实验原理:

  1.LPC1114一共有42个GPIO,分为4个端口,P0、P1、P2口都是12位的宽度,引脚从Px。0~Px.11,P3口是6位的宽度,引脚从P3。0~P3.5.引脚的内部构造如图所示。其中Rpu为上拉电阻、Rpd为下拉电阻。

  2.为了节省芯片的空间和引脚的数目,LPC1100系列微处理器的大多数引脚都采用功能复用方式,用户在使用某个外设的时候,要先设置引脚。控制引脚设置的寄存器称之为IO配置寄存器,每个端口管脚PIOn_m都分配一个了一个IO配置寄存器IOCON_PIOn_m,以控制管脚功能和电气特性。

  3.IOCON_PIOn_m寄存器其位域定义如表所列。

  实验2GPIO实现LED流水灯

  位域

  符号

  描述

  选择管脚功能

  000:选择功能1

  2:0

  FUNC

  001:选择功能2(如果未定义功能2,则保留)010:选择功能3(如果未定义功能3,则保留)

  011:选择功能4(如果未定义功能4,则保留)

  100~111:保留

  选择功能模式(片内上拉/下拉电阻控制)

  00:无效模式(无上拉和下拉电阻被允许)

  4:3

  MODE01:允许下拉电阻

  10:允许上拉电阻

  11:中继模式

  滞后模式

  5

  HYS1:禁止

  0:允许

  6

  -

  保留,复位值为1

  选择模拟/数字模式(无AD功能,则保留,复位值为1)

  7

  ADMODE0:模拟输入模式

  1:数字功能模式

  选择为I2C模式

  00:标准I2C模式/快速I2C模式(默认)

  9:8I2CMODE01:标准I/O功能

  10:FM+I2C模式

  11:保留

  31:8

  -

  保留,复位值为0

  4.各引脚IOCON寄存器的位[2:0]配置不同的值所相应功能。

  实验2GPIO实现LED流水灯

  5.GPIO寄存器

  GPIO数据寄存器用于读取输入管脚的状态数据,或配置输出管脚的输出状态,表5-5对GPIOnDATA寄存器位进行描述。

  位

  符号

  访问

  描述

  11:031:12

  DATA-

  实验2GPIO实现LED流水灯

  R/W

  管脚PIOn_0~PIOn_11输入数据(读)或输出数据(写)

  -

  保留

  GPIO的数据方向的设置是通过对GPIOnDIR寄存器的位进行与或操作实现的,LPC1100微处理器和8051单片机的GPIO不同,在使用前一定要先设置数据方向才能使用,

  位

  符号

  访问

  值

  描述

  0

  11:0

  IO

  R/W

  1

  引脚PIOn_0~PIOn_11配置为输入引脚PIOn_0~PIOn_11配置为输出

  31:12

  —

  -

  -

  保留

  6.发光二级管的工作电压和工作电流如何?_______________________________________________________________________________________________________________________________________________________________________________________________________________________________。7.发光二极管的限流电阻如何计算?__________________________________________________________________________。

  五、实验原理图:

  实验2GPIO实现LED流水灯

  六、实验步骤:

  一、基本要求1、默写发光二极管闪烁程序。二、扩展要求1.查找关于呼吸灯的资料,弄懂呼吸灯工作原理。2。自行编写呼吸灯代码,在实验板子上面验证。

  七、程序框图:

  八、供参考程序:

  /**************************************************************

  ***********/

  #include"LPC11XX.H”

  //头文件

  #defineLED1_ON()(LPC_GPIO1—〉DATA&=~(1〈〈0))//点亮连接到P1。0的LED

  #defineLED1_OFF()(LPC_GPIO1-〉DATA|=(1<〈0))

  //熄灭连接到P1.0的LED

  #defineLED2_ON()(LPC_GPIO1-〉DATA&=~(1〈<1))//点亮连接到P1。1的LED

  #defineLED2_OFF()(LPC_GPIO1—>DATA|=(1〈〈1))

  //熄灭连接到P1.1的LED

  /********************************************************

  ******************

  *FunctionName:Delay()

  *Description:延时函数

  *EntryParameter:None

  *ReturnValue:None

  ***********************************************************

  ***************/

  voidDelay()

  {

  uint16_ti,j;

  实验2GPIO实现LED流水灯

  for(i=0;i〈5000;i++)for(j=0;j<200;j++);

  }/**************************************************************************

  *FunctionName:LedInit()*Description:初始化LED引脚*EntryParameter:None*ReturnValue:None**************************************************************************/voidLedInit(void){

  

篇九:gpio控制流水灯实验报告总结

  流水灯控制实验报告及程序

  文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]

  实验三

  流水灯控制实验

  姓名专业通信工程学号成绩一、实验目的

  1.掌握KeilC51软件与protues软件联合仿真调试的方法;2.掌握如何使用程序与查表等方法实现流水效果;3.掌握按键去抖原理及处理方法。二、实验仪器与设备1.微机1台2.KeilC51集成开发环境3.Proteus仿真软件三、实验内容1.用Proteus设计一流水灯控制电路。利用P1口控制8个发光二级管L1—

  L8。口接一按键K1。参考电路如下图所示。其中74LS240为八反响三态缓冲器/线驱动器。2.用中断或查询方式编写程序,每按动一次K1键,演示不同的流水效果。若用KEY表示按键的次数,则其对应的流水效果如下:①KEY=0:L1-L8全亮;②KEY=1:L1-L8先全灭,然后自右向左单管点亮,如此循环;③KEY=2:L1-L8先全灭,然后自右向左依次点亮,如此循环;④KEY=3:L1-L8先全亮,然后自左向右依次熄灭,如此循环;⑤KEY=4:L1-L8先全灭,然后整体闪烁,如此循环;⑥KEY=5:自行设计效果。以上移位及闪烁时间间隔均设置为秒,按动5次按键后,再按键时,流水效果从头开始循环。

  四、实验原理1.按键去抖原理:通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如下图所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5~10ms。按键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅做一次处理,必须去除按键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。常用软件方法去抖动,即检测到按键闭合后执行一个5~10ms延时程序;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有按键按下。当检测到按键释放后,也要给5~10ms的延时,待后延抖动消失后,才能转入该键的处理程序。

  2.74LS240:八反相三态缓冲器/线驱动器引脚排列图:

  3.中断原理:当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。每次按键是一次外部中断,按

  下按键后,CPU利用switchcase语句跳转到相应语句执行。五、实验步骤

  1.用Proteus设计流水灯控制电路;2.在KeilC51中编写流水灯控制程序,编译通过后,与Proteus联合调试;3.按动K1键,观察是否达到演示效果;4.试用中断和查询两种方式编写程序,比较二者区别。六、电路设计及调试1.实验电路2.程序设计与调试#include<>#defineucharunsignedchar#defineuintunsignedintuchari=0,j,k,m,n;ucharcodetable1[]={0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//自右向左单个点亮二极管的代码ucharcodetable2[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//自右向左依次点亮二极管的代码

  ucharcodetable3[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//自左向右依次熄灭二极管的代码ucharcodetable4[]={0x00,0x03,0x06,0x0c,0x18,0x30,0x60,0xc0};//双灯循环右移voiddelay(uinta);voidINT_1()interrupt2{

  EX1=0;delay(20);EX1=1;i++;

  if(i==6)i=0;}voidmain(){EA=1;//打开总中断EX1=1;//打开外部中断1IT1=1;//设置中断触发方式为下降沿触发方式while(1){

  switch(i){

  case0:P1=0xff;break;

  case1:P1=table1[j];delay(500);j++;if(j==10)j=0;break;

  case2:P1=table2[k];delay(500);k++;if(k==10)k=0;break;

  case3:P1=table3[m];delay(500);m++;if(m==10)m=0;break;

  case4:P1=0x00;delay(300);P1=~P1;delay(300);break;

  case5:P1=table4[n];delay(500);n++;if(n==10)n=0;break;

  default:break;}}}voiddelay(uinta){ucharb;

  for(a;a>0;a--)//循环600*255次机器在这里执行需要一段时间也就达到了延时效果

  for(b=255;b>0;b--);}在“Optionsfortarget”的“debug”里选中“ProteusVSMSimulator”并选择输出“hex”文件进行联合调试。分别进行全速调试与单步调试,看是否出现编程所想要实现的效果。3.实验结果

  按下不同的按键次数,执行不同的流水效果,自行设计效果为双灯循环右移。七、实验总结及问题通过本次流水灯控制实验,进一步掌握了KeilC51软件与proteus联合仿真调试的方法,逐步熟练了单步调试的方法。自己用中断方法完成了本次实验,也尝试用查询方法编写程序,知道中断方法是在有中断请求时CPU再去处理,之前可一直忙于其他事情,而查询方法需一直查询标志位,CPU不能做其他事情,中断方法效率要比查询方式高而且较简单。第一次用按键控制电路,学习了按键的去抖原理及使用方法。在实验中,会出现未知效果,总体看来原因不明,只要进行单步调试就可找到问题所在。思考:如果不进行去抖处理,CPU可能会误判,按下后认为按键松开,多次执行相应程序,得不到想要的控制效果。

  

  

推荐访问:gpio控制流水灯实验报告总结 流水 实验 控制