OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2991|回复: 1

原子哥,我的这个矩阵按键程序是什么问题呀,怎么总是没显示呀

[复制链接]

19

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-1-14
在线时间
7 小时
发表于 2015-7-31 20:52:08 | 显示全部楼层 |阅读模式
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);
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-31 22:22:15 | 显示全部楼层
不知道哦,你慢慢调试下吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 05:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表