OpenEdv-开源电子网

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

关于stm32 4*4矩阵键盘程序,编译通过,就是数码管总显示零、、、菜鸟求指导

[复制链接]

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
发表于 2013-3-21 20:06:45 | 显示全部楼层 |阅读模式

//下面是 矩阵键盘扫描和获取键值的相关程序


#include <stm32f10x_lib.h>                 //  A0~PA3行控制线
#include "delay.h"         //  A4~PA7列控制线
#include "Matrix.H"         //  包含矩阵键盘头文件

u8 Key_Tab[4][4]=                            //键盘编码表
{
  {0,1,2,3},  
  {4,5,6,7},  
  {8,9,10,11},  
  {12,13,14,15}  
};


u8 Get_KeyValue(void)         //使用线反转法,没有得到键值返回0,否则返回相应行列的键值
{
  
  u8 i=5,j=5;
  u16 temp1,temp2;
  
  RCC->APB2ENR|=1<<3;               //使能PORTB时钟
  // RCC->APB2ENR|=1<<0;               //开启辅助时钟
  
  GPIOB->CRL&=0XFFFF0000; 
  GPIOB->CRL|=0X00003333;             //PA0~PA3 推挽输出    
  
  GPIOB->CRL&=0X0000FFFF;           //PA4~PA7 输入
  GPIOB->CRL|=0X88880000;        //PA4~PA7默认上拉

  GPIOB->ODR&=0xf0 ; //PA0~PA3置0
  if(((GPIOB->IDR >> 4) & 0X0F)<0x0f)
  {   
        delay_ms(5);                 //按键消抖
        if((GPIOB->IDR >>4 & 0x0f)<0x0f)
{
                   temp1=(GPIOB->IDR >>4 & 0x0f);
          switch(temp1)
       {
         case 0x0e:j=0;break;
         case 0x0d:j=1;break; 
    case 0x0b:j=2;break;
    case 0x07:j=3;break;
          default:break;
  }
}
    }
  GPIOB->CRL&=0X0000FFFF; 
  GPIOB->CRL|=0X33330000;   //PA4~PA7 推挽输出    
   
  GPIOB->CRL&=0XFFFF0000;   //PA0~PA3 输入
  GPIOB->CRL|=0X00008888; //PA0~PA4 默认下拉

  GPIOB->ODR&=0x0f;             //PA4~PA7置0

  if((GPIOB->IDR & 0x0f)<0x0f)
{
       temp2=(GPIOB->IDR & 0x0f);  
    
  switch(temp2)
  {
   case 0x0e:i=0;break;
     case 0x0d:i=1;break;
   case 0x0b:i=2;break;
   case 0x07:i=3;break;
   default:break;
  }
   }
  if((i==5)||(j==5))
       return 0;
  else
       return (Key_Tab[j]);
}



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

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
 楼主| 发表于 2013-3-21 20:13:05 | 显示全部楼层
是我的IO口设置有问题吗,之前我还把IO口配置成浮空输入了,但还是没有检测到有按键按下
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-21 21:37:20 | 显示全部楼层
要把JTAG关了先(PB3和PB4),IO不需要设置为浮空输入,设置为上下拉输入,带上拉,就可以了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
 楼主| 发表于 2013-3-22 11:19:48 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子大哥,我现在的PA4~PA7配置的应该是上/下拉的模式吧,
  GPIOB->CRL&=0XFFFF0000; 
  GPIOB->CRL|=0X00003333;              //PA0~PA3 推挽输出     
  
  GPIOB->CRL&=0X0000FFFF;            //PA4~PA7 输入
  GPIOB->CRL|=0X88880000;                 //PA4~PA7默认上拉

  GPIOB->ODR&=0xf0 ;         //PA0~PA3下拉置0,PA4~PA7上拉置1


就算是我没有关闭JATG,也应该有一部分键盘应该被检测到啊
回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
 楼主| 发表于 2013-3-22 11:20:18 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子大哥,我现在的PA4~PA7配置的应该是上/下拉的模式吧,
  GPIOB->CRL&=0XFFFF0000; 
  GPIOB->CRL|=0X00003333;              //PA0~PA3 推挽输出     
  
  GPIOB->CRL&=0X0000FFFF;            //PA4~PA7 输入
  GPIOB->CRL|=0X88880000;          //PA4~PA7默认上拉

  GPIOB->ODR&=0xf0 ;                 //PA0~PA3下拉置0,PA4~PA7上拉置1


就算是我没有关闭JATG,也应该有一部分键盘应该被检测到啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-22 11:21:09 | 显示全部楼层
GPIOB->ODR&=0xf0 ;          //PA0~PA3下拉置0,PA4~PA7上拉置1 
错!
改为:
GPIOB->ODR=0xf0 ;          //PA0~PA3下拉置0,PA4~PA7上拉置1
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-22 11:24:26 | 显示全部楼层
GPIOB->ODR&=0xf0 ;  
改为
GPIOB->ODR=0xf0 ;
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
 楼主| 发表于 2013-3-22 11:39:56 | 显示全部楼层
谢谢原子大哥,我明白去掉“与”的意图了,可是还是无法检测到键盘,我已经检查过了硬件没有问题,估计还是程序的问题,我这个只是在您的例子“ALIENTEK MINISTM32 实验2 按键输入”的基础上改的。我做这个程序还有其他什么需要特别注意的地方么?
回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
 楼主| 发表于 2013-3-22 11:41:45 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
谢谢原子大哥,我明白去掉“与”的意图了,可是还是无法检测到键盘,我已经检查过了硬件没有问题,估计还是程序的问题,我这个只是在您的例子“ALIENTEK MINISTM32 实验2 按键输入”的基础上改的。我做这个程序还有其他什么需要特别注意的地方么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-22 14:29:11 | 显示全部楼层
看上去没啥问题了,软件仿真,测试一下,看看问题出在哪里吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
 楼主| 发表于 2013-3-22 15:21:34 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
谢了原子哥,大好人啊
回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
 楼主| 发表于 2013-3-26 21:49:57 | 显示全部楼层
原子大哥,用软件仿真时 GPIO->IDR读出的数值始终是0。如下图



回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
 楼主| 发表于 2013-3-26 21:52:34 | 显示全部楼层
回复【7楼】正点原子:原子大哥,问题在十一楼了
---------------------------------
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-26 22:03:11 | 显示全部楼层
回复【12楼】ccz303:
---------------------------------
你要在下方的PIN小框框内勾上,才可以改变IDR的值。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
 楼主| 发表于 2013-3-27 10:09:25 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
果然啊,顺便问一下那个LCKK是干什么用的??
回复 支持 反对

使用道具 举报

13

主题

63

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
326
金钱
326
注册时间
2013-3-15
在线时间
6 小时
发表于 2013-4-25 20:23:21 | 显示全部楼层
能共享下代码吗
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-25 20:36:30 | 显示全部楼层
回复【15楼】ccz303:
---------------------------------
看<stm32参考手册>
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

50

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
492
金钱
492
注册时间
2013-2-2
在线时间
0 小时
发表于 2013-7-31 21:14:26 | 显示全部楼层
回复【15楼】ccz303:
---------------------------------
楼主,你的矩阵键盘能用了吗
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2013-11-27
在线时间
12 小时
发表于 2014-2-13 20:59:05 | 显示全部楼层
亲,你的代码能用了吗,能用的话发一份给我吧,1078452503@qq.com 多谢了
回复 支持 反对

使用道具 举报

32

主题

153

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2014-11-5
在线时间
0 小时
发表于 2014-12-14 17:54:55 | 显示全部楼层
回复【15楼】ccz303:
---------------------------------
大神,矩阵键盘给我发一份,感激不尽哇。1126626497@qq.com
酱油团队--
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-12-4
在线时间
0 小时
发表于 2015-4-27 17:38:00 | 显示全部楼层
大神,矩阵键盘给我发一份,感激不尽哇。2287039365@qq.com
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-5-13
在线时间
1 小时
发表于 2015-12-16 09:33:05 | 显示全部楼层
回复【4楼】ccz303:
---------------------------------
大神,矩阵键盘给我发一份,感激不尽哇。594665869@qq.com
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2015-8-21
在线时间
13 小时
发表于 2016-4-11 14:55:50 | 显示全部楼层
同求代码
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-11 06:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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