#include "stm32f10x.h"
#include "sys.h"
#include "led.h"
#include "key.h"
#include "delay.h"
int main(void)
{
u8 i;
RCC_Configuration();
LED_Init();
KEY_Init();
while(1)
{
//方法一:不进行锁存操作
// if(GPIO_ReadInputDataBit(KEYPORT,KEY1))
// GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0));
// else
// GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));
//原理:灯会跟着按键端口的高低电平进行闪烁,因此,按键的抖动过快导致LED灯的闪烁过快,肉眼无法识别,默认为一直亮灯
//方法二:
// GPIO_WriteBit(LEDPORT,LED1,(BitAction)(!GPIO_ReadInputDataBit(KEYPORT,KEY1)));
//原理:同上
//方法三:
// if(!GPIO_ReadInputDataBit(KEYPORT,KEY1))//判断是否按下按键,按下则进函数,不按下则重新判断
// {
// delay_ms(20);//按键消抖
// if(!GPIO_ReadInputDataBit(KEYPORT,KEY1))//消抖以后二次判断
// {
// GPIO_WriteBit(LEDPORT,LED1,(BitAction)(!GPIO_ReadOutputDataBit(LEDPORT,LED1))); //每次按下判断成功后对LED进行电平翻转
// while(!GPIO_ReadInputDataBit(KEYPORT,KEY1));//松手检测
// }
// }
//原理:延时消抖,锁存处理
//拓展:
if(!GPIO_ReadInputDataBit(KEYPORT,KEY1))
{
delay_ms(20);
if(!GPIO_ReadInputDataBit(KEYPORT,KEY1))
{
i++;
if(i > 3)
i = 0;
GPIO_Write(LEDPORT,i);
while(!GPIO_ReadInputDataBit(KEYPORT,KEY1));
}
}
//原理:端口整组操作
}
}