文章目录

  • 1、单片机按键识别方法
  • 2、按键消抖的方法
  • 3、矩形键盘原理

1、单片机按键识别方法

单片机硬件按键有接电源和接地两种接发,我们通过程序判断当前引脚电平的高低来判断按键按下/放开。

程序略…

2、按键消抖的方法

我们知道机械按键在按下和弹起时,会因为产生抖动,出现高低电平快速变化,因此我们必须进行消抖处理。

常用的消抖方法有两种:电容消抖和软件消抖
代码例程:

if(switch_1 == 0)//判断switch_1按键按下时
{Delay_ms(30);//延时消抖if(switch_1 == 0)//再次判断switch_1按键按下{while(!switch_1);//松手检测//请将按键功能写在下面}
}

电容消抖:利用电容的放电延时,采用并联电容法,使两端电压平缓变化,直至电容充放电到达一定电压阀值时,单片机才能读取到电平变化。

软件消抖:写一段延时毫秒级延时函数,在按键按下后延时一段时间再次判断按键电平。但是软件消抖是以CPU资源为代价,会降低程序的执行效率,所以我们在做大型项目开发时,要尽量避免使用延时消抖。

3、矩形键盘原理


矩阵键盘一共有4行和4列一共16个按键组成,确定矩阵键盘上哪一个按键被按下可以采用列扫描和行扫描。

列扫描时先把接在列上面的IO拉高,接在行的所以IO置低,当其中有一列任何一个按键按下,那么整条都会被拉低。


我写好了一段矩阵键盘例程,封装成一个函数库。日后直接调用和工程参考,例程主要功能是当矩阵键盘任何值按下时,向串口发送当前按下矩阵键盘的值,例程带有矩阵键盘松手检测功能。

#include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned char/*常量宏定义*/
#define RECTANGUAR_KRYBOARD_IO P3//矩阵键盘IO口//串口初始化,波特率9600
void InitUART(void)
{TMOD = 0x20;//设置定时器1,工作方式2,8位自动重载SCON = 0x40;//设置串口工作方式1TH1 = 0xFD;//波特率设置为9600TL1 = TH1;PCON = 0x00;//波特率不加倍EA = 1;//开总中断ES = 1;//允许串联1中断TR1 = 1;//启动定时器T1
}//1ms延时函数
void Delay1ms(void)     //@11.0592MHz
{unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);
}//毫秒延时函数
void delay_ms(uint time)
{uint i;for(i=0; i<time; i++){Delay1ms();}
}//向串口发送一个字符
void putchar(char ch)
{SBUF = ch;while(!TI);TI = 0;
}//向串口发送一段字符串
void prints(char *s)
{while(*s != '\0')//发送字符串,直到遇到0才结束{SBUF = *s++;while(!TI);TI = 0;}
}/******************************************************
函数名称:RectanguarKeyboard_Scanning(void)
函数输入:无
函数返回:unsigned int
函数说明:4*4矩阵键盘与独立键盘扫描调用此函数,需添加RECTANGUAR_KRYBOARD_IO宏定义
*******************************************************/
uint RectanguarKeyboard_Scanning(void)
{uint num;//4*4矩阵键盘扫描RECTANGUAR_KRYBOARD_IO = 0xf0;//列扫描if(RECTANGUAR_KRYBOARD_IO != 0xf0)//判断按键是否按下{delay_ms(5);//软件消抖if(RECTANGUAR_KRYBOARD_IO != 0xf0){switch(RECTANGUAR_KRYBOARD_IO)//判断那一列被按下{case 0xe0:    num=1; break;//第一列被按下case 0xd0:    num=2; break;//第二列被按下case 0xb0:    num=3; break;//第三列被按下case 0x70:    num=4; break;//第四列被按下}P3 = 0x0f;//行扫描switch(RECTANGUAR_KRYBOARD_IO){case 0x0e:  while(RECTANGUAR_KRYBOARD_IO != 0x0f); return num;                   //第一行被按下    case 0x0d:  while(RECTANGUAR_KRYBOARD_IO != 0x0f); num = num + 4; return num;    //第二行被按下case 0x0b:  while(RECTANGUAR_KRYBOARD_IO != 0x0f); num = num + 8; return num;    //第三行被按下case 0x07:  while(RECTANGUAR_KRYBOARD_IO != 0x0f); num = num + 12; return num;   //第四行被按下}}}return 0;
}void main(void)
{char str[2];uchar temp = 0;InitUART();//初始化串口while(1){temp = RectanguarKeyboard_Scanning();if(temp != 0){if(temp < 10 && temp != 0){temp = temp + '0';putchar(temp);}else if(temp >= 10 && temp != 0){str[0] = temp / 10 + '0';str[1] = temp % 10 + '0';prints(str);}temp = 0;}}
}

【单片机基础】按键与矩阵键盘识别相关推荐

  1. 蓝桥杯国信长天单片机--独立按键和矩阵键盘模块(七)

    独立按键模块 1-2短接实现矩阵按键:2-3短接实现独立按键. 案例: 独立按键,S6,打开所有LED ,S7,关闭所有LED.S4 ,打开蜂鸣器,S5,关闭蜂鸣器 #include "re ...

  2. 单片机实例14——4×4矩阵式键盘识别技术(硬件电路图+汇编程序+C语言程序)

    14. 4×4矩阵式键盘识别技术 1. 实验任务 如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线:在数码管上显示每个按键 ...

  3. 蓝桥杯单片机 独立按键与矩阵按键

    文章目录 前言 一.蓝桥杯按键原理图 二.独立按键与矩阵按键处理思路 1.独立按键 2.矩阵按键 代码实现 总结 前言 按键设计一般分为两种:独立按键和矩阵键盘.按键数量较少的用前者,按键数量较多的用 ...

  4. 独立按键和矩阵按键c语言,单片机独立按键与矩阵按键原理图

    当前位置:电工之家 > 电工知识 > 单片机 > 正文 单片机独立按键与矩阵按键原理图 时间:2017-02-22 12:40 来源:电工之家 单片机独立按键与矩阵按键原理图 独立按 ...

  5. 【蓝桥杯练习-独立按键和矩阵键盘】

    独立按键和矩阵键盘练习 内容来自b站小蜜蜂老师 小蜜蜂老师 practise 1 一.原理图 二.结构分析 从上面电路图可以看出当J5跳帽接为2 3时s7 s6 s5 s4为独立键盘 此时接地端gnd ...

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

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

  7. 51单片机设计16个按键的矩阵键盘

    首先如图所示导入各个元器件,并连线. 因为P3口连接着矩阵键盘,所以上来要先付个初值,从高位到低位H0,H1,H2,H3,L0,L1,L2,L3的值是11110000,高位全是1,低位全是0,十六进制 ...

  8. 51单片机独立按键和矩阵按键实现

    这里写目录标题 独立按键实验 矩阵按键实验 独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开.我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间( ...

  9. m0单片机io口_51单片机独立按键和矩阵按键实现

    独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开.我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间(注意是距离)距离长的是导通状态,短的是接通状 ...

最新文章

  1. root域名服务器 gtld服务器_购买阿里云域名和空间服务器实操
  2. java中鼠标事件_java中检测鼠标事件动作
  3. 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
  4. c# 获取电脑硬件信息通用查询类[测试通过]
  5. 抓住人工智能红利,百度AI达人养成营带你速成深度学习
  6. 暑假集训-8.05总结
  7. 【Python3网络爬虫开发实战】1.6.1-Flask的安装
  8. hibernate之自定义持久化实现
  9. 客户端向hdfs读写数据流程
  10. 系泊系统 matlab代码,一种应用于系泊系统的设计方法与流程
  11. 支付宝小程序生成二维码
  12. 整蛊小学妹,督促学习的html代码
  13. 1754. 骑士精神
  14. 大数据告诉你,中国今年最火打卡圣地竟然是它!
  15. 程序员必备的21款工具与编程灵感
  16. 利用FRP跨局域网操纵虚拟机集群
  17. 快速串联 RNN / LSTM / Attention / transformer / BERT / GPT
  18. 软件架构详解(附图)
  19. [附源码]Java计算机毕业设计SSM鞍山丘比特房屋租赁管理系统
  20. 计算机变式教学,试论大学公共计算机网络课程变式练习.pdf

热门文章

  1. html基础 vscode写代码
  2. 【转帖】噪声库(noiseX-92)
  3. (152)设计一个或非门之Norgate
  4. 期刊为何发表造假论文?
  5. 捕获鼠标事件-JavaScript入门基础(005)
  6. 论文笔记(Oriented R-CNN,ICCV2021)
  7. 《西瓜书》笔记-第0章-引言
  8. Camtasia Studio 9录制高清、超清视频教程
  9. 【阅读】A Comprehensive Survey on Distributed Training of Graph Neural Networks——翻译
  10. c语言微课ppt嵌套函数,C语言课程中循环嵌套的微课教学设计与思考