完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
按键部分的原理图
从上图可以看出,开发板上共配备了4个按键,分别连接在PB0,PB1,PB2,PA0引脚上,引脚通过10K的电阻连接在电源正极VDD,按键的另一端连接在电源负极GND,分析可知,在没有按键按下时,对应的GPIO为高电平,有按键按下时,对应的GPIO为低电平。 按键的使用步骤 ① 将 PB0,PB1,PB2,PA0 初始化为输入模式 void Key_Init() //按键初始化 { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); //打开GPIO A的时钟 __HAL_RCC_GPIOB_CLK_ENABLE(); //打开GPIO B的时钟 GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //将PA0设为输入模式 GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); //将PB0 PB1 PB2设为输入模式 } ② 按键扫描函数 uint8_t Key_Scan(void) //按键扫描函数 { if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0) //PB0 (按键B1)被按下 { HAL_Delay(10);//延时消抖 if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0) { while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0); //等待按键抬起 return 1;//返回1 } } if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0) //PB1 (按键B2)被按下 { HAL_Delay(10);//延时消抖 if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0) { while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0); //等待按键抬起 return 2;//返回2 } } if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0) //PB2 (按键B3)被按下 { HAL_Delay(10);//延时消抖 if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0) { while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0); //等待按键抬起 return 3; //返回3 } } if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0) //PA0 (按键B4)被按下 { HAL_Delay(10);//延时消抖 if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0) { while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0); //等待按键抬起 return 4; //返回4 } } return 0; //没有按键按下返回0 } ③ 在main.c中使用按键 ④ 读取并使用按键 int Key_Value = 0; Key_Value = Key_Scan(); if(Key_Value == 1) //按键B1被按下 { } if(Key_Value == 2) //按键B2被按下 { } if(Key_Value == 3) //按键B3被按下 { } if(Key_Value == 4) //按键B4被按下 { } 总结 KEY 按键 使用步骤总结如下:
|
|
|
|
只有小组成员才能发言,加入小组>>
689 浏览 0 评论
1102 浏览 1 评论
2469 浏览 5 评论
2803 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2642 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
650浏览 9评论
648浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
777浏览 6评论
622浏览 5评论
664浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 08:46 , Processed in 0.928767 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号