新人第一次发帖,求助一个,用矩阵键盘,控制数码管显示的问题,急用!!!!

2019-07-20 13:10发布

下面是具体程序:
key,h
#ifndef __KEY_H
#define __KEY_H
#include<sys.h>

#define KE1  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define KE2  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)
#define KE3  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)
#define KE4  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)



#define KEY1 1
#define KEY2 2
#define KEY3 3
#define KEY4 4
int KEY_Scan(void);
void KEY_Init(void);
#endif

key.c
#include<key.h>
#include<delay.h>

void KEY_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//ê1&#196;üPORTCê±&#214;ó
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0|GPIO_Pin_4|GPIO_Pin_11|GPIO_Pin_12;//PA  ′ó×óμ&#189;óòòà′&#206;&#206;a1 2 3 4áD
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //éè&#214;&#195;é&#207;à-
        GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOC
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_9;//PC0-3
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //éè&#214;&#195;3éí&#198;íì
        GPIO_Init(GPIOC, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOC
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//PC0-3
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //éè&#214;&#195;3éí&#198;íì
        GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA
}

void P1_Init(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_13);//μú1DD
GPIO_SetBits(GPIOA,GPIO_Pin_14);
GPIO_SetBits(GPIOA,GPIO_Pin_15);
GPIO_SetBits(GPIOC,GPIO_Pin_9);

}
void P2_Init(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_14);//μú2DD
GPIO_SetBits(GPIOA,GPIO_Pin_13);
GPIO_SetBits(GPIOA,GPIO_Pin_15);
GPIO_SetBits(GPIOC,GPIO_Pin_9);

}
void P3_Init(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_15);//μú3DD
GPIO_SetBits(GPIOA,GPIO_Pin_13);
GPIO_SetBits(GPIOA,GPIO_Pin_14);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
}
void P4_Init(void)
{

GPIO_ResetBits(GPIOC,GPIO_Pin_9);//μú4DD
GPIO_SetBits(GPIOA,GPIO_Pin_13);
GPIO_SetBits(GPIOA,GPIO_Pin_14);
GPIO_SetBits(GPIOC,GPIO_Pin_15);
}

int KEY_Scan(void)//é¨&#195;è
{
P1_Init();//μú1DD
if(KE1==0) return 1;
        else if(KE2==0) return 2;
        else if(KE3==0)  return 3;
        else if(KE4==0) return 4;

P2_Init();//μú1DD
if(KE1==0) return 5;
        else if(KE2==0) return 6;
        else if(KE3==0)  return 7;
        else if(KE4==0) return 8;

P3_Init();//μú1DD
if(KE1==0) return 9;
        else if(KE2==0) return 10;
        else if(KE3==0)  return 11;
        else if(KE4==0) return 12;

P4_Init();//μú1DD
if(KE1==0) return 13;
        else if(KE2==0) return 14;
        else if(KE3==0)  return 15;
        else if(KE4==0) return 16;


return 0;
}

LED.h

#ifndef __LED_H
#define __LED_H
#include<sys.h>
#define LED1A  PBout(5)
#define LED2A  PBout(6)
#define LED3A  PBout(7)
#define LED4A  PBout(8)
#define LED5A  PBout(9)
#define LED6A  PBout(10)
#define LED7A  PBout(11)
#define LED8A  PBout(12)
#define LED9A  PBout(13)
#define LED10A  PBout(14)
#define LED11A  PBout(15)
#define LED12A  PBout(1)

#define LED1B  PCout(0)
#define LED2B  PCout(1)
#define LED3B  PCout(2)
#define LED4B  PCout(3)
#define LED5B  PCout(4)
#define LED6B  PCout(5)
#define LED7B  PCout(6)
#define LED8B  PCout(7)
#define LED9B  PCout(8)
#define LED10B  PCout(13)
#define LED11B  PCout(10)
#define LED12B  PBout(0)

void LED_Init(void);       



#endif

LED.c
#include<led.h>

void LED_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;
  RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE);

  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_6|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//3&#245;ê&#188;&#187;ˉGPIOB&#184;÷IO&#191;ú
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB,&GPIO_InitStruct);

        GPIO_InitStruct.GPIO_Pin        =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_13;//3&#245;ê&#188;&#187;ˉGPIOC2μ&#196;IO&#191;ú
  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;       
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOC,&GPIO_InitStruct);
       

}
main.c

#include<key.h>
#include<led.h>
#include<delay.h>
#include<sys.h>

int main(void)
{
                u8 t;
KEY_Init();
LED_Init();
delay_init();

        while(1)

{
                t=KEY_Scan();                                 
switch(t)
        {
  case 1ED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=0,LED6A=1,LED7A=1,LED8A=0,LED9A=0,LED10A=0,LED11A=0,LED12A=0;break;//1
  case 2ED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=1,LED6A=1,LED7A=0,LED8A=1,LED9A=1,LED10A=0,LED11A=1,LED12A=0;break;//2       
        case 3ED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=1,LED6A=1,LED7A=1,LED8A=1,LED9A=0,LED10A=0,LED11A=1,LED12A=0;break;        //3
  case 4ED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=0,LED6A=1,LED7A=1,LED8A=1,LED9A=0,LED10A=1,LED11A=1,LED12A=0;break;//4
  case 5ED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=1,LED6A=0,LED7A=1,LED8A=1,LED9A=0,LED10A=1,LED11A=1,LED12A=0;break;//5
        case 6ED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=1,LED6A=0,LED7A=1,LED8A=1,LED9A=1,LED10A=1,LED11A=1,LED12A=0;break;//6
  case 7ED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=1,LED6A=1,LED7A=1,LED8A=0,LED9A=0,LED10A=0,LED11A=0,LED12A=0;break;//7
  case 8ED1A=1;LED2A=1;LED3A=1;LED4A=0;LED5A=1;LED6A=1;LED7A=1;LED8A=1;LED9A=1;LED10A=1;LED11A=1,LED12A=0;break;        //8
  case 9ED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=1,LED6A=1,LED7A=1,LED8A=1,LED9A=0,LED10A=1,LED11A=1,LED12A=0;break;//9
  case 10ED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=1,LED6A=1,LED7A=1,LED8A=1,LED9A=1,LED10A=1,LED11A=0,LED12A=0;break;//0
  case 11:LED1A=0,LED2A=1,LED3A=1,LED4A=1,LED5A=1,LED6A=1,LED7A=1,LED8A=1,LED9A=1,LED10A=1,LED11A=0,LED12A=0;delay_ms(10);//0
                      LED1A=1,LED2A=0,LED3A=1,LED4A=1,LED5A=0,LED6A=1,LED7A=1,LED8A=0,LED9A=0,LED10A=0,LED11A=0,LED12A=0;delay_ms(10);//1
                      LED1A=1,LED2A=1,LED3A=0,LED4A=0,LED5A=1,LED6A=1,LED7A=0,LED8A=1,LED9A=1,LED10A=0,LED11A=1,LED12A=0;delay_ms(10);//2
                      LED1A=1,LED2A=1,LED3A=1,LED4A=0,LED5A=1,LED6A=1,LED7A=1,LED8A=1,LED9A=0,LED10A=0,LED11A=1,LED12A=0;delay_ms(10);//3
                LED1B=0,LED2B=1,LED3B=1,LED4B=1,LED5B=0,LED6B=1,LED7B=1,LED8B=1,LED9B=0,LED10B=1,LED11B=1,LED12B=0;delay_ms(10);//4
                LED1B=1,LED2B=0,LED3B=1,LED4B=1,LED5B=1,LED6B=0,LED7B=1,LED8B=1,LED9B=0,LED10B=1,LED11B=1,LED12B=0;delay_ms(10);//5
                            LED1B=1,LED2B=1,LED3B=0,LED4B=1,LED5B=1,LED6B=0,LED7B=1,LED8B=1,LED9B=1,LED10B=1,LED11B=1,LED12B=0;delay_ms(10);//6
                      LED1B=1,LED2B=1,LED3B=1,LED4B=0,LED5B=1,LED6B=1,LED7B=1,LED8B=0,LED9B=0,LED10B=0,LED11B=0,LED12B=0;delay_ms(10);break;//7


        }
}
}

程序运行之后数码管完全没反应。。。。开发板STM32F103RC,,,,求大佬解决急用!!!!万分感谢!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
正点原子
1楼-- · 2019-07-20 17:15
拆分问题,一点点解决。
正点原子
2楼-- · 2019-07-20 22:51
 精彩回答 2  元偷偷看……
nifeng
3楼-- · 2019-07-21 02:40
正点原子 发表于 2017-7-22 23:33
拆分问题,一点点解决。

......知道问题在哪,我就不来问了。。。。。。。。。。。。。。。。。。。。。。
abin666
4楼-- · 2019-07-21 06:01
。。。。。。。你这个不是有例程吗 醉了
李奇峰和周周
5楼-- · 2019-07-21 09:17
 精彩回答 2  元偷偷看……
wlq19911021
6楼-- · 2019-07-21 09:38
STM32 的 矩阵键 盘跟51 不一样;
原理没工夫跟你说;
发一个只查两次的, 4X4矩阵键盘给你, 几百年前写的,  综合了STM32 无法像51 一样使用 矩阵键盘的问题;
\;
注: 键盘不能有任何较强 的 虚短 , 漏电的 情况;

一周热门 更多>