/*
程序名称:按键KEY4控制LED翻转(不含中断)
硬件连接:KEY4------GPIOB.10
LED-------GPIOF.6~9
*/
#include "stm32f10x.h"
void Delay (uint32_t nCount)
{
for(;nCount!=0;nCount--);
}
GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
u8 ReadValue;
char a=0;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); //初始化GPIOF时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_ResetBits(GPIOF,GPIO_Pin_6 | GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9); //将GPIOF.6~9复位,关掉LED灯
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //初始化GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while (1)
{
//GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10);
if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)) //发现按键KEY4被按下
{
Delay(0xfffff); //延时消斗
if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10))//再次检测按键是否仍然被按下
{
while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10));//等待按键被放开
a^=0x01;
if(a==0)
GPIO_WriteBit(GPIOF, GPIO_Pin_6, Bit_RESET);
//GPIO_ResetBits(GPIOF,GPIO_Pin_6 | GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);
else if(a==1)
GPIO_WriteBit(GPIOF, GPIO_Pin_6, Bit_SET);
//GPIO_SetBits(GPIOF,GPIO_Pin_6 | GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);
}
}
}
}
但如果改成如下,就有问题了
while (1)
{
u8 ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10);
if(!ReadValue)//发现按键KEY4被按下
{
Delay(0xfffff); //延时消斗
if(!ReadValue)//再次检测按键是否仍然被按下
{
while(!ReadValue);//等待按键被放开
a^=0x01;
if(a==0)
GPIO_WriteBit(GPIOF, GPIO_Pin_6, Bit_RESET);
//GPIO_ResetBits(GPIOF,GPIO_Pin_6 | GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);
else if(a==1)
GPIO_WriteBit(GPIOF, GPIO_Pin_6, Bit_SET);
//GPIO_SetBits(GPIOF,GPIO_Pin_6 | GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);
}
}
}
}