按键操作的基本原理:
原本的灯控制函数放在了循环之中,我们无法手动进行干预,想要改变单个LED灯,就必须在源程序中进行修改,所以我们引入了按键控制,当按下某个按键的时候,对应该按键的LED灯才会点亮,再次按下按键时,对应的LED灯熄灭。
在前面两个实验中,我们学会对单个LED的点亮,本次实验就不对LED灯端口的配置在进行复述,而按键的配置和LED灯的配置几乎相同。这里只对WK_UP按键进行描述,
从原理图可以知道:KEY0,KEY1,KEY2都是属于是低电平有效,而WK_UP是高电平有效,且外部没有上拉电阻,这个时候该按键的配置模式我们需要选用上下拉模式,
什么是:上下拉电阻?
上拉电阻:把一个不确定的信号通过电阻连接到高电平,是电信号初始化为高电平。
下拉电阻:把一个不确定的信号通过电阻连接到地,使电信号初始为低电平。
本质:上拉是对器件注入电流,下拉是输出电流
提高电路稳定性,避免引起误动作。第一图中的按键如果不通过电阻上拉到高电平,那么在上电瞬间可能就发生误动作,因为在上电瞬间单片机的引脚电平是不确定的,上拉电阻R12的存在保证了其引脚处于高电平状态,而不会发生误动作。
提高输出管脚的带载能力。受其他外围电路的影响单片机在输出高电平时能力不足,达不到VCC状态,这会影响整个系统的正常工作,上拉电阻的存在就可以使管脚的驱动能力增强。
按照通俗点的话来说,就是在不确定输入的情况下,就选择上下拉模式。
下面程序为按键初始化函数:
void KEY_Init(void) //IO初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//使能PORTA,PORTE时钟
GPIO_InitStructure.GPIO_Pin = GP