1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| #include "stm32f10x.h" #include "key.h" #include "led.h" #include "delay.h"
uint16_t table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; extern int num;
void Key_Init() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource4); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource5); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource6); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource7); EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line = EXTI_Line4|EXTI_Line5|EXTI_Line6|EXTI_Line7; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_Init(&NVIC_InitStructure); }
void EXTI4_IRQHandler() { GPIO_Write(GPIOB,~(0x20>>0)); EXTI_ClearITPendingBit(EXTI_Line0); }
void EXTI9_5_IRQHandler() { if(EXTI_GetFlagStatus(EXTI_Line5)) { GPIO_Write(GPIOB,~(0x20>>1)); EXTI_ClearITPendingBit(EXTI_Line5); } if(EXTI_GetFlagStatus(EXTI_Line6)) { GPIO_Write(GPIOB,~(0x20>>2)); EXTI_ClearITPendingBit(EXTI_Line6); } if(EXTI_GetFlagStatus(EXTI_Line7)) { num ++; GPIO_Write(GPIOC,table[num%10]); EXTI_ClearITPendingBit(EXTI_Line7); } }
|