赞
踩
- void jz_key_init()
- {
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- }
- u8 jz_key_scan2()//二次封装消抖
- {
- if(jz_key_scan())
- {
- delay_ms(10);
- if(jz_key_scan())
- {
- return jz_key_scan();
- }
- }
- return 0;
- }
- u8 jz_key_scan()
- {
- u8 hang=0,lie=0;
- GPIO_InitTypeDef GPIO_Initure;
- GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;//ÐÐ
- GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;
- GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
- GPIO_Initure.Pull=GPIO_NOPULL;
- HAL_GPIO_Init(GPIOA,&GPIO_Initure);
-
- GPIO_Initure.Pin=GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;//ÁÐ
- GPIO_Initure.Mode=GPIO_MODE_INPUT;
- GPIO_Initure.Pull=GPIO_PULLDOWN;
- HAL_GPIO_Init(GPIOB,&GPIO_Initure);
-
- GPIOA->ODR=(GPIOA->ODR|0x000F);//按位或 不影响其他PA口
- delay_us(10);//延时 不加延时部分键值会无法检测
- if((GPIOB->IDR & 0xF000)==0x8000)
- lie=4;
- else if((GPIOB->IDR & 0xF000)==0x4000)
- lie=3;
- else if((GPIOB->IDR& 0xF000)==0x2000)
- lie=2;
- else if((GPIOB->IDR & 0xF000)==0x1000)
- lie=1;
- else
- return 0;
-
- GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;//ÐÐ
- GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;
- GPIO_Initure.Mode=GPIO_MODE_INPUT;
- GPIO_Initure.Pull=GPIO_PULLDOWN;
- HAL_GPIO_Init(GPIOA,&GPIO_Initure);
-
- GPIO_Initure.Pin=GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;//ÁÐ
- GPIO_Initure.Pull=GPIO_NOPULL;
- GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
- HAL_GPIO_Init(GPIOB,&GPIO_Initure);
- GPIOB->ODR=(GPIOB->ODR|0xF000);
- delay_us(10);
- if((GPIOA->IDR & 0x000F)==0x0008)
- hang=4;
- else if((GPIOA->IDR & 0x000F)==0x0004)
- hang=3;
- else if((GPIOA->IDR & 0x000F)==0x0002)
- hang=2;
- else if((GPIOA->IDR & 0x000F)==0x0001)
- hang=1;
- else
- return 0;
-
- return lie+(hang-1)*4;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。