【单片机基础】按键与矩阵键盘识别
文章目录
- 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-2短接实现矩阵按键:2-3短接实现独立按键. 案例: 独立按键,S6,打开所有LED ,S7,关闭所有LED.S4 ,打开蜂鸣器,S5,关闭蜂鸣器 #include "re ...
- 单片机实例14——4×4矩阵式键盘识别技术(硬件电路图+汇编程序+C语言程序)
14. 4×4矩阵式键盘识别技术 1. 实验任务 如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线:在数码管上显示每个按键 ...
- 蓝桥杯单片机 独立按键与矩阵按键
文章目录 前言 一.蓝桥杯按键原理图 二.独立按键与矩阵按键处理思路 1.独立按键 2.矩阵按键 代码实现 总结 前言 按键设计一般分为两种:独立按键和矩阵键盘.按键数量较少的用前者,按键数量较多的用 ...
- 独立按键和矩阵按键c语言,单片机独立按键与矩阵按键原理图
当前位置:电工之家 > 电工知识 > 单片机 > 正文 单片机独立按键与矩阵按键原理图 时间:2017-02-22 12:40 来源:电工之家 单片机独立按键与矩阵按键原理图 独立按 ...
- 【蓝桥杯练习-独立按键和矩阵键盘】
独立按键和矩阵键盘练习 内容来自b站小蜜蜂老师 小蜜蜂老师 practise 1 一.原理图 二.结构分析 从上面电路图可以看出当J5跳帽接为2 3时s7 s6 s5 s4为独立键盘 此时接地端gnd ...
- vba循环通过键盘某个按键按下退出循环_51单片机按键检测--独立按键与矩阵键盘...
按键可以说是51单片机项目开发的一个重要组件了,它是作为51单片机IO口输入的一种重要方式.我们可以通过按键控制单片机执行相应的程序,得到我们想要得效果.51单片机的按键输入主要有两种,一种是独立按键 ...
- 51单片机设计16个按键的矩阵键盘
首先如图所示导入各个元器件,并连线. 因为P3口连接着矩阵键盘,所以上来要先付个初值,从高位到低位H0,H1,H2,H3,L0,L1,L2,L3的值是11110000,高位全是1,低位全是0,十六进制 ...
- 51单片机独立按键和矩阵按键实现
这里写目录标题 独立按键实验 矩阵按键实验 独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开.我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间( ...
- m0单片机io口_51单片机独立按键和矩阵按键实现
独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开.我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间(注意是距离)距离长的是导通状态,短的是接通状 ...
最新文章
- root域名服务器 gtld服务器_购买阿里云域名和空间服务器实操
- java中鼠标事件_java中检测鼠标事件动作
- 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
- c# 获取电脑硬件信息通用查询类[测试通过]
- 抓住人工智能红利,百度AI达人养成营带你速成深度学习
- 暑假集训-8.05总结
- 【Python3网络爬虫开发实战】1.6.1-Flask的安装
- hibernate之自定义持久化实现
- 客户端向hdfs读写数据流程
- 系泊系统 matlab代码,一种应用于系泊系统的设计方法与流程
- 支付宝小程序生成二维码
- 整蛊小学妹,督促学习的html代码
- 1754. 骑士精神
- 大数据告诉你,中国今年最火打卡圣地竟然是它!
- 程序员必备的21款工具与编程灵感
- 利用FRP跨局域网操纵虚拟机集群
- 快速串联 RNN / LSTM / Attention / transformer / BERT / GPT
- 软件架构详解(附图)
- [附源码]Java计算机毕业设计SSM鞍山丘比特房屋租赁管理系统
- 计算机变式教学,试论大学公共计算机网络课程变式练习.pdf