OpenEdv-开源电子网

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

STM32矩阵键盘扫描程序,求高人点拨

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-11-9
在线时间
0 小时
发表于 2012-11-9 10:19:45 | 显示全部楼层 |阅读模式
 STM32,PA4~PA7为矩阵键盘输出口,PA8~PA11为矩阵键盘输入口。PA0~PA3为其他输出。现在是按键按下,GPIO_IDR中的数据为0x00F0,所以按键不能识别,按下时用万用表测键盘输入端口为高电平,请高人指点下。代码如下。
GPIO端口配置
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

   /*配置矩阵键盘输出口*/
  GPIO_InitStructure.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; //选择IO端口
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                          //时钟速度为50M
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                          //端口模式为推拉输出方式
  GPIO_Init(GPIOA, &GPIO_InitStructure);                                          //用以上几个参数初始化PA口
   
  /* 配置矩阵键盘输入口 */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;                  //端口模式为下拉输入方式
  GPIO_Init(GPIOA, &GPIO_InitStructure);         
}



键盘查找代码
int keyscan(void)
{
        int KeyVal=0;
        GPIO_Write(GPIOA,(GPIOA->ODR&0xFF0F|0x00F0));
        Delay(1);    //延时等待端口电平稳定
        if((GPIOA->IDR&0x0F00)==0x0000)  //如果PA8到PA11全为0,则没有键按下。返回值为-1.
                return -1;
        else
        {       
                Delay(10);    //延时10ms去抖动。
                if((GPIOA->IDR&0x0f00)==0x0000)  //如果,延时10ms后,PA8到PA11又全为0,则刚才引脚的电位变化是抖动产生的.
                        return -1;
        }

GPIO_Write(GPIOA,(GPIOA->ODR & 0xff0f | 0x0010));        //让PA4输出高电平,查找对应键码。
Delay(1);       
switch(GPIOA->IDR & 0x0f00)       
               {.......}
.....
}

请帮我看下是否哪里设置有问题。多谢。
我后来直接把PA4和PA8短接,IDR中还是没有PA8的输入信号。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-9 11:47:36 | 显示全部楼层
检查PA4~PA7的输出是否正常。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 1 反对 0

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-11-9
在线时间
0 小时
 楼主| 发表于 2012-11-9 15:22:28 | 显示全部楼层
呵呵,问题找出来了,是Jlink的原因,不是程序的原因。呵呵。。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 07:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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