抚顺营销型网站建设,广州 行业 网站建设,WordPress模版二次元,广东建设资格注册中心网站文章目录前言模块介绍原理图编程思路前言
昨天#xff0c;通过配置通用输出模式#xff0c;实现了LED灯的点亮、熄灭以及流水等操作#xff0c;解决了通用输出的问题#xff0c;今天我们再借用最常见的输入模块#xff0c;按键来实现一个按键控制LED的功能#xff0c;重…
文章目录前言模块介绍原理图编程思路前言
昨天通过配置通用输出模式实现了LED灯的点亮、熄灭以及流水等操作解决了通用输出的问题今天我们再借用最常见的输入模块按键来实现一个按键控制LED的功能重点是配置GPIO为输入模式以及如何检测GPIO的输入电平。
模块介绍
原理图
笔者用的这款最小系统有三个独立按键可以操作首先第一步还是看原理图来确定我们需要使用的端口和管脚可以看出K_UP使用的是PA0、K0使用的是PE4、KEY1使用的是PE3。 注意观察这三个按键的电路其中KEY0和KEY1是没有上拉电阻的只有按下按键直接接地这一个电平模式这个我们在前面讲解GPIO模式的时候提到过如果没有外部上拉的电路想要实现高低电平的检测需要在内部编程实现上下拉这两个按键就是需要使用到内部上拉使得默认PE4、PE3端口默认是高电平也就是1只有按键按下才会被拉到低电平也就是0。 而K_UP刚好相反只有上拉电路按下按键是高电平不按下的时候应该要其默认状态是低也就是说需要我们为其配置下拉。
编程思路
在看清楚检测原理后就需要理清编程思路根据昨天的按键技巧来首先需要新建文件命名保存key.c存在src文件夹下key.h存在inc文件夹下然后将Key.c添加到工程再然后是定义头文件编写初始化函数。 编写初始化代码 伪代码 ①编写注释 /*************************************************************************** *函数名 :Key_Init *函数功能 :按键所用的管脚的初始化配置 *函数参数 :无 *函数返回值:无 *函数描述 : KEY_UP------PA0------通用输入模式默认状态采取内部下拉按下按键为高电平 K0----------PE4------通用输入模式默认状态采用内部上拉按下按键为低电平 K1----------PE3------通用输入模式默认状态采用内部上拉按下按键为低电平 ***************************************************************************/ ②初始化函数 void Key_Init(void) { ③使能对应端口的时钟有两个一个是GPIOA昨天用过一个是GPIOEGPIOA对应第0位GPIOE对应第4位。先在数据手册查其挂接的时钟总线然后再再第六章RCC找到对应使能进行配置 ④设置对应管脚的模式为通用输入模式分两组分别配置A0应该配置GPIOA的MODER 0 1两位写入00E3E4对应GPIOE的MODER的9 8 7 6 位也都应该写入0000 ⑤设置上下拉其中PA0设置为下拉模式应该对GPIOA的PUPDR 的1 0两位写入10PE4,PE3则应该将GPIOE的PUPDR 寄存器的9 8 7 6 位写入0101。 } 好了可以发现整个配置过程比昨天的输入配置稍微简单一点而且昨天输出使用的寄存器在按键输入上都是没有用上的。 接下来来看看代码吧。
//注释
void Key_Init(void)
{//打开AHB1上GPIOA端口RCC-AHB1ENR | (10);//打开GPIOE端口对应的AHB1时钟RCC-AHB1ENR | (14);//配置GPIOA0为通用输入模式GPIOA -MODER ~(30);//清0 GPIOA_MODER寄存器为00通用输入模式GPIOA -PUPDR ~(30);//清0 GPIOA_PUPDR寄存器为00 浮空GPIOA -PUPDR|(11);//清0 GPIOA_PUPDR寄存器为10 下拉GPIOE-MODER ~(0XF6);//通用输入GPIOE-PUPDR ~(0XF6);//清零GPIOE-PUPDR | (0X56);//写入0101配置为上拉模式
}