//按键输入 驱动代码
//按键初始化函数
//PA1作为按键输入端
void KEY_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFFF0F;//清除原来设置,同时
//不影响其他位设置
GPIOA->CRL|=0X00000080;//PA1设置成输入
GPIOA->ODR|=1<<1; //PA1
}
u8 KEY_Scan(void)
{
static u8 key_up=1; //按键松开标志
if(key_up&&KEY0==0)
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)
return 1;
}
else if(KEY0==1)key_up=1;
return 0;//无按键按下
}
#define KEY0 PAin(1) //PA1
void KEY_Init(void); //IO初始化
u8 KEY_Scan(void); //按键扫描函数
有遇到低端问题了。为什么在不按按键的情况下t=KEY_Scan(),t就等于 1了呢。
不好意思,把数字写错了。
这时PA1的引脚输出应该为高电平,可是我去测量的时候确是低电平
while(1)
{
t=KEY_Scan();
LED1=1;
delay_ms(1000);
LED1=0;
delay_ms(1000);
while(t)
{
while(l<10)
{
LED1=1;
delay_ms(100);
LED1=0;
delay_ms(100);
l++;
}
。。。。。。
}
}
我开始的想法是在没有按键按下的情况下,灯一直保持每秒闪烁一次,直到有按键按下,灯会快速的闪烁10下,然后在执行“。。。。”中的语句。
|