完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
麻烦各位帮忙看看
#include "KEY.h" #define KEY_PIN_1 GPIO_PIN_0 #define KEY_PIN_2 GPIO_PIN_1 #define KEY_PIN_3 GPIO_PIN_2 #define KEY_PIN_4 GPIO_PIN_3 #define KEY_PIN_5 GPIO_PIN_4 #define KEY_PIN_6 GPIO_PIN_5 #define KEY_PIN_7 GPIO_PIN_6 #define KEY_PIN_8 GPIO_PIN_7 #define KEY_PIN_ALL KEY_PIN_1|KEY_PIN_2|KEY_PIN_3|KEY_PIN_4|KEY_PIN_5|KEY_PIN_6|KEY_PIN_7|KEY_PIN_8 #define KEY_PORT GPIOB void GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); //__HAL_RCC_GPIOH_CLK_ENABLE(); GPIO_InitStruct.Pin = KEY_PIN_1|KEY_PIN_2|KEY_PIN_3|KEY_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(KEY_PORT, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = KEY_PIN_5|KEY_PIN_6|KEY_PIN_7|KEY_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLDOWN; //GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(KEY_PORT, &GPIO_InitStruct); } unsigned char HL_Scan(void) { unsigned char KeyVal=0; unsigned key=0; //unsigned int WriteVal=0; if(key==0) { HAL_GPIO_WritePin(KEY_PORT,KEY_PIN_1|KEY_PIN_2|KEY_PIN_3|KEY_PIN_4,GPIO_PIN_SET); if(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN_5|KEY_PIN_6|KEY_PIN_7|KEY_PIN_8)==0) { key=0; return 0; } else { HAL_Delay(5); if(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN_5|KEY_PIN_6|KEY_PIN_7|KEY_PIN_8)==0) { key=0; return 0; } else key=1; } } if(key==1) { HAL_GPIO_WritePin(KEY_PORT,KEY_PIN_1,GPIO_PIN_SET); HAL_GPIO_WritePin(KEY_PORT,KEY_PIN_2|KEY_PIN_3|KEY_PIN_4,GPIO_PIN_RESET); switch(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN_5|KEY_PIN_6|KEY_PIN_7|KEY_PIN_8)&0xf0) { case 0x10: KeyVal=15; break; case 0x20: KeyVal=11; break; case 0x40: KeyVal=7; break; case 0x80: KeyVal=3; break; } HAL_GPIO_WritePin(KEY_PORT,KEY_PIN_2,GPIO_PIN_SET); HAL_GPIO_WritePin(KEY_PORT,KEY_PIN_1|KEY_PIN_3|KEY_PIN_4,GPIO_PIN_RESET); switch(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN_5|KEY_PIN_6|KEY_PIN_7|KEY_PIN_8)&0xf0) { case 0x10: KeyVal=14; break; case 0x20: KeyVal=10; break; case 0x40: KeyVal=6; break; case 0x80: KeyVal=2; break; } HAL_GPIO_WritePin(KEY_PORT,KEY_PIN_3,GPIO_PIN_SET); HAL_GPIO_WritePin(KEY_PORT,KEY_PIN_1|KEY_PIN_2|KEY_PIN_4,GPIO_PIN_RESET); switch(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN_5|KEY_PIN_6|KEY_PIN_7|KEY_PIN_8)&0xf0) { case 0x10: KeyVal=13; break; case 0x20: KeyVal=9; break; case 0x40: KeyVal=5; break; case 0x80: KeyVal=1; break; } HAL_GPIO_WritePin(KEY_PORT,KEY_PIN_4,GPIO_PIN_SET); HAL_GPIO_WritePin(KEY_PORT,KEY_PIN_1|KEY_PIN_2|KEY_PIN_3,GPIO_PIN_RESET); switch(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN_5|KEY_PIN_6|KEY_PIN_7|KEY_PIN_8)&0xf0) { case 0x10: KeyVal=12; break; case 0x20: KeyVal=8; break; case 0x40: KeyVal=4; break; case 0x80: KeyVal=0; break; } key=0; } return KeyVal; } |
|
相关推荐
12个回答
|
|
楼主 io口模式是不是应该设置为上拉啊,还有就是您那个外部电路上有上拉电阻吗
|
|
|
|
读不出数据啥意思?是数据出错,还是数据随机变化?
|
|
|
|
你说的是输入改成上拉,还是输出改成上拉?外部没有上拉电阻 |
|
|
|
我用万用表测管脚的电压是正确的,可结果读取管脚高低电平的时候就是进不了swicth语句。。。 |
|
|
|
是不是switch(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN_5|KEY_PIN_6|KEY_PIN_7|KEY_PIN_8)&0xf0)我这句代码出问题了 |
|
|
|
输出的引脚啊 应该是上拉啊
|
|
|
|
另外我理解输入引脚应该是加一个电阻接地 然后键盘按下之后就接到了高电平 这样输入引脚就应该检测到高电平的输入
|
|
|
|
感谢大佬
|
|
|
|
藉由此帖亦受益良多。
|
|
|
|
先把前一个帖子的情况总结一下。
|
|
|
|
|
|
|
|
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{ GPIO_PinState bitstatus; /* Check the parameters */ assert_param(IS_GPIO_PIN(GPIO_Pin)); if((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) { bitstatus = GPIO_PIN_SET; } else { bitstatus = GPIO_PIN_RESET; } return bitstatus; } 这个函数的返回只有两个状态,要么0,要么1,所以你的swich里的值永远是0 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1967 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1823 浏览 3 评论
4403 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1970 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2477 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 03:51 , Processed in 1.087282 second(s), Total 68, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号