OpenEdv-开源电子网

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

矩阵键盘扫描问题!!

[复制链接]

11

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
490
金钱
490
注册时间
2017-10-29
在线时间
150 小时
发表于 2018-1-22 15:40:00 | 显示全部楼层 |阅读模式
#include "aj.h"


//GPIO
void GPIO_Configuration(void)  
{  
GPIO_InitTypeDef GPIO_InitStructuress;  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
       
GPIO_InitStructuress.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructuress.GPIO_Mode = GPIO_Mode_Out_PP ;                                               
GPIO_InitStructuress.GPIO_Speed = GPIO_Speed_10MHz;                                                   
GPIO_Init(GPIOA, &GPIO_InitStructuress);  
       
GPIO_InitStructuress.GPIO_Pin =GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructuress.GPIO_Mode =GPIO_Mode_IPD;  
GPIO_InitStructuress.GPIO_Speed = GPIO_Speed_10MHz;  
GPIO_Init(GPIOA, &GPIO_InitStructuress);

GPIO_SetBits( GPIOA,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);  
GPIO_ResetBits( GPIOA,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);  
}  

u8 Keyspress(void)  
{
   u8 KeyValue;   
   u8 f=0;   
   GPIO_Configuration();       
   if((GPIO_ReadInputData(GPIOA)&0xff)!=0x0f)   
{   
   delay_ms(20);  
if((GPIO_ReadInputData(GPIOA)&0xff)!=0x0f)   
{   
   GPIO_SetBits(GPIOA,GPIO_Pin_8);   

   GPIO_ResetBits(GPIOA,GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);  

   switch(GPIO_ReadInputData(GPIOA)&0xff)  
              {   
                case 0x11:KeyValue=12;break;   

                case 0x21:KeyValue=13;break;   

                case 0x41:KeyValue=14;break;   

                case 0x81:KeyValue=15;break;  
               }   
                GPIO_SetBits(GPIOA,GPIO_Pin_9);  

                GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_11);  

                 switch(GPIO_ReadInputData(GPIOA)&0xff)  
               {   
                 case 0x12:KeyValue=8;break;  

                 case 0x22:KeyValue=9;break;   

                 case 0x42:KeyValue=10;break;  

                 case 0x82:KeyValue=11;break;   

                }   
                 GPIO_SetBits(GPIOA,GPIO_Pin_10);   
                 GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_11);  

                  switch(GPIO_ReadInputData(GPIOA)&0xff)  
                   {   
                    case 0x14:KeyValue=4;break;  

                    case 0x24:KeyValue=5;break;  

                    case 0x44:KeyValue=6;break;  

                    case 0x84:KeyValue=7;break;  
                   }   
                    GPIO_SetBits(GPIOA,GPIO_Pin_11);   

                    GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);  

                   switch(GPIO_ReadInputData(GPIOA)&0xff)  
                    {  
                     case 0x18:KeyValue=0;break;  

                     case 0x28:KeyValue=1;break;   

                     case 0x48:KeyValue=2;break;  

                     case 0x88:KeyValue=3;break;  
                     }   
                   GPIO_SetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10 |GPIO_Pin_11);   
                   GPIO_ResetBits(GPIOA, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |GPIO_Pin_15);  
                   while((GPIO_ReadInputData(GPIOA)&0xff)==0x0f);  
                   switch(KeyValue)   
                     {   
                        case 0:  f=0;break;  
                        case 1:  f=4;break;  
                        case 2:  f=8;break;  
                        case 3:  f=12;break;  
                        case 4:  f=1;break;  
                        case 5:  f=5;break;  
                        case 6:  f=9;break;  
                        case 7:  f=13;break;  
                        case 8:  f=2;break;  
                        case 9:  f=6;break;  
                        case 10: f=10;break;
                                                                                          case 11: f=14;break;
                                                                                          case 12: f=3;break;
                                                                                          case 13: f=7;break;
                                                                                          case 14: f=11;break;
                                                                                          case 15: f=15;break;
                                                                                         

                    }  

            }   
      }
  return f;
  }   
这个程序大侠帮看下哪里出错了,下载进去按键没反应。

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

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-22 16:13:05 | 显示全部楼层
回复 支持 反对

使用道具 举报

5

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2016-10-20
在线时间
64 小时
发表于 2018-1-22 16:22:56 | 显示全部楼层
先找电路看看电路有问题没,电路没有加点看看引脚受不受控
回复 支持 反对

使用道具 举报

10

主题

232

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2288
金钱
2288
注册时间
2012-8-24
在线时间
247 小时
发表于 2018-1-22 20:19:12 | 显示全部楼层
楼主,你先检查硬件电路,如果硬件没有问题通过软件仿真来判断程序的问题出在哪儿
单片机技术交流请加127034610
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 04:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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