您的位置:首页 > 其它

[置顶] ARM开发(6) 基于STM32的矩阵键盘按键触发外部中断引起蜂鸣器鸣叫

2017-07-28 15:00 597 查看
基于STM32的矩阵键盘按键触发外部中断引起蜂鸣器鸣叫


一 矩阵键盘按键触发外部中断引起蜂鸣器鸣叫原理:

1.1 本实验实现矩阵键盘某一列按键触发外部中断实现蜂鸣器鸣叫。

1.2 实验思路:根据电路图原理,外部中断产生原理。

1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真


二 实验步骤:

2.1 led.h代码:

#ifndef  __EXTI_H
#define __EXTI_H
#include "sys.h"
void EXTIX_Init(void);//外部中断初始化
#endif


2.2 led.c代码(IO配置):

#include "exti.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
#include  "beep.h"
void EXTIX_Init(void)
{

EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
KEY_Init(); //按键端口初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  //开启AFIO时钟
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource11);//中断线映射
EXTI_InitStructure.EXTI_Line=EXTI_Line11;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);  //初始化中断线参数

NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;    //使能按键外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;   //字优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);     //初始化NCIC

}
void EXTI15_10_IRQHandler(void)  //外部中断服务程序
{

delay_ms(10);
if(EXTI_GetITStatus(EXTI_Line11) != RESET)
{
BEEP=!BEEP;
}
EXTI_ClearITPendingBit(EXTI_Line11); //  消除line10上的中断标志位
}


2.2 main.c代码(实现7*8矩阵键盘第5列按键触发):

#include "exti.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
#include "beep.h"
int main(void)
{

delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
uart_init(115200);
BEEP_Init();
KEY_Init();
EXTIX_Init();
while(1)
{
printf("OK\r\n");
delay_ms(1000);
}
}


三 接线测试:

3.1 与板子接线测试效果良好,键盘上第5列按键触发中断产生导致蜂鸣器鸣叫。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: