【按键控制开/关】stm32fxx开发板驱动按键控制LCD显示屏开/关

Stm32控制按键开和关

一、准备硬件设备

1、stm32fxx系列开发板(这里我用的是stm32f407系列)
2、按键模块(我这里用的是两引脚的)
3、杜邦线两根
4、LCD显示屏(我用的是12232LCD)
5、面包板

二、硬件连接原理图

按键硬件图
在这里插入图片描述
硬件连接原理图
在这里插入图片描述

这里我用的是GPIOD0口,按键两引脚分别接Vdd和PD0,我这里按下去就把按键上拉到高电平了,故程序示例中用的是高电平触发按键作用。

三、代码示例

因为每个小伙伴用的显示屏存在区别,所以这里我只放按键控制开和关的程序,其控制开和关的逻辑是相同的,示例如下:

key.h

#ifndef __KEY_H
#define __KEY_H
#define key_on  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_0) //按键按下时,单片机读按键输入信息

void GPIO_Configuration(void); //GPIO端口初始化
#endif

key.c

#include "stm32f4xx.h" 
u32 key_nums; //按键计数

void GPIO_Configuration(void)  //GPIO端口初始化
{
	GPIO_InitTypeDef GPIO_InitStruct;
	//D口使能
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
	  
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
	GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
	GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	
	//PD0按键控制	    
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0; 
	GPIO_Init(GPIOD,&GPIO_InitStruct);	
}

main.c

#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"

int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置系统中断优先级分组2
delay_init(168); //初始化延时函数
GPIO_Configuration();	
while(1)
	{
	 if(key==1)
	 {
		delay_ms(20);//按键消抖
/*因为按键一脚接的是正极,故按键按下时电平被拉高,为1*/
		if(key==1) 
	  {
			key_nums++;//按键每按一次,次数加1
			if(key_nums%2==1)//第一次按下时,开关应为开,故1÷2,余数为1,故1%2==1,即if里条件为真,执行以下开语句
			{
			//这里放屏幕开启时的显示内容,故在此省略。
			}
			if(key_nums%2==0)//再一次按下按键后,key_nums即按键次数应为第2次,故2%2==0,if里语句为真,执行以下关程序。
			{
			 delay_ms(1000);//这里延迟1s,即长按1s后再关
			 GPIO_ResetBits(GPIOD,GPIO_Pin_0);//设置GPIOD0口低电平,即0,因为按键低电平后才启动关,不显示任何内容。
			 if(key_nums>=2)//这里非常重要,要知道,按键次数是不断叠加的,这样的话运算效率就会大大降低,因此这里当按键计数>=2时,key_nums置0,即重新计数。正好满足了按键一开一关两次技术操作,执行完一开一关计数后再重新开始计数,也就是计数永远是1,2,1,2...这样循环。
				{
				 key_nums=0;
				 break;
				}
			}
			while(key);//按键松开后完成计数
		}
		else
	    break;
	   }
	}
	}
  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024_程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值