初级会员

- 积分
- 95
- 金钱
- 95
- 注册时间
- 2013-6-1
- 在线时间
- 37 小时
|
1金钱
各位大侠,请教一下为什么在下面的程序中定义的全局变量不管用呢,(一直按着其中任一个按键,LED始终是有规律的闪烁),请指导一下,谢谢!在下面的程序中,如果全局变量起作用了的话,在一直按着其中任一个按键的情况之下,LED是不会闪烁的。
#include "delay.h"
#include "sys.h"
#define KEY0 PAin(13)
#define KEY1 PAin(15)
#define WK_UP PAin(0)
#define LED0 PAout(8) // PA8
#define LED1 PDout(2) // PD2
u8 key_up;
u8 KEY_Scan()
{
// static u8 key_up=1;
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(100);
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
key_up=0;
if(KEY0==0)
return 1;
else if(KEY1==0)
return 2;
else
return 3;
}
else
return 0;
}
else
{
key_up=1;
return 0;
}
}
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);//3õê¼»ˉGPIOA15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //ê1ÄüPA,PD¶Ë¿úê±Öó
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA.8 ¶Ë¿úÅäÖÃ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //íÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿úËù¶èÎa50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //¸ù¾Yé趨2Îêy3õê¼»ˉGPIOA.8
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 êä3ö¸ß
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PD.2 ¶Ë¿úÅäÖÃ, íÆíìêä3ö
GPIO_Init(GPIOD, &GPIO_InitStructure); //íÆíìêä3ö £¬IO¿úËù¶èÎa50MHz
GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 êä3ö¸ß
}
int main(void)
{
u8 t=0;
key_up=1;
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
LED_Init(); //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
KEY_Init(); //3õê¼»ˉóë°′¼üᬽóμÄó2¼t½ó¿ú
while(1)
{
t=KEY_Scan(); //μÃμ½¼üÖμ
switch(t)
{
case 1:
LED0=!LED0;
break;
case 2:
LED1=!LED1;
break;
case 3:
LED0=!LED0;
LED1=!LED1;
break;
default:
delay_ms(10);
}
}
}
|
|