学习完流水LED,也要学习简单的输入控制,就是按键了,还是单独的按键,不是点阵按键,够简单了吧。按KEY2就点亮LED4,按KEY3就熄灭LED4,好了,上代码
#include <stm32f10x_lib.h>
GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化结构体
void Delay(vu32 nCount);
u16 getkey(void);
int main(void)
{
//使能GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
//初始化LED输出IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //输出频率最大2M
GPIO_Init(GPIOC, &GPIO_InitStructure);
//初始化KEY2,KEY3输入IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //带上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//KEY2点亮LED1,KEY3关闭LED1
while(1)
{
switch(getkey())
{
case 2:
GPIO_SetBits(GPIOC, GPIO_Pin_4);
break;
case 3:
GPIO_ResetBits(GPIOC, GPIO_Pin_4);
break;
}
}
}
/*****************************************************
函数: void Delay(vu32 nCount)
参数: vu32 nCount 延时时间
描述: 延时指定时间
返回: 无
******************************************************/
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
/*****************************************************
函数: u16 getkey(void)
参数:
描述: 延时指定时间
返回: 按键值
******************************************************/
u16 getkey(void)
{
u16 input;
while(1)
{
input = GPIO_ReadInputData(GPIOD);
if(!(input & 0x08))
return 2;
if(!(input & 0x10))
return 3;
}
}
文章评论(0条评论)
登录后参与讨论