外部按键中断延时控制LED设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;