


#include "stm32f4xx.h"
#include <stdlib.h>
//==========================================================
int msCounter = 0;
int a,num;
u16 iRand=0;
void SysTick_Handler(void)//--- systickÖжϺ¯Êý ---
{
msCounter++;
}
//==========================================================
void DelaymS(int t)
{
int ta,tb;
ta = tb = msCounter;
while((tb - ta) < t){tb = msCounter;}
}
unsigned char const LEDTAB[] =
{
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
};
static unsigned char LEDSEG[]=
{
0x7e,
0x0c,
0xb6,
0x9e,
0xcc,
0xda,
0xfa,
0x0e,
0xfe,
0xde,
};
void Gpio_Init(void)
{
GPIO_InitTypeDef MyGPIO;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
MyGPIO.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
MyGPIO.GPIO_Speed = GPIO_Speed_2MHz;
MyGPIO.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOA,&MyGPIO);
MyGPIO.GPIO_Pin = GPIO_Pin_10;
MyGPIO.GPIO_Speed = GPIO_Speed_2MHz;
MyGPIO.GPIO_PuPd = GPIO_PuPd_UP ;
MyGPIO.GPIO_Mode = GPIO_Mode_IN;
GPIO_Init(GPIOA,&MyGPIO);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
MyGPIO.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
MyGPIO.GPIO_Speed = GPIO_Speed_2MHz;
MyGPIO.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOB,&MyGPIO);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
MyGPIO.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |GPIO_Pin_4 |
GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8;
MyGPIO.GPIO_Speed = GPIO_Speed_2MHz;
MyGPIO.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOD,&MyGPIO);
MyGPIO.GPIO_Pin = GPIO_Pin_12;
MyGPIO.GPIO_Speed = GPIO_Speed_2MHz;
MyGPIO.GPIO_PuPd = GPIO_PuPd_UP ;
MyGPIO.GPIO_Mode = GPIO_Mode_IN;
GPIO_Init(GPIOD,&MyGPIO);
}
void key_scan(void)
{
if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_12)==0)
{
DelaymS(10);
if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_12)==0)
{
a++;
if(a>=3)
{
a=0;
}
}
}
if(a==1)
{
srand(msCounter);
iRand=(u16)( rand()%10);//²úÉúËæ»úÊý0~9
GPIO_Write(GPIOD,LEDSEG[iRand]);
}
else if(a==2)
{
GPIO_Write(GPIOD,LEDSEG[iRand]);
}
else a=0;
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0)
{
DelaymS(10);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0)
{
num++;
if(num>=10)
{
num=0;
}
}
}
}
int main(void)
{
int i;
Gpio_Init();
if(SysTick_Config(SystemCoreClock / 1000)){while(1);}
while(1)
{
key_scan();
GPIO_Write(GPIOA,LEDSEG[num]);
for(i=0;i<sizeof(LEDTAB);i++)
{
GPIO_Write(GPIOD,LEDSEG[iRand]);
GPIO_Write(GPIOB,LEDTAB[i]);
DelaymS(10);
}
}
}