初级会员

- 积分
- 166
- 金钱
- 166
- 注册时间
- 2015-1-14
- 在线时间
- 7 小时
|
5金钱
原子哥,我的这个矩阵按键程序是什么问题呀,怎么总是没显示呀
#include "key.h"
#include "delay.h"
#include "led.h"
u16 key_data[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
u8 key_pressed_flag;
void Key_Init()
{
GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);
GPIO_ResetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource4);
EXTI_InitStruct.EXTI_Line=EXTI_Line4;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStruct);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
EXTI_InitStruct.EXTI_Line=EXTI_Line5;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStruct);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);
EXTI_InitStruct.EXTI_Line=EXTI_Line6;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStruct);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource7);
EXTI_InitStruct.EXTI_Line=EXTI_Line7;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel=EXTI4_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0X02;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0X00;
NVIC_Init(&NVIC_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel=EXTI9_5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0X02;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0X01;
NVIC_Init(&NVIC_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel=EXTI9_5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0X02;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0X01;
NVIC_Init(&NVIC_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel=EXTI9_5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0X02;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0X01;
NVIC_Init(&NVIC_InitStruct);
}
u16 Key_Scan()
{
u16 Key_Board_Val=0;
u8 i;
u16 tmpFlag=0;
u16 ReadValue;
ReadValue=GPIO_ReadInputData(GPIOC);
tmpFlag=(ReadValue&0x00f0);
switch(tmpFlag)
{
case EXTI_Line4 : GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
for(i=0;i<4;i++)
{
GPIO_SetBits(GPIOA,(GPIO_Pin_0<<i));
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==1)
delay_us(10);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==1)
Key_Board_Val=key_data[0];
break;
}
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
break;
case EXTI_Line5 : GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
for(i=0;i<4;i++)
{
GPIO_SetBits(GPIOA,(GPIO_Pin_0<<i));
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==1)
delay_us(10);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==1)
Key_Board_Val=key_data[1];
break;
}
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
break;
case EXTI_Line6 : GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
for(i=0;i<4;i++)
{
GPIO_SetBits(GPIOA,(GPIO_Pin_0<<i));
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==1)
delay_us(10);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==1)
Key_Board_Val=key_data[2];
break;
}
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
break;
case EXTI_Line7 : GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
for(i=0;i<4;i++)
{
GPIO_SetBits(GPIOA,(GPIO_Pin_0<<i));
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==1)
delay_us(10);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==1)
Key_Board_Val=key_data[3];
break;
}
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
break;
default: break;
}
GPIO_ResetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
return Key_Board_Val;
}
void EXTI4_IRQHandler(void)
{
key_pressed_flag=1;
EXTI_ClearFlag(EXTI_Line4);
}
void EXTI9_5_IRQHandler(void)
{
key_pressed_flag=1;
EXTI_ClearFlag(EXTI_Line5|EXTI_Line6|EXTI_Line7);
}
|
|