OpenEdv-开源电子网

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

矩阵键盘, 发现很多坛友在问按键的问题, 就来发个

[复制链接]

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-9-13 14:41:37 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 wlq390934605 于 2018-9-13 14:43 编辑

矩阵键盘,   发现很多坛友在问按键的问题, 就来发个;;
平台STM32 F103, 普中HC6800EM3, 普中最新F103开发板;
;
首先说明矩阵按键原理: 矩阵键盘就像踩泥坛, 一踩一个坑, 每踩必有坑;
;
使用要求: 矩阵键盘不宜, 外接, 内接 任何上, 下拉电阻, 电容, 线路不宜过长(5m, 10m), 触点不宜过大(容性), 不宜过小(针眼那么大), 更不能有漏电流;
;
;
======================================================;
======================================================;
#include "stm32f10x.h"
#include "KEY_Driver.h"



/*******************************************************/
/****delay_key(专用)****/        

void delay_key(u16 num)
  {
  for(num;num>0;num--);
  }
/*******************************************************/
/****KEY_SCAN****/

u8 KEY_Scan(void)
  {
  u8 KEY_SData = 0x00;

  GPIOB -> CRL = 0x33333333;GPIOB -> ODR = 0xffff;        //GPIOB  复位引脚; 并恢复原状;

  GPIOB -> ODR = 0xf0ff;delay_key(300);                  //置位,等待引脚电荷分布稳定

  GPIOB -> CRH = 0x33338888;          //PB0-PB3 推挽_50M(0x3); PB4-PB7 浮空_输入(0x4);

//  RCC -> APB2RSTR |= 0x0008;RCC -> APB2RSTR &= ~0x0008;   //GPIOB  复位    清除复位;                   (普中方式无法通过测试)

//  GPIOB -> ODR = 0xf0ff;delay_key(200);             //置位,等待状态判定;

  KEY_SData = (((GPIOB->IDR)>>8)&0x0f);

  GPIOB -> CRL = 0x33333333;GPIOB -> ODR = 0xffff;        //GPIOB  复位引脚; 并恢复原状;
/*****************/                                                                                          
  GPIOB -> ODR = 0x0fff;delay_key(300);                 //置位,等待引脚电荷分布稳定

  GPIOB -> CRH = 0x44443333;        //PB0-PB3 浮空输入(0x4); PB4-PB7 推挽_50M(0x3);

//  RCC -> APB2RSTR |= 0x0008;RCC -> APB2RSTR &= ~0x0008;   //GPIOB 复位     清除复位;                        (普中方式无法通过测试)

//  GPIOB -> ODR = 0x0fff;delay_key(200);           //置位,等待状态判定;

  KEY_SData |= (((GPIOB->IDR)>>8)&0xf0);

  GPIOB -> CRL = 0x33333333;GPIOB -> ODR = 0xffff;        //GPIOB  复位引脚; 并恢复原状;

  return KEY_SData;
  }
/*******************************************************/
/***KEY_DOWN***/

u8 KEY_DOWN(void)
  {
  u8 KEY_Status=0x00;

  KEY_Status = KEY_Scan();

  if(KEY_Status==0x00);

  return KEY_Status;
  }
/********************************************************/
/****KEY_****/









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

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-9-13 14:42:01 | 显示全部楼层
再发个rar 版的

KEY_Driver.zip

1.13 KB, 下载次数: 62

回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-9-13 14:47:09 | 显示全部楼层
这里说明矩阵键盘有什么用: 4x4= 16(8_IO); 1x16=16(16_IO);
;
8x8=64(16_IO); 1x64=64(64_IO);
;
以此类推, 用处很大;
回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
 楼主| 发表于 2018-9-13 14:49:28 | 显示全部楼层
本帖最后由 wlq390934605 于 2018-9-13 14:50 编辑

然后对扫描方式说明: 采用特殊交叉变换扫描方式, 只需测量两次就能出状态, 总体上只比正常多0.5个扫描时间;  且能所有按键状态同时扫出, 可以用在 nes, sms游戏机上;
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 17:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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