一 矩阵键盘按键触发外部中断引起蜂鸣器鸣叫原理:
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("OKrn");
delay_ms(1000);
}
}
三 接线测试:
3.1 与板子接线测试效果良好,键盘上第5列按键触发中断产生导致蜂鸣器鸣叫
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』