国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
STM32中斷方式的按鍵控制程序Proteus仿真 8按鍵整理
[打印本頁]
作者:
山海致遠
時間:
2020-5-24 17:02
標題:
STM32中斷方式的按鍵控制程序Proteus仿真 8按鍵整理
仿真文件和完整程序源碼:
中斷方式的按鍵控制 8按鍵整理.zip
(346.45 KB, 售價: 1 E幣)
2023-5-31 22:36 上傳
點擊文件名下載附件
售價: 1 E幣
[記錄]
[
購買
]
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
105658hafu9awh5f5xae3r.png
(182.32 KB)
下載附件
2020-5-24 16:44 上傳
部分代碼
#include "stm32f10x_exti.h"
#include "key.h"
#include "Delay.h"
void exit_config(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource8); //EXTI8EXTI_Line8中斷線與PB8映射,設置PB8為中斷源EXTI_Line8
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9); //設置PB9為中斷源EXTI_Line9
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource10); //設置PB10為中斷源EXTI_Line10
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource11); //設置PB11為中斷源EXTI_Line11
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12); //EXTI12EXTI_Line12中斷線2與PB12映射,設置PB12為中斷源EXTI_Line12
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource13); //設置PB13為中斷源EXTI_Line13
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14); //設置PB14為中斷源EXTI_Line14
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource15); //設置PB15為中斷源EXTI_Line15
EXTI_InitStructure.EXTI_Line=0XFF00;//EXTI_Line8|EXTI_Line9|EXTI_Line10|EXTI_Line11|EXTI_Line12|EXTI_Line13|EXTI_Line14|EXTI_Line15; //將中斷映射到中斷線EXTI_Line12~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寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按鍵所在的外部中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; //搶占優先級0位
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f; //響應優先級4位,優先級15,為最低優先級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
NVIC_Init(&NVIC_InitStructure); //中斷優先級分組初始化
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按鍵所在的外部中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; //搶占優先級0位
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f; //響應優先級4位,優先級15,為最低優先級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
NVIC_Init(&NVIC_InitStructure); //中斷優先級分組初始化
}
void EXTI9_5_IRQHandler(void)
{static u8 k1=0,k2=0; //LED亮和滅狀態,為0是熄滅狀態,為1是點亮狀態
Delay(20);
if(KEY1==0) //讀取K3按鍵狀態,判斷K1按鍵是否按下
{
if(k1==0)
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
else
GPIO_SetBits(GPIOC,GPIO_Pin_8);
k1=!k1;
}
else if(KEY2==0) //讀取K4按鍵狀態,判斷K4按鍵是否按下
{
if(k2==0)
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
else
GPIO_SetBits(GPIOC,GPIO_Pin_9);
k2=!k2;
}
//while(KEY1!=1||KEY2!=1);//仿真可以取消
//EXTI_ClearITPendingBit(EXTI_Line8);
//EXTI_ClearITPendingBit(EXTI_Line9);
}
void EXTI15_10_IRQHandler(void)
{
static u8 k3=0,k4=0,k5=0,k6=0,k7=0,k8=0; //LED亮和滅狀態,為0是熄滅狀態,為1是點亮狀態
Delay(20);
if(KEY3==0) //讀取K3按鍵狀態,判斷K1按鍵是否按下
{
if(k3==0)
GPIO_ResetBits(GPIOC,GPIO_Pin_10);
else
GPIO_SetBits(GPIOC,GPIO_Pin_10);
k3=!k3;
}
else if(KEY4==0) //讀取K4按鍵狀態,判斷K4按鍵是否按下
{
if(k4==0)
GPIO_ResetBits(GPIOC,GPIO_Pin_11);
else
GPIO_SetBits(GPIOC,GPIO_Pin_11);
k4=!k4;
}
else if(KEY5==0) //讀取K5按鍵狀態,判斷K5按鍵是否按下
{
if(k5==0)
GPIO_ResetBits(GPIOC,GPIO_Pin_12);
else
GPIO_SetBits(GPIOC,GPIO_Pin_12);
k5=!k5;
}
else if(KEY6==0) //讀取K6按鍵狀態,判斷K6按鍵是否按下
{
if(k6==0)
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
else
GPIO_SetBits(GPIOC,GPIO_Pin_13);
k6=!k6;
}
else if(KEY7==0) //讀取K7按鍵狀態,判斷K7按鍵是否按下
{
if(k7==0)
GPIO_ResetBits(GPIOC,GPIO_Pin_14);
else
GPIO_SetBits(GPIOC,GPIO_Pin_14);
k7=!k7;
}
else if(KEY8==0) //讀取K7按鍵狀態,判斷K7按鍵是否按下
{
if(k8==0)
GPIO_ResetBits(GPIOC,GPIO_Pin_15);
else
GPIO_SetBits(GPIOC,GPIO_Pin_15);
k8=!k8;
}
//while(KEY3!=1||KEY4!=1||KEY5!=1||KEY6!=1||KEY7!=1||KEY8!=1);//仿真可以取消
//EXTI_ClearITPendingBit(EXTI_Line10);
//EXTI_ClearITPendingBit(EXTI_Line11);
//EXTI_ClearITPendingBit(EXTI_Line12);
//EXTI_ClearITPendingBit(EXTI_Line13);
//EXTI_ClearITPendingBit(EXTI_Line14);
//EXTI_ClearITPendingBit(EXTI_Line15);
}
復制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0