外部按键中断延时控制LED设计

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

成绩

实训报告

题目:外部按键中断延时控制LED设计课程名称: ARM嵌入式系统实训

学生姓名:徐欣郑亮亮杨康宁

任课教师:权循忠

系别: 电子工程学院

专业:通信工程

年级: 13级

实训时间: 2015年11月13日

电子工程学院

外部按键中断延时控制LED设计

学生:徐欣郑亮亮杨康宁

指导老师:权循忠

电子工程学院通信工程专业

实训目的

1.掌握STM32项目开发流程;

2.学会画出算法流程图;

3.掌握LED的控制编程。

二、实训内容

(1)LED0亮2秒,LED0灭2秒;循环(1)的操作5次;

(2)LED1亮3秒,LED1灭3秒;循环(2)的操作5次;

(3)然后到(1)循环。

三、实训过程

1.人员分配:

徐欣负责程序部分,利用c语言设计算法,建立工程项目,生成目标文件,并将目标文件编程下载到开发板,验证算法;郑亮亮负责绘制电路图,进行电路设计及分析;杨康宁负责程序流程框图以及完成实验报告。

2.电路设计:

(1)要求使用LED0和LED1两个LED,连接图如下:

图1、LED原理图

(2)所用到的硬件只有LED(DS0和DS1)。LED与MCU连接,实现定时控制LED闪烁,其原理图如下:

图2、LED与STM32连接原理图

3.电路分析:

因为用Proteus绘图软件来绘制原理图,Proteus中没有MCU芯片,通过手绘将这些芯片和引脚绘出来,不能进行仿真。

LED0(DS0)与PB5相连;LED1(DS1)与PE5相连。

4.算法设计

算法解释:

通过if 选择语句实现按键选择功能,

按下KEY0时,实现函数

LED0=0; delay_ms(1500); delay_ms(1500);

按下KEY1时,实现函数

LED0=0;

delay_ms(1500); delay_ms(1500);

按下WK_UP 时,实现函数

LED0=0; LED1=0;

delay_ms(1500); delay_ms(1500); delay_ms(1500); delay_ms(500);

延时3S

LED0,1灭

LED0灭

LED0灭

延时5S

延时3S

KEY0按下? KEY2按下?

KEY1按下? LED0,1亮

LED0亮

LED0亮

开始

初始化I/O 为输入,开启I/O 复用时钟,设置I/O 与中断线的映射关系,初始化线上中断,设置触发条件等,配置中断分组(NVIC ),并使能中断编

写中断服务函数

检测按键

LED0=1;

LED1=1;

5.部分源代码

#include "exti.h"

#include "led.h"

#include "key.h"

#include "delay.h"

#include "usart.h"

void EXTIX_Init(void)

{

EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

KEY_Init();

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);

EXTI_InitStructure.EXTI_Line=EXTI_Line5;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15);

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);

GPIO_EXTILineConfig(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);

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;

相关文档
最新文档