#include"stm32f10x.h"
typedef enum {LedR,LedG,LedB,Led1,Led2}Light;
Light light=LedR;
int main(void)
{
GPIO_InitTypeDef InitLedR;
GPIO_InitTypeDef InitLedG;
GPIO_InitTypeDef InitLedB;
GPIO_InitTypeDef InitLed1;
GPIO_InitTypeDef InitLed2;
GPIO_InitTypeDef InitKey1;
GPIO_InitTypeDef InitKey2;
NVIC_InitTypeDef InitKey1NVIC;
NVIC_InitTypeDef InitKey2NVIC;
EXTI_InitTypeDef InitKey1EXTI;
EXTI_InitTypeDef InitKey2EXTI;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
InitKey1NVIC.NVIC_IRQChannel=EXTI0_IRQn;
InitKey1NVIC.NVIC_IRQChannelPreemptionPriority=0;
InitKey1NVIC.NVIC_IRQChannelSubPriority=0;
InitKey1NVIC.NVIC_IRQChannelCmd=ENABLE;
InitKey2NVIC.NVIC_IRQChannel=EXTI15_10_IRQn;
InitKey2NVIC.NVIC_IRQChannelPreemptionPriority=0;
InitKey2NVIC.NVIC_IRQChannelSubPriority=0;
InitKey2NVIC.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&InitKey1NVIC);
NVIC_Init(&InitKey2NVIC);
InitLedR.GPIO_Mode=GPIO_Mode_Out_PP;
InitLedR.GPIO_Speed=GPIO_Speed_50MHz;
InitLedR.GPIO_Pin=GPIO_Pin_5;
InitLedG.GPIO_Mode=GPIO_Mode_Out_PP;
InitLedG.GPIO_Speed=GPIO_Speed_50MHz;
InitLedG.GPIO_Pin=GPIO_Pin_0;
InitLedB.GPIO_Mode=GPIO_Mode_Out_PP;
InitLedB.GPIO_Speed=GPIO_Speed_50MHz;
InitLedB.GPIO_Pin=GPIO_Pin_1;
InitLed1.GPIO_Mode=GPIO_Mode_Out_PP;
InitLed1.GPIO_Speed=GPIO_Speed_50MHz;
InitLed1.GPIO_Pin=GPIO_Pin_7;
InitLed2.GPIO_Mode=GPIO_Mode_Out_PP;
InitLed2.GPIO_Speed=GPIO_Speed_50MHz;
InitLed2.GPIO_Pin=GPIO_Pin_8;
InitKey1.GPIO_Mode=GPIO_Mode_IN_FLOATING;
InitKey1.GPIO_Pin=GPIO_Pin_0;
InitKey2.GPIO_Mode=GPIO_Mode_IN_FLOATING;
InitKey2.GPIO_Pin=GPIO_Pin_13;
GPIO_Init(GPIOB,&InitLedR);
GPIO_Init(GPIOB,&InitLedG);
GPIO_Init(GPIOB,&InitLedB);
GPIO_Init(GPIOF,&InitLed1);
GPIO_Init(GPIOF,&InitLed2);
GPIO_Init(GPIOA,&InitKey1);
GPIO_Init(GPIOC,&InitKey2);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
InitKey1EXTI.EXTI_Line=EXTI_Line0;
InitKey1EXTI.EXTI_Mode=EXTI_Mode_Interrupt;
InitKey1EXTI.EXTI_Trigger=EXTI_Trigger_Rising;
InitKey1EXTI.EXTI_LineCmd =ENABLE;
InitKey2EXTI.EXTI_Line=EXTI_Line13;
InitKey2EXTI.EXTI_Mode=EXTI_Mode_Interrupt;
InitKey2EXTI.EXTI_Trigger=EXTI_Trigger_Rising;
InitKey2EXTI.EXTI_LineCmd =ENABLE;
EXTI_Init(&InitKey1EXTI);
EXTI_Init(&InitKey2EXTI);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
GPIO_SetBits(GPIOB,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_7);
GPIO_SetBits(GPIOF,GPIO_Pin_8);
while(1)
{
if(light==LedR)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
}
else if(light==LedG)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_RESET);
GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
}
else if(light==LedB)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_RESET);
GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
}
else if(light==Led1)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_RESET);
GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
}
else if(light==Led2)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_RESET);
}
}
}
void EXTI0_IRQHandler()
{
if( EXTI_GetITStatus(EXTI_Line0)==SET)
{
if(light==Led2)
light=LedR;
else if(light<Led2)
light++;
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
void EXTI15_10_IRQHandler()
{
if( EXTI_GetITStatus(EXTI_Line13)==SET)
{
if(light==LedR)
light=Led2;
else if(light>LedR)
light--;
EXTI_ClearITPendingBit(EXTI_Line13);
}
} |
|