外部按键中断延时控制LED设计1_第1页
外部按键中断延时控制LED设计1_第2页
外部按键中断延时控制LED设计1_第3页
外部按键中断延时控制LED设计1_第4页
外部按键中断延时控制LED设计1_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、成绩实训报告 题 目: 外部按键中断延时控制LED设计 课程名称: ARM嵌入式系统实训 学生姓名: 孙丹丹 段思韦 夏慧 系 别: 电子工程学院 专 业: 通信工程 年 级: 13级通信(2)班 任课教师: 权循忠 实训时间: 2015年11月13日 电子工程学院2015年11月实训三、外部按键中断延时控制LED设计学生:孙丹丹 段思韦 夏慧指导教师:权循忠电子工程学院:通信工程专业一、 实训目的:1. 掌握STM32项目开发流程;2. 学会画出算法流程图;3. 掌握外部按键中断、LED的控制编程。二、 实训内容:完成下列任务的项目(1) 按键KEY0,在中断程序中控制LED0亮、3秒后熄灭

2、;(2) 按键KEY1,在中断程序中也控制LED0亮、然后3秒后熄灭;(3) 按键KEY2,在中断程序中控制LED0和LED1同时亮5秒,然后熄灭。三、 实训过程: 1.人员分工:孙丹丹:主要负责实验报告模板的制作、流程图的绘画、实验总结的编写;段思韦:主要负责算法的设计、程序的编写与实现、实验报告的汇总;夏 慧:主要负责硬件图的设计与绘画、硬件图的解析。 2.实训硬件连接电路原理图1KEY0,KEY1用作普通按键输入,分别连接在PC5和PC15上,WK_UP按键连接到PA0,它除了可以用作普通输入按键外,还可以用作STM32的唤醒输入。这个按键是高电平触发的。KEY0,KEY1连接好后接地,

3、WK_UP接VCC.LED0和LED1分别连接在PA8和PD2上,并通过电阻连接,它们都是通过电阻并联后接在一起,最后接VCC和地。3.算法设计3.1流程图初始化外部中断函数后,再编写中断服务函数,利用中断来检测按键。如果中断请求来自中断线0,即WA_UP键按下,LED0与LED1同时亮,延迟五秒后熄灭。如果中断请求来自中断线59或者1015,即KEY0或者KEY1被按下,LED0亮,延迟三秒后熄灭。变量t定义t=检测按键硬件初始化System Init();delay_init();LED_Init();NVIC_Configuration();uart_init(9600);BEEP_In

4、it();KEY_Init();EXTIX_Init();YYYYNNNLED0和LED1亮延时五秒LED0和LED1灭LED0亮延时三秒LED0灭LED0亮延时三秒LED0灭按下WA_UP?按下KEY1?按下KEY0?t!=0while(1)3.2 exti.c文件源代码#include "exti.h"#include "led.h"#include "key.h"#include "delay.h"#include "usart.h"/外部中断初始化函数void EXTIX_Init(vo

5、id) EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/外部中断,需要使能AFIO时钟 KEY_Init();/初始化按键对应io模式 /GPIOC.5 中断线以及中断初始化配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5); EXTI_InitStructure.EXTI_Line=EXTI_Line5; EXTI_Ini

6、tStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;/下降沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 /GPIOA.15 中断线以及中断初始化配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1

7、5); EXTI_InitStructure.EXTI_Line=EXTI_Line15; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 /GPIOA.0 中断线以及中断初始化配置 GPIO_EXTI

8、LineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); EXTI_InitStructure.EXTI_Line=EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);/根据EXTI_InitStruct中指定的参数初

9、始化外设EXTI寄存器 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;/使能按键所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;/抢占优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;/子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/使能外部中断通道 NVIC_Init(&NVIC_InitStructure); /根据N

10、VIC_InitStruct中指定的参数初始化外设NVIC寄存器NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;/使能按键所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;/抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;/子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/使能外部中断通道 NVIC_Init(&NV

11、IC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;/使能按键所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;/抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;/子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/使能外部中断通道 NVIC_Init(&NVIC_InitStru

12、cture); void EXTI0_IRQHandler(void) delay_ms(10); /消抖if(WK_UP=1) LED0=0;LED1=0;delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);LED0=1;LED1=1;EXTI_ClearITPendingBit(EXTI_Line0); /清除EXTI0线路挂起位 void EXTI9_5_IRQHandler(void)delay_ms(10); /消抖 if(KEY0=1)LED0=0;delay_ms(1000);del

13、ay_ms(1000);delay_ms(1000);LED0=1; EXTI_ClearITPendingBit(EXTI_Line5); /清除LINE5上的中断标志位 void EXTI15_10_IRQHandler(void) delay_ms(10); /消抖 if(KEY1=1)LED0=0;delay_ms(1000);delay_ms(1000);delay_ms(1000);LED0=1; EXTI_ClearITPendingBit(EXTI_Line15); /清除LINE15线路挂起位 3.3 算法解释 先初始化I/O口为输入,开启I/O口复用时针,设置I/O口与中断线的映射关系,初始化线上中断,设置触发条件,配置中断分组(NVIC),并使能中断。再编写中断服务函数:如果中断请求来自中断线0,即WA_UP键按下,LED0与LED1同时亮,延迟五秒后熄灭。如果中断请求来自中断线59或者1015,即KEY0或者KEY1被按下,LED0亮,延迟三秒后熄灭。四、 实训结果 LED0亮 两灯一起亮五、 实训总结每一次实训有每一次不一样的感受,随着实训的不断进行,内容也逐渐加深,开始接触新的内容,课堂上的编程、调试、检验,步骤还是和之前的一样。只是

温馨提示

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

评论

0/150

提交评论