|
希望可以對(duì)你有用
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei圖片_20200429105644.png (252.73 KB, 下載次數(shù): 71)
下載附件
2020-4-29 10:56 上傳
單片機(jī)源程序如下:
- #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映射,設(shè)置PB8為中斷源EXTI_Line8
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9); //設(shè)置PB9為中斷源EXTI_Line9
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource10); //設(shè)置PB10為中斷源EXTI_Line10
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource11); //設(shè)置PB11為中斷源EXTI_Line11
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12); //EXTI12EXTI_Line12中斷線2與PB12映射,設(shè)置PB12為中斷源EXTI_Line12
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource13); //設(shè)置PB13為中斷源EXTI_Line13
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14); //設(shè)置PB14為中斷源EXTI_Line14
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource15); //設(shè)置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; //設(shè)置為中斷模式
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //設(shè)置為下降沿觸發(fā)中斷
- EXTI_InitStructure.EXTI_LineCmd = ENABLE; //中斷使能,既開中斷
- EXTI_Init(&EXTI_InitStructure); //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按鍵所在的外部中斷通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; //搶占優(yōu)先級(jí)0位
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f; //響應(yīng)優(yōu)先級(jí)4位,優(yōu)先級(jí)15,為最低優(yōu)先級(jí)
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
- NVIC_Init(&NVIC_InitStructure); //中斷優(yōu)先級(jí)分組初始化
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按鍵所在的外部中斷通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; //搶占優(yōu)先級(jí)0位
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f; //響應(yīng)優(yōu)先級(jí)4位,優(yōu)先級(jí)15,為最低優(yōu)先級(jí)
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
- NVIC_Init(&NVIC_InitStructure); //中斷優(yōu)先級(jí)分組初始化
- }
- void EXTI9_5_IRQHandler(void)
- {static u8 k1=0,k2=0; //LED亮和滅狀態(tài),為0是熄滅狀態(tài),為1是點(diǎn)亮狀態(tài)
- Delay(20);
- if(KEY1==0) //讀取K3按鍵狀態(tài),判斷K1按鍵是否按下
- {
- if(k1==0)
- GPIO_ResetBits(GPIOC,GPIO_Pin_8);
- else
- GPIO_SetBits(GPIOC,GPIO_Pin_8);
- k1=!k1;
- }
- else if(KEY2==0) //讀取K4按鍵狀態(tài),判斷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亮和滅狀態(tài),為0是熄滅狀態(tài),為1是點(diǎn)亮狀態(tài)
- Delay(20);
- if(KEY3==0) //讀取K3按鍵狀態(tài),判斷K1按鍵是否按下
- {
- if(k3==0)
- GPIO_ResetBits(GPIOC,GPIO_Pin_10);
- else
- GPIO_SetBits(GPIOC,GPIO_Pin_10);
- k3=!k3;
- }
- else if(KEY4==0) //讀取K4按鍵狀態(tài),判斷K4按鍵是否按下
- {
- if(k4==0)
- GPIO_ResetBits(GPIOC,GPIO_Pin_11);
- else
- GPIO_SetBits(GPIOC,GPIO_Pin_11);
- k4=!k4;
- }
- else if(KEY5==0) //讀取K5按鍵狀態(tài),判斷K5按鍵是否按下
- {
- if(k5==0)
- GPIO_ResetBits(GPIOC,GPIO_Pin_12);
- else
- GPIO_SetBits(GPIOC,GPIO_Pin_12);
- k5=!k5;
- }
- else if(KEY6==0) //讀取K6按鍵狀態(tài),判斷K6按鍵是否按下
- {
- if(k6==0)
- GPIO_ResetBits(GPIOC,GPIO_Pin_13);
- else
- GPIO_SetBits(GPIOC,GPIO_Pin_13);
- k6=!k6;
- }
- else if(KEY7==0) //讀取K7按鍵狀態(tài),判斷K7按鍵是否按下
- {
- if(k7==0)
- GPIO_ResetBits(GPIOC,GPIO_Pin_14);
- else
- GPIO_SetBits(GPIOC,GPIO_Pin_14);
- k7=!k7;
- }
- else if(KEY8==0) //讀取K7按鍵狀態(tài),判斷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);
- }
復(fù)制代碼
所有資料51hei提供下載:
中斷方式的按鍵控制 8按鍵整理.7z
(223.04 KB, 下載次數(shù): 67)
2020-4-29 18:02 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|