按键输入实验

1.按键实验硬件连接

1.1连接原理

在这里插入图片描述在这里插入图片描述

1.2提示

KEY_UP按键,按下IO口检测到高电平。
KEY0/KEY1/KEY2按下,IO口检测到低电平。

2.GPIO输入操作说明(重点)

2.1输入库函数
2.1.1 读取IO口输入电平调用库函数

unit8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

2.1.2 读取IO口输入电平操作寄存器

GPIOx_IDR:端口输入寄存器

2.1.3 使用位带操作读取IO口输入电平方法

PEin(4) -读取GPIOE.4口电平
PEin (n) -读取GPIOE.n口电平
*:
位带操作就是把位带区中一个地址的8个位分别映射到位带别名区的8个地址(LSB有效,即最低位有效),通过操作相应地址的方式实现操作某个位。

3.按键实验

3.1 按键扫描思路

在这里插入图片描述
运用static关键字实现可连续按或者不可连续按。

3.1.1实现连续按

在这里插入图片描述

3.1.2不支持实现连续按

在这里插入图片描述

3.1.3 两种模式合二为一

在这里插入图片描述

3.2实现代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"



int main(void)
{ 
 
  u8 key;           //±£´æ¼üÖµ
	delay_init(168);  //³õʼ»¯ÑÓʱº¯Êý
	LED_Init();				//³õʼ»¯LED¶Ë¿Ú 
	BEEP_Init();      //³õʼ»¯·äÃùÆ÷¶Ë¿Ú
	KEY_Init();       //³õʼ»¯Óë°´¼üÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
	LED0=0;				  	//ÏȵãÁÁºìµÆ
	while(1)
	{
		key=KEY_Scan(0);		//µÃµ½¼üÖµ
	   	if(key)
		{						   
			switch(key)
			{				 
				case WKUP_PRES:	//¿ØÖÆ·äÃùÆ÷
					BEEP=!BEEP;
					break;
				case KEY0_PRES:	//¿ØÖÆLED0·­×ª
					LED0=!LED0;
					break;
				case KEY1_PRES:	//¿ØÖÆLED1·­×ª	 
					LED1=!LED1;
					break;
				case KEY2_PRES:	//ͬʱ¿ØÖÆLED0,LED1·­×ª 
					LED0=!LED0;
					LED1=!LED1;
					break;
			}
		}else delay_ms(10); 
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

。✧* ꧁流痕꧂✧*。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值