硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5626|回复: 1
收起左侧

[有问必答] 写了一个矩阵按键程序,为什么不对,求大神

[复制链接]

10

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2015-11-23 10:51:15 | 显示全部楼层 |阅读模式
按键初始化程序:
void KEY_Init(void)
{
   GPIO_InitTypeDef  GPIO_InitStructure;
     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_InitStructure.GPIO_Speed= GPIO_Speed_100MHz;
   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4;
   GPIO_Init(GPIOA,&GPIO_InitStructure);

   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
   GPIO_InitStructure.GPIO_Speed= GPIO_Speed_100MHz;
   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
   GPIO_Init(GPIOA,&GPIO_InitStructure);  
}
按键扫描程序:

int KEY_Scan(void)
{
u8 KeyVal;
GPIO_Write(GPIOA,(GPIOA->ODR & 0xffec | 0x0013));
if((GPIOA->IDR & 0x0013)==0x0000)
    return 0;
else
{
  Delay(0x2710);
   if((GPIOA->IDR & 0x00e0)==0x0000)
   return 0;
   }
   GPIO_Write(GPIOA,(GPIOA->ODR & 0xffec | 0x0001));
    switch(GPIOA->IDR & 0x00e0)
      {
         case 0x1000: KeyVal=1; break;
         case 0x2000: KeyVal=4; break;   
         case 0x4000: KeyVal=7; break;  
      }
    GPIO_Write(GPIOA,(GPIOA->ODR & 0xffec | 0x0002));
     switch(GPIOA->IDR & 0x00e0)
      {
         case 0x1000: KeyVal=2; break;
         case 0x2000: KeyVal=5; break;   
         case 0x4000: KeyVal=8; break;  
      }
    GPIO_Write(GPIOA,(GPIOA->ODR & 0xffec | 0x0010));
    switch(GPIOA->IDR & 0x00e0)
     {
         case 0x1000: KeyVal=3; break;
         case 0x2000: KeyVal=6; break;   
         case 0x4000: KeyVal=9; break;  
        }

    return KeyVal;
    }
主函数:

while(1)
    {
        key=KEY_Scan();  
            switch(key)
            {
                case 1:
                       GPIO_SetBits(GPIOF, GPIO_Pin_6);
                       break;
                case 4:
                       GPIO_SetBits(GPIOF, GPIO_Pin_6);
                       break;
                case 7:
                       GPIO_SetBits(GPIOF, GPIO_Pin_6);
                       break;

    }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2015-11-23 11:16:29 | 显示全部楼层
你的这个矩阵键盘原理图发个截图看下。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 20:31 , Processed in 0.222902 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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