文章目录
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);
}
}