#include "stm32f10x.h"   
#include "stm32_eval.h"   
GPIO_InitTypeDef GPIO_InitStructure;   
  
void RCC_Configuration(void)   
{   
  RCC_DeInit();    
  RCC_HSICmd(ENABLE);   
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);    
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);   
     
  RCC_HSEConfig(RCC_HSE_OFF);   
  RCC_LSEConfig(RCC_LSE_OFF);   
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz   
  RCC_PLLCmd(ENABLE);   
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);   
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);   
  RCC_PCLK2Config(RCC_HCLK_Div1);   
  RCC_PCLK1Config(RCC_HCLK_Div2);   
  RCC_HCLKConfig(RCC_SYSCLK_Div1);   
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);   
  while(RCC_GetSYSCLKSource() != 0x08);   
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);   
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  GPIO_Init(GPIOD, &GPIO_InitStructure);   
  GPIO_ResetBits(GPIOD,GPIO_Pin_2);   
}   
  
void GPIO_INIT()   
{   
   //GPIOB(数码管)初始化   
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  GPIO_Init(GPIOB, &GPIO_InitStructure);   
       
  //按键初始化   
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   
  GPIO_Init(GPIOC, &GPIO_InitStructure);   
}   
//微秒延时   
void delay_us(u32 n)   
{   
    u8 j;   
    while(n--)   
    for(j=0;j<10;j++);   
}   
//毫秒延时   
void  delay_ms(u32 n)   
{   
    while(n--)   
    delay_us(1000);   
}   
  
  
/**  
  * @brief  Main program.  
  * @param  None  
  * @retval None  
  */  
  
int main(void)   
{      
    int i,j,k;   
    RCC_Configuration();      
    GPIO_INIT();   
    GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);//关闭数码管   
      while(1){   
            if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10))//S3键按下   
           {delay_ms(80);   
           if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)){i++;}}//延时后S3处于按下状态,i++          
        if(i%2==0){ //如果i是奇数   
             if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))//S1键按下   
           {delay_ms(80);   
           if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)){j++;}}//延时后S1处于按下状态,j++          
        if(j>15){j=0;}   
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);   
        switch(j){   
         case 0 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8);   
         break;   
         case 1 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
         break;   
            case 2 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5);   
            break;   
            case 3 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5);   
            break;   
            case 4 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5);   
            break;   
            case 5 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5);   
            break;   
            case 6 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8|GPIO_Pin_5);   
            break;   
            case 7 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 8 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);   
            break;   
            case 9 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);   
            break;   
            case 10 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 11 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 12 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 13 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 14 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5);   
                  delay_ms(1);   
                 GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                 GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5);   
                 GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                 GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                 delay_ms(1);   
                 GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                 GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 15 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
        }   
    }   
  
      if(i%2==1){//如果i是偶数   
             if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9))//S2键按下   
           {delay_ms(80);   
           if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)){k++;}}//延时后S2处于按下状态,j++          
        if(k>15){k=0;}   
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);   
        switch(k){   
         case 0 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8);   
         break;   
         case 1 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
         break;   
            case 2 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5);   
            break;   
            case 3 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5);   
            break;   
            case 4 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5);   
            break;   
            case 5 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5);   
            break;   
            case 6 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8|GPIO_Pin_5);   
            break;   
            case 7 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 8 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);   
            break;   
            case 9 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
             GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);   
            break;   
            case 10 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 11 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 12 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 13 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 14 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
            case 15 :    
             GPIO_SetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_1);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
                  delay_ms(1);   
                  GPIO_ResetBits(GPIOB,GPIO_Pin_15);   
                  GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);   
            break;   
        }   
        }   
    }   
}