中级会员
 
- 积分
- 259
- 金钱
- 259
- 注册时间
- 2014-10-16
- 在线时间
- 44 小时
|

楼主 |
发表于 2017-6-1 16:21:06
|
显示全部楼层
#include "key.h"
#include "delay.h"
struct io_port
{
GPIO_TypeDef *GPIO_x;
unsigned short GPIO_pin;
};
static struct io_port key_output[4] = {
{GPIOA, GPIO_Pin_12}, {GPIOA, GPIO_Pin_11},
{GPIOA, GPIO_Pin_10}, {GPIOA, GPIO_Pin_9}
};
static struct io_port key_input[4] = {
{GPIOC, GPIO_Pin_4}, {GPIOC, GPIO_Pin_5},
{GPIOC, GPIO_Pin_11}, {GPIOC, GPIO_Pin_12}
};
unsigned char key[4][4];
void keyboard_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
unsigned char i;
// //AFIO??
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
for(i = 0; i < 4; i++)
{
GPIO_SetBits(key_output.GPIO_x, key_output.GPIO_pin);
}
}
u8 update_key(void)
{
unsigned char i, j;
for(i = 0; i < 4; i++)
{
GPIO_ResetBits(key_output.GPIO_x, key_output.GPIO_pin);
for(j = 0; j < 4; j++)
{
if(GPIO_ReadInputDataBit(key_input[j].GPIO_x, key_input[j].GPIO_pin) == 0)
{
key[j] = 1;
}else{
key[j] = 0;
}
}
GPIO_SetBits(key_output.GPIO_x, key_output.GPIO_pin);
}
if(key[0][0]==1)return 13;
if(key[0][1]==1)return 14;
if(key[0][2]==1)return 15;
if(key[0][3]==1)return 16;
if(key[1][0]==1)return 9;
if(key[1][1]==1)return 10;
if(key[1][2]==1)return 11;
if(key[1][3]==1)return 12;
if(key[2][0]==1)return 5;
if(key[2][1]==1)return 6;
if(key[2][2]==1)return 7;
if(key[2][3]==1)return 8;
if(key[3][0]==1)return 1;
if(key[3][1]==1)return 2;
if(key[3][2]==1)return 3;
if(key[3][3]==1)return 4;
}
我把引脚换了,然后仿真,mark还是13,然后我把 if(key[0][0]==1)return 13;这个屏蔽,只显示14了。 |
|