基于STM32的四路抢答器_第1页
基于STM32的四路抢答器_第2页
基于STM32的四路抢答器_第3页
基于STM32的四路抢答器_第4页
基于STM32的四路抢答器_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

可编辑版/课程设计说明书题目:基于STM32的四路抢答器学院:年级专业:学号:学生姓名:指导教师:摘要在各种智力竞赛场合,抢答器是必不可少的最公正的用具。在我们各种竞赛中我们也经常能看到有抢答的环节,某些举办方采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观误断造成比赛的不公平性,而抢答器的应用就能避免这种弊端。今天随着科技的不断进步抢答器的制作也更加追求精益求精,人们摆脱了耗费很多元件仅来实现用指示灯和一些电路来实现简单的抢答功能,使第一个抢答的参赛者的编号能通过指示灯显示出来,避免不合理的现象发生。但这种电路不易于扩展,而且当有更高要求时就无法实现,例如参赛人数的增加。随着数字电路的发展,数字抢答器诞生了,它易于扩展,可靠性好,集成度高,而且费用低,功能更加多样,是一种高效能的产品。而如今在市场上销售的抢答器大多采用可编程逻辑元器件,或利用单片机技术进行设计。本文实现了一个基于嵌入式STM32单片机的4路抢答器系统设计,本系统设计主要 分为硬件设 备和软件控制两大部分。外部硬件使用STM32单片机作为控制中心,用4 个按键作为抢答输入,抢答开始后,抢答成功者的LED灯标识为红色闪烁,并且显示各 抢答输入的时间。关键词:智能抢答器,STM32,按键输入,数码管显示目录TOC\o"1-3"\h\u23655摘要226844目录33406第1章绪论5247001.1课题研究的相关背景5106991.2选题的目的和意义521331.3课题研究的内容5148881.4国内外研究现状644841.5抢答器目前存在的主要问题61376第2章抢答器的系统概述7150212.1系统的主要功能7112872.2抢答器的工作流程761722.3STM32的功能及简介7303892.4抢答器的优点及组成1022042.5本章小结1118623第3章系统的硬件设计与开发11271363.1系统硬件总体设计11224453.2STM32最小系统13304723.4时钟频率电路的设计1424973.5复位电路的设计15167423.6数码管显示16175303.7键盘电路的设计1743303.8LED电路18285483.9本章小结1931013第4章系统的软件设计与开发19226264.4主要程序分析21166394.5本章小结3017437第5章总结与展望31215195.1总结31101785.2展望3229633致谢331395参考文献34第1章绪论课题研究的相关背景抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辩认出选手号码。现在大多数抢答器均使用单片机和数字集成电路,并增加了许多新功能,如选手号码显示、抢按前或抢按后的计时、选手得分显示等功能。本系统设计主要分为硬件设备和软件控制两大部分。外部硬件使用STM32单片机作为控制中心,用4个按键作为抢答输入,抢答开始后,抢答成功者的 LED灯标识为红色闪烁,并且显示各抢答输入的时间。选题的目的和意义通过这次设计,掌握STM32单片机的原理,了解简单多功能抢答器组成原理,初步掌握多功能抢答器的调整及测试方法,提高动手能力和排除故障的能力。同时通过本课题设计与仿真进行调试,提高自己的动手能力,巩固已学的理论知识,建立单片机理论和实践的结合,了解多功能抢答器各单元电路之间的关系及相互影响,从而能正确设计、应用各个单元电路。课题研究的内容本系统采用模块化设计智能抢答器,在抢答比赛中广泛应用,各组分别有一个抢答按钮。抢答开始后,抢答成功者的 LED灯标识为红色闪烁,并且显示各抢答输入的时间。在通过研究并在设计验证后发现,采用单片机技术设计的抢答器与目前常用的抢答器相比,首先,电路连接简单,因为大多数功能单元都通过程序设计在单片机内部,第二,工作性能可靠,抗干扰能力优于目前抢答器。所以本研究是一个实用的工程设计,具有创新性。国内外研究现状抢答器作为一种电子产品,早已广泛应用于各种智力和知识竞赛场合,但目前所使用的抢答器有的电路较复杂不便于制作,可靠性低,实现起来很困难;有的则用一些专用的集成块,而专用集成块的购买又很困难。为适应高校等多代表队单位活动的需要而设计一个多功能抢答器,这种抢答器具有电路简单,元件普通,易于购买等优点,很好地解决了制作者制作困难和难于购买的问题。在国内外已经开始了普遍的应用。抢答器目前存在的主要问题随着改革开放事业的不断深入,促使人们学科学、学技术、学知识的手段多种多样,抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。但抢答器的使用频率校低,且有的要么制作复杂,要么可靠性低,减少兴致。作为一个单位若专购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使〔电子器件的抢答器损坏,再购置的麻烦和及时性就会影响活动的开展。而且目前多数抢答器存在3个不足之处:第一,现场线路连接复杂。因为每个选手位于抢答现场的不同位置,每个选手与控制台之间要有长长的连接线。选手越多,连接线就越多、越乱,这些连接线不仅影响了现场的美观,而且降低了抢答器的可靠性,增加了安装的难度,甚至影响了现场人员的走动。第二,电路复杂。因为单片机只完成号码处理、计时、数据运算等功能,其它功能如选手号码的识别、译码、计分显示等仍只能通过数字集成电路完成。采用单片机扫描技术识别选手抢按号码时,电路的延迟时间较大。第三,选手抢按成功,但出现没有抢答被记录的问题。抢答器的系统概述2.1系统的主要功能本系统是借用单片机采用模块化设计的4路抢答器,包括4路抢答按纽、计时显示、抢答成功标识,各种相关显示调控功能等本系统采用模块化设计的四路抢答器,在抢答比赛中广泛应用,各组分别有一个抢答按钮。一共有4个按键输入,分别对应4路选手的抢答按键。单片机是整个抢答器的核心,内部电路设计用汇编语言编写。它完成了时间参数的设定,抢按号码的译码,保存;显示;输出,抢按及答题倒计时功能等。本设计中,有四个共阳的数码管,四个数码管。主持人按下复位键〔RESET后开始抢答。抢答成功者的LED灯标识为红色闪烁,并且显示各抢答输入的时间。2.2抢答器的工作流程抢答器的基本工作原理:在抢答后,按键产生的下降沿,被中断的LINE线捕捉,从而实现进入中断服务函数,进行LED闪烁,以及实现相应数码管的计时显示工作,进而标识识别出抢答成功者的标号,进行相应的回答。2.3STM32的功能及简介现阶段,市场上低端产品处理器以8位单片机为主,例如广为人知的C51系列,而高端则是以32位单片机为主,例如基于ARMCortex-M3内核的STM32系列,是专门为要求高性能、低功耗、低成本的嵌入式系统设计的芯片。本系统是使用STM32单片机,采用模块化设计的4路抢答器,包括4路抢答按纽、计时显示、各种相关显示调控功能等。采用STM32F103VET6的100管脚的单片机,连接四路按键,四路LED,以及要显示四个独立的数码管,故需要比较多的I/O口.使用外部中断包含16个的边沿检测器,用于产生中断,每个中断线都可以独立地配置它的触发事件<上升沿或下降沿或双边沿>,并能够单独地被屏蔽;有一个挂起寄存器维持所有中断请求的状态。EXTI可以检测到脉冲宽度小于内部APB2的时钟周期。多达112个通用I/O口连接到16个外部中断线,满足系统功能的需要。从性能、价格、实际需要,STM32F103VET6较之8位8051单片机等,更为符合设计要求。图2.4STM32单片机的内部结构图ARMCortex-M3处理器是新一代的32位处理器,是一个高性能、低成本的开发平台,适用于微控制器、工业控制系统以及无线网络传感器等应用场合。其特点为:性能丰富成本低。专门针对微控制处理器应用特点而开发的32位MCU,具有高性能、低成本、易应用等特点。低功耗。把睡眠模式与状态保留功能结合在一起,确保Cortex-M3处理器既可提供低能耗,又不影响很高的运行性能。可配置性强。Cortex-M3处理器的NVIC功能提高了设计的可配置性,提供了多达240个具有单独优先级、动态重设优先级功能和集成系统时钟的系统中断。丰富的链接。功能和性能兼顾的良好组合,使基于Cortex-M3的设备可以有效处理多个I/O通道和协议标准。STM32系列处理器先进的内部结构:1.哈佛结构。使其在处理器整数性能测试上有着出色的表现,可以达1.25DMIPS/MHz,而功耗仅为0.19mW/MHz。2.Thumb-2指令集以16位的代码密度带来了32位的性能。3.内置了快速的中断控制器,提供了优越的实时特性,中断的延迟时间降到只需6个CPU周期,从低功率模式唤醒的时间也只需6个CPU周期。4.单周期惩罚指令和硬件除法指令。STM32在嵌入式系统应用领域有着无可比拟的优势,本系统应用的STM32F103ZET6的增强型系列单片机的功能也十分强大。详细介绍如下:1.内核:〔位的Cortex™-M3CPU最高工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz;单周期乘法和硬件除法。2.存储器:从至512K字节的闪存程序存储器;高达64K字节的SRAM;带4个片选的静态存储器控制器、支持CF卡、SRAM、PSRAM、NOR和NAND存储器;并行LCD接口,兼容8080/6800模式。3.时钟、复位和电源管理:2.0~3.6V供电和I/O引脚;上电/断电复位〔POR/PDR、可编程点压监测器〔PVD;4~晶体振荡器;内嵌经出厂调校的的振荡器;内嵌带校准的的振荡器;带校准功能的32kHzRTC振荡器。4.低功耗:睡眠、停机和待机模式;VBAT为和后备寄存器供电。5.3个位模数转换器,1μs转换时间<多达个输入通道转换范围:0至3.6V;三倍采样和保持功能;温度传感器6.2通道12位D/A转换器7.DMA〔12通道DMA控制器:支持的外设:定时器、ADC、DAC、SDIO、I^2S、SPI、I^2C和USART。8.调试模式:串行单线调试〔SWD 和JTAG接口;Cortex-M3内嵌跟踪模块〔ETM。9.多达112个快速I/O端口:51/80/112个多功能双向I/O口,所有I/O口可以映像到16个外部中断;几乎所有端口均可容忍5V信号。10.多达11个定时器:多达4个16位定时器,内个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入;2个16位位带死区控制和急刹车,用于电机控制的PWM高级控制定时器;2个看门狗定时器〔独立和窗口型的;系统时间定时器;24位自减型计数器;2个16位基本定时器用于驱动DAC。11.多达13个通信接口:多达2个I^2C接口〔支持SM-Bus/PM-Bus;多达5个USART接口〔支持ISO7816,LIN,Ir-DA接口和调制解调控制;多达3个SPI接口〔18M位/秒,2个可复用为I^2S接口;CAN接口〔2.0B主动;USB2.0全速接口;SDIO接口。12.CRC计算单元,96位的芯片唯一代码13.ECOPACK®封装2.4抢答器的优点及组成在知识比赛中,特别是做抢答题目的时候,在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。如果在抢答中,靠视觉是很难判断出哪组先答题。利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。系统工作原理本系统采用STM32单片机作为核心。控制系统的四个模块分别为:存储模块、显示模块、计时模块、抢答开关模块。该抢答器系统通过四个个按键输入抢答信号;利用存储程序来完成软件的设计;利用四个4位七段共阳数码管来完成显示功能。工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理,输出控制信号,控制四个七段数码管和喇叭工作。在数码管上显示哪一组先答题,从而实现整个抢答过程。2.5本章小结本章主要讲述了抢答器的工作原理和本设计系统的工作流程。在说明工作原理的过程中,突出了电路的组成单元以及这些单元如何实现抢答功能;在说明系统的流程时,结合本设计的内容,指出了参数设置的方法和意义。抢答正常流程的实现,同时也说明了抢答器的优点和STM32的功能及简介。第3章系统的硬件设计与开发3.1系统硬件总体设计本章主要内容是系统的硬件电路的实现,即现场检测设备的硬件电路设计,四路按键作为输入信号传给STM32单片机,STM32作为主控制芯片,四盏LED作为输出,抢答成功者的LED灯红色闪烁,四个独立数码管,分别显示各自的抢答时间,电源模块采用的12V的开关电源,再通过稳压芯片转换为所需5V和3.3V电源输出。还需要USB转串口电路,JTAG调试电路,晶振、BOOT等外围电路。STM32单片机STM32单片机4位七段数码管显示LED显示=4路抢答按键输入复位电源晶振JTAG3.2STM32最小系统采用STM32F103VET6最小系统,100引脚,512闪存,32位CPU,最高72Mhz工作频率,完全可满足本系统设计的需要。3.3JTAG电路JTAG<JointTestActionGroup,即联合测试行动小组>是一种国际标准的测试协议,主要应用于芯片的内部测试,现在主流的DSP、FPGA芯片等都支持JTAG协议。标准的接口是4线制的,包括:TMS、TCK、TDI、TDO,分别代表模式选择、时钟设置、数据输入和数据输出。JTAG的基本原理是在器件内部定义一个TAP〔TestAccessPort,即测试访问口然后通过专门的调试工具对芯片内部的节点进行测试。图3.3STM32的JTAG调试接口电路3.4时钟频率电路的设计单片机必须在时钟的驱动下才能工作。在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。时钟电路如图5所示。图3.4外部振荡源电路一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用fosc表示。图中时钟频率为12MHz,即fosc=12MHz,则机器周期为1µs.3.5复位电路的设计单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图6所示:图3.5复位电路图6中由复位键以及电解电容C3、电阻R2构成按键及上电复位电路。由于单片机是高电平复位,所以当复位键按下的时候,单片机的9脚RESET管脚将处于高电平,此时单片机就处于复位状态。当上电后,由于电容的缓慢充电,单片机的9脚电压会逐步由高向低转化,经过一段时间后,单片机的9脚处于稳定的低电平状态,此时单片机上电就复位完毕,系统程序从0000H开始执行。值得注意的是,在设计当中使用到了硬件复位和软件复位这两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软件复位功能。软件复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。3.6数码管显示显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。在这里我们使用的是四个独立七段数码管显示,通常在显示上我们采用的方法一般包括两种:一种是静态显示,一种是动态显示。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。在本设计中根据实际情况采用的是动态显示方法。图3.6共阴极数码管图2.6中数码管采用的是4个七段共阳数码管,其中选手A数码管连接PB0-PB6口,选手B连接PB7-PB13,选手C连接PC7-PC13,选手D连接PC0-PC6口。3.7键盘电路的设计键盘是人与单片机打交道的主要设备。关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也会提供相应的键盘程序,在单片机应用中键盘用得最多的形式是独立键盘和矩阵键盘。它们都有各自的特点,其中独立键盘的硬件电路简单,而且在程序设计上也不复杂,一般都用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂很多,而且在程序算法上要比它烦琐,而且在触点抖动按键同与断过程中可能会出现判断错误。应该采用软件去抖方法,即延时重复扫描法,延时法的原理为:在检测到有按键被按下时,执行一个10ms左右〔具体时间应该视所使用的按键进行调整的延时程序,再确认该键电平是否仍保持闭合状态的电平,若仍保持闭合状态电平,则确认该键处于闭合状态;同理,在检测到该键释放后,也应该采用相同的步骤进行确认,从而消除去抖的影响。在本文设计中采用了独立键盘的方式,本设计中有4个抢答按键输入,如图3.7所示。图3.7抢答按键在图3.7中4个抢答按键分别接入单片机的PA0-PA3端口,单片机通过读写PA0-PA7的值来判断当前输入的是4个抢答按键中的哪一个,从而触发断,完成抢答成功者LED显示及抢答时间显示。3.8LED电路各类LED发展非常迅速,已经成为各种照明标识常用的显示元件,本系统采用IO口直接连接的LED驱动电路,如下图3.8。在图308中4盏LED灯分别接入单片机的PA4-PA7端口,单片机通过写0写1,进而控制LED的亮灭与否。3.9本章小结本章详细讲述了以STM32为核心元件的抢答器的硬件电路具体设计过程,分析了具体电路。在设计过程中,实现抢答功能的是通过编写程序的方法集成在STM32内部。接着将程序下载到硬件电路中,配合周边的时钟电路,复位电路等,制作出符合设计要求的抢答器。系统的软件设计与开发4.1系统总体设计本系统的软件设计采用模块化编程,由LED显示,按键输入,数码管,主函数构成,使用中断,在按键输入后,下降沿检测,进而进入中断函数,完成数码管,LED的显示。程序编译环境为KEILu-Vision5,主控制器采用ARMcortex-M3内核的STM32,调试工具为J-Link的JTAG仿真器,便于在线调试。4.2STM32开发调试环境介绍基于ARMcortex-M3内核的STM32微处理器得到越来越广泛的应用,所以开发工具也分为好多种,当下最流行的STM32的开发工具为KEILMDK和IAREWARM,两种工具各有千秋,作下简要介绍。KEILMDK作为一个套件,包含了全套的软件模块,其中就包括KEIL公司的IDE环境"KEILu-Vision",KEILu-Vision5是它的第五个版本。而本文所使用的RVMDK全称是REALVIEWMDK,是KEIL公司专门用于嵌入式开发所使用的软件,REALVIEWMDK集成了包括u-Vision5的开发环境与REALVIEW编译器.另外一种开发工具IAREWARM,全称IAREmbeddedWorkbenchforARM,是ISRSystem公司为ARM芯片开发的一个集成环境,IAREWARM中包含了一个全软件的模拟程序,使得用户甚至不需要任何硬件的支持就可以模拟各种ARM内核、中断甚至外部设备,使用方便且便于操作,尤其适用于内核的移植。调试工具J-Link是SEGGER公司为支持仿真内核芯片推出的一款JTAG仿真器,适用于KEIL、IAREWARM、REALVIEW等多种集成开发环境,特别适合开发基于ARM的嵌入式系统。4.3程序流程图在本设计中包括了以下主要的程序:主程序,LED,数码管,按键,中断服务函数,主流程图如4.3所示:图4.3程序设计流程图4.4主要程序分析4.4.1主程序分析#include"main.h"intmain<void>{LED_GPIO_Config<>; KEY_Config<>;DIGITRON_GPIO_Config<>; TimeCount<>; NVIC_Config<>; while<1> {}}程序分析:进入主函数后,进行LED配置,按键配置,数码管配置,显示函数,以及中断配置,随后进入while死循环,等待中断响应。4.4.2LED函数分析 #include"led.h"voidLED_GPIO_Config<void> { /*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDefGPIO_InitStructure; /*选择要控制的GPIOA引脚*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5| GPIO_Pin_6;/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; /*设置引脚速率为50MHz*/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; /*调用库函数,初始化GPIOA*/GPIO_Init<GPIOA,&GPIO_InitStructure>;/*关闭所有led灯*/ GPIO_SetBits<GPIOA,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5| GPIO_Pin_6>; }程序分析:进入LED_GPIO_Config后,完成LED相关引脚配置。4.4.3按键配置函数#include"key.h"voidKEY_Config<void>{ //GPIO配置 EXTI_InitTypeDefEXTI_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd<RCC_APB2Periph_GPIOA| RCC_APB2Periph_AFIO,ENABLE>; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2| GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init<GPIOA,&GPIO_InitStructure>; //EXTI配置 GPIO_EXTILineConfig<GPIO_PortSourceGPIOA,GPIO_PinSource0|\ GPIO_PinSource1|GPIO_PinSource2|GPIO_PinSource3>;//中断源 EXTI_InitStructure.EXTI_Line=EXTI_Line0|EXTI_Line1|EXTI_Line2|EXTI_Line3;//中断线路 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //外部触发 EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿 EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init<&EXTI_InitStructure>; }程序分析:完成KEY相关引脚配置,并设置相应的中断线,中断模式,触发方式,使能EXTI的配置。4.4.4NVIC配置#include"nvic.h"voidNVIC_Config<void>{ //ÉùÃ÷NVIC½á¹¹Ìå NVIC_InitTypeDefNVIC_InitStructure; //设置中断0 NVIC_PriorityGroupConfig<NVIC_PriorityGroup_1>; NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=3; //设置中断1 NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=3; //设置中断2 NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=3; //设置中断3 NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=3; NVIC_Init<&NVIC_InitStructure>;}程序分析:在NVIC中,分别完成相应的中断1,2,3,4中断分组,抢占优先级,响应优先级的配置,由于是均等条件的抢答,故抢占及响应优先级均为同一等级。4.4.5DIGITRON函数#include"digitron.h"u8table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//共阳极 0-9intFlagA=1,FlagB=1,FlagC=1,FlagD=1;u16TIME=500;voiddelayms<u16time>;//延时1msvoidTimeCount<void>; //计时voidDIGITRON_GPIO_Config<void> { /*定义一个GPIO_InitTypeDef类型的结构体*/ GPIO_InitTypeDefGPIO_InitStructure;/*开启GPIOA的外设时钟*/ RCC_APB2PeriphClockCmd<RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE>; /*选择要控制的GPIOB引脚*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;/*设置引脚模式为通用推挽输出*/ GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; /*设置引脚速率为50MHz*/ GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/*调用库函数,初始化GPIOA*/ GPIO_Init<GPIOB,&GPIO_InitStructure>;}voidTimeCount<>{ u8i=0,j=0,m=0,n=0; //选手A for<;i<10;i++> { GPIO_ResetBits<GPIOB,GPIO_Pin_All>; switch<i> { case0:GPIO_SetBits<GPIOB,GPIO_Pin_0|GPIO_Pin_1|\ GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4| GPIO_Pin_5>;delayms<TIME>; break; // 0 case1:GPIO_SetBits<GPIOB,GPIO_Pin_1|GPIO_Pin_2>;delayms<TIME>; break; // 1 case2:GPIO_SetBits<GPIOB,GPIO_Pin_0|GPIO_Pin_1|\ GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6>;delayms<TIME>; break; // 2 case3:GPIO_SetBits<GPIOB,GPIO_Pin_0|GPIO_Pin_1|\ GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_6>;delayms<TIME>; break; // 3 case4:GPIO_SetBits<GPIOB,GPIO_Pin_1|GPIO_Pin_2|\ GPIO_Pin_5|GPIO_Pin_6>;delayms<TIME>; break; // 4 case5:GPIO_SetBits<GPIOB,GPIO_Pin_0|GPIO_Pin_2|\ GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6>;delayms<TIME>; break; // 5 case6:GPIO_SetBits<GPIOB,GPIO_Pin_0|GPIO_Pin_2|\ GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5| GPIO_Pin_6>;delayms<TIME>; break; // 6 case7:GPIO_SetBits<GPIOB,GPIO_Pin_0|GPIO_Pin_1|\ GPIO_Pin_2>;delayms<TIME>; break; // 7 case8:GPIO_SetBits<GPIOB,GPIO_Pin_0|GPIO_Pin_1|\ GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5\ |GPIO_Pin_6>;delayms<TIME>; break; // 8 case9:GPIO_SetBits<GPIOB,GPIO_Pin_0|GPIO_Pin_1|\ GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5| GPIO_Pin_6>;delayms<TIME>; break; // 9 } if<FlagA==1> { break; } }voiddelayms<u16time>//延时1ms{ u16i=0; while<time--> { i=12000; while<i-->; }}程序分析:在数码管函数中,采用switch-case语句进行数码管从0-9的显示,每个数字显示500ms,在响应中断后,跳出for循环,从而实现抢答时间的显示。4.4.6中断服务函数voidEXTI0_IRQHandler<void>{if<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论