STM32入门开发--按键模块实现按键点灯

1、实现效果
通过I/O口,操作按键,使得按键与LED一一对应,实现按键按下灯亮,再按下灯灭。支持连续按键。

2、实现思路
a. 要实现灯亮,首先应该初始化LED模块的时钟,使得该端口的时钟使能。
b. 初始化按键,按键对应的端口PORTA,PORTE使能,其次设置为输入模式,
KEY0,KEY1为低电平有效,KEY_UP高电平有效
STM32入门开发--按键模块实现按键点灯_第1张图片
硬件图可知,在设计中,应该在内部设置为上拉下拉输入,即KEY0,KEY1为上拉(输入高电平,本身为低电平有效),KEY_UP为下拉(输入低电平,本身为高电平有效)。
STM32入门开发--按键模块实现按键点灯_第2张图片
根据模式配置图,即要设置GOIPx—ODR寄存器的3/4位为1,才能保证为上拉输入。
c. 实现相应的初始化之后,循环检测是否有按键按下,KEY0,KEY1为0(低电平有效)则代表按键按下,KEY_UP为1(高 电平有效)代表按下。

3、key.c参考代码如下:
#include "key.h"

void delay_lx(unsigned int num)
{

	unsigned int i = 0,j = 0;
	for (;iAPB2ENR |= 1<<6; // 使能PORTE
	RCC->APB2ENR |= 1<<2; // 使能PORTA
	
	
	GPIOA->CRL &= 0XFFFFFFF0; // 设置为输入模式
	GPIOA->CRL |= 0X00000008; // 10--上拉/下拉输入 00--输入模式
	
	GPIOE->CRL &= 0XFFFF00FF;
	GPIOE->CRL |= 0X00008800;
	
	GPIOE->ODR |= 3<<3;			// 3/4上拉有效
}
unsigned int key_scan(unsigned int mode)
{
	static unsigned int key_up = 1; // 按键按下标志
	
	if(mode)
		key_up = 1;	
	if (key_up&&(KEY0==0||KEY1==0||WK_UP==1))
	{
			delay_lx(2000);
			key_up = 0;
		  if (KEY0 == 0)
				return 1;
			else if (KEY1 == 0)
				return 2;
			else if (WK_UP == 1)
				return 3;
	}
	else if (KEY0==1&&KEY1==1&&WK_UP==0)
			key_up = 1;
	return 0;
	
}



有关STM32的基础开发案例持续更新中。。。敬请关注。


你可能感兴趣的:(嵌入式)