本周扩展了一下STM32的按键个数。
矩阵键盘原理:通过六个引脚分别控制3*3矩阵键盘的三个行和三个列
实现:分别给按键标号1-9,按下按键后,通过串口输出按键的标号即可。
以下为代码实现:

分两次扫描计算出最终的按键号

key.c文件
#include "key.h"
#include "delay.h"
#include "sys.h"
//按键初始化函数 //PB5-7设置成输入  PB8-10设置成输出
void KEY_Init1(void)
{RCC->APB2ENR|=1<<3;     //使能PORTB时钟JTAG_Set(SWD_ENABLE); //关闭JTAG,开启SWDGPIOB->CRL&=0X000FFFFF;   //PB5-7设置成输入      GPIOB->CRL|=0X88800000;GPIOB->CRH&=0XFFFFF000;    //PB8-10设置成输出     GPIOB->CRH|=0X00000333;
}
void KEY_Init2(void)
{GPIOB->CRL&=0X000FFFFF;    //PB5-7设置成输出      GPIOB->CRL|=0X33300000;GPIOB->CRH&=0XFFFFF000;    //PB8-10设置成输入     GPIOB->CRH|=0X00000888;
}//按键扫描函数
//默认优先级行 列为1 2 3
u8 KEY_Scan(u8 mode)
{   u8 l=0,h=0;static u8 key_con=1;    //按键按松开标志if(mode) key_con=1;     //支持连按KEY_ROW_out1=0;         //行输出置低KEY_ROW_out2=0;KEY_ROW_out3=0;KEY_Init1();KEY_ROL_out1=1;          //列输出置高KEY_ROL_out2=1;KEY_ROL_out3=1;if(key_con&&(KEY_ROW_in1==1||KEY_ROW_in2==1||KEY_ROW_in3==1)) //检测按下的按键所在行{delay_ms(10);key_con=0;if(KEY_ROW_in1==1)   h=1;                                   //返回行值else if(KEY_ROW_in2==1)   h=2;else if(KEY_ROW_in3==1)   h=3;}else if(KEY_ROW_in1==0&&KEY_ROW_in2==0&&KEY_ROW_in3==0)       //无按键按下{key_con=1;                                                   return 0;}KEY_ROL_out1=0;                                               //二次扫描 列输出置低KEY_ROL_out2=0;KEY_ROL_out3=0;KEY_Init2();KEY_ROW_out1=1;                                               //行输出置高KEY_ROW_out2=1;KEY_ROW_out3=1;if(KEY_ROL_in1==1||KEY_ROL_in2==1||KEY_ROL_in3==1)            //检测按下的按键所在列{delay_ms(10);if(KEY_ROL_in1==1)   l=(h-1)*3+1;else if(KEY_ROL_in2==1)   l=(h-1)*3+2;else if(KEY_ROL_in3==1)   l=(h-1)*3+3;}return l;
}
key.h文件
#ifndef __KEY_H
#define __KEY_H
#include "sys.h"  #define KEY_ROW_in1  PBin(5)
#define KEY_ROW_in2  PBin(6)
#define KEY_ROW_in3  PBin(7)
#define KEY_ROL_out1 PBout(8)
#define KEY_ROL_out2 PBout(9)
#define KEY_ROL_out3 PBout(10)#define KEY_ROW_out1 PBout(5)
#define KEY_ROW_out2 PBout(6)
#define KEY_ROW_out3 PBout(7)
#define KEY_ROL_in1  PBin(8)
#define KEY_ROL_in2  PBin(9)
#define KEY_ROL_in3  PBin(10)void KEY_Init1(void);      //IO初始化
void KEY_Init2(void);
u8 KEY_Scan(u8 mode);#endif
main.c文件
#include "delay.h"
#include "led.h"
int main(void)
{       u8 key=0;  Stm32_Clock_Init(9);    //系统时钟设置delay_init(72);         //延时初始化//LED_Init();                //初始化与LED连接的硬件接口uart_init(72,9600);KEY_Init1();while(1){ key=KEY_Scan(0);if(key!=0){printf("%d\r\n",key);}key=0;delay_ms(100);}        }    

3*3矩阵键盘的实现相关推荐

  1. 4*4按键扫描程序c语言,【资料】单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...

    ;4X4矩阵键盘程序.主要原理为扫描键盘矩阵时,每次只有一行电平拉低.在逐次扫描拉低的这些行的同时,去读那些列的电平. ;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位 ...

  2. 单片机入门-矩阵键盘控制数码管显示

    任务简述:通过按下4X4矩阵键盘实现数码管对应显示数字 实现方式:通过行列分接法,可以节省使用单片机的I/O口,扫描矩阵键盘是否有按下,判断P2端口得到的值. protues 硬件系统 单片机晶振复位 ...

  3. 4x4矩阵键盘工作原理及扫描程序_4X4矩形键盘

    介绍 什么是矩阵键盘 矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4X4和 ...

  4. PIC16F877矩阵键盘的识别

    原文地址:http://blog.sina.com.cn/s/blog_4a3946360100mwqh.html 关于矩阵键盘的识别方法在51矩阵键盘识别中已经说过,现在要说的是PIC单片机与51单 ...

  5. 矩阵键盘程序_独立按键与矩阵按键

    一.独立按键原理 按键在闭合和断开时,触点会存在抖动现象 硬件消抖电路 独立按键控制程 二.独立按键控制程序 #include "reg52.h" typedef unsigned ...

  6. vba循环通过键盘某个按键按下退出循环_51单片机按键检测--独立按键与矩阵键盘...

    按键可以说是51单片机项目开发的一个重要组件了,它是作为51单片机IO口输入的一种重要方式.我们可以通过按键控制单片机执行相应的程序,得到我们想要得效果.51单片机的按键输入主要有两种,一种是独立按键 ...

  7. c51单片机矩阵键盘1602计算器_基于51单片机矩阵键盘的简易计算器制作

    1. 运算过程.符号公式实时显示在显示屏上(I2C 1602). 2. 自带三角函数.开根号.平方运算. 3. 计算得出的结果可设置保存并用以下一次计算. 4. 所有运算结果精确到至少小数点后两位. ...

  8. 51单片机独立键盘和矩阵键盘

    独立键盘代码: #include<reg52.h> #include<intrins.h>#define uint unsigned int #define uchar uns ...

  9. c语言键盘控制数码管显示,3*4矩阵键盘控制4位数码管显示的C程序

    这个很简单 ;******************************************************************************** ;*  标题:  伟纳电 ...

  10. 【51单片机快速入门指南】2.3:GPIO读取矩阵键盘 8个IO读16键

    目录 硬知识 矩阵键盘介绍 测试程序 Key_Board.c Key_Board.h main.c 实验现象 普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK ...

最新文章

  1. Android10.0系统启动之Launcher(桌面)启动流程-[Android取经之路]
  2. 江苏省计算机一级考试知识点总结,江苏省计算机一级考试注意要点1
  3. 数组、结构体和共用体的长度计算?
  4. 苹果发布被拒绝的种种惨剧
  5. matlab gm 1 1,MATLAB 如何用GM(1,1)做预测?请大神帮忙!
  6. PSD分层模板|电商促销海报设计技巧
  7. php 到精通 书,PHP从入门到精通——读书笔记(第20章:Zend Framwork框架)
  8. Visual Studio Code(VS Code)与Git Source Control集成
  9. (二)匈牙利算法简介
  10. Oauth2认证图解
  11. lvm扩容-缩减磁盘
  12. 智能眼镜的两种显示方式
  13. 利用python提取企查查企业的工商基本信息
  14. 团体程序设计天梯赛-练习集-L1-031. 到底是不是太胖了
  15. MySql按中文姓名排序
  16. qt学习总结之探索Qt的安装目录结构
  17. 百度大脑驾驶证识别使用攻略
  18. u深度制作linux启动盘制作工具,U深度U盘启动盘制作工具怎么操作?U深度U盘启动盘制作工具使用...
  19. 基于51单片机的温度监测控制系统仿真程序原理图设计
  20. 在机顶盒上被移除adb后恢复的办法

热门文章

  1. 文件系统之格式化与挂载
  2. 计算机体系结构的一些总结
  3. hdu 4915 Parenthese sequence(贪心,模拟)
  4. 求一维数组中的最大数c语言,C语言 求一维数组中最大值的位置
  5. 室内的家具甲醛超标,新房专业除甲醛的方法大全
  6. BeautifulSoup的soup.find_all()与 soup.select()赏析
  7. 【机器学习线性代数】05 封闭小世界:向量空间及其子空间
  8. LM3S9B96开发套件Read Me First1
  9. 微信小程序数据包教程抓取,看完就是学会
  10. (23)固定翼架构概述