初中生
最后登录1970-1-1
在线时间 小时
注册时间2018-4-5
|

楼主 |
发表于 2018-4-14 13:47:28
|
显示全部楼层
第二段是我写的4X4键盘的bsp_keyboard.c- #include "bsp_keyboard.h"
- #include "stm32f4xx_gpio.h"
- #include "stm32f4xx_rcc.h"
- void Delay_ms(int xms)
- {
- uint32_t i,j;
- for(i=xms;i>0;i--)
- for(j=72000;j>0;j--);
- }
- void KeyBoard_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(C1_GPIO_CLK|
- R1_GPIO_CLK,ENABLE);
-
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
- GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Pin = C1_PIN |C2_PIN |C3_PIN |C4_PIN ;
- GPIO_Init(GPIOC,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_InitStructure.GPIO_Pin = R1_PIN|R2_PIN|R3_PIN|R4_PIN;//DD
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- }
- int Key_Scan(void)
- {
- uint8_t KeyVal;
- GPIO_Write(GPIOC,((GPIOC->ODR & 0xf0ff) | 0x0f00));
- if((GPIOA->IDR & 0xf000)==0x0000)
- return -1;
- else
- {
- Delay_ms(5);
- if((GPIOA->IDR & 0xf000)==0x0000)
- return -1;
- }
- GPIO_Write(GPIOC,((GPIOC->ODR & 0xf0ff) | 0x0100));
- switch(GPIOA->IDR & 0xf000)
- {
- case 0x1000: KeyVal=15; break;
- case 0x2000: KeyVal=11; break;
- case 0x4000: KeyVal=7; break;
- case 0x8000: KeyVal=3; break;
- }
- GPIO_Write(GPIOC,((GPIOC->ODR & 0xf0ff) | 0x0200));
- switch(GPIOA->IDR & 0xf000)
- {
- case 0x1000: KeyVal=14; break;
- case 0x2000: KeyVal=10; break;
- case 0x4000: KeyVal=6; break;
- case 0x8000: KeyVal=2; break;
- }
- GPIO_Write(GPIOC,((GPIOC->ODR & 0xf0ff) | 0x0400));
- switch(GPIOA->IDR & 0xf000)
- {
- case 0x1000: KeyVal=13; break;
- case 0x2000: KeyVal=9; break;
- case 0x4000: KeyVal=5; break;
- case 0x8000: KeyVal=1; break;
- }
- GPIO_Write(GPIOC,((GPIOC->ODR & 0xf0ff) | 0x0800));
- switch(GPIOA->IDR & 0xf000)
- {
- case 0x1000: KeyVal=12; break;
- case 0x2000: KeyVal=8; break;
- case 0x4000: KeyVal=4; break;
- case 0x8000: KeyVal=0; break;
- }
-
- return KeyVal;
- }
复制代码
|
|