按键

  • 一、独立按键:
    • 简介:
    • 消抖:
    • 代码:
  • 二、矩阵键盘 :
    • 行列反转扫描法:
    • 按键对照表:
  • 三、矩阵键盘实验
    • 效果展示:
    • 仿真电路图:
    • 代码:

一、独立按键:

简介:

接触式按键,又叫轻触开关

接触式按键是靠机械的接触来实现开和关。这种接触方式存在接触不稳定的状态,即存在抖动。

该图为理想状态下的按键波形,无抖动

该图为实际中按键波形,存在抖动
一般抖动时间为10~20ms

消抖:

①硬件消抖:
成本高;影响产品集成度,一般不采用。

②软件消抖:
编程实现,不增加硬件成本,不影响产成品集成度。

代码:

void delay(int xms){  //延时函数    x msunsigned int i, j;for(i=0; i<xms; ++i)for(j=0; j<110; ++j);
}void key(){if(key_down==0){  //第一次检测按下delay(20);  //一般延时20ms,进行消抖if(key_down==0){  //第二次检测按下,按键是真正的按下了..   //按键处理.}while(!key_down);  //检测按键是否松开(弹起),按键松开则退出}
}

二、矩阵键盘 :

当按键较少时,可以采用独立按键,
但当需要多个按键时,接独立按键就会占用单片机珍贵的 I/O 资源,所以当需要大量按键时,常采用矩阵键盘。

矩阵键盘的检测方法有很多,本文介绍行列反转扫描法。

行列反转扫描法:

①先进行行扫描
P2 ^0 ~ P2 ^3 置低电平,P2 ^4 ~ P2 ^7置高电平,按键,保存 P0 口状态到 temp1

②再进行列扫描
P2 ^0 ~ P2 ^3 置高电平,P2 ^4 ~ P2 ^7置低电平,按键,保存 P0 口状态到 temp2

③计算
将 temp1 与 temp2 进行或运算,将结果 result 转化为 HEX 数据,在按键表中查询,确定是哪个按键按下


按键对照表:

手算真累!!!


三、矩阵键盘实验

效果展示:

51单片机 矩阵键盘 行列扫描法

仿真电路图:

简略仿真一下,接线粗糙,大神勿喷!!

代码:

#include<reg51.h>typedef unsigned char uchar;
typedef unsigned int uint;uchar code num[16]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x08, 0x03, 0x46, 0x21, 0x06, 0x0E};  // 0~f 字码uchar code key_check[16]={0xEE, 0xDE, 0xBE, 0x7E, 0xED, 0xDD, 0xBD, 0x7D, 0xEB, 0xDB, 0xBB, 0x7B, 0xE7, 0xD7, 0xB7, 0x77};  // 按键检查表void delay(int xms){  // 延时函数uint i, j;for(i=0; i<xms; ++i)for(j=0; j<110; ++j);
}void main(){uchar i, temp, result;P3 = 0xff;  // 未按键时,数码管不显示while(1){P2 = 0xf0;  // 行扫描if(P2 != 0xf0){delay(15);  // 延时消抖if(P2 != 0xf0){temp = P2;P2 = 0x0f;  //列扫描result = temp | P2;  //计算结果,与按键检查表对照for(i=0; i<16; ++i){  // 检查按键表, 找出是哪个按键按下if(result == key_check[i]){break;  // 保留 i 值}}}while(P2==0xf0)    ;P3 = num[i];  // i 值对应 num 字码表的数}}
}

按键(独立按键、矩阵键盘)——附带程序相关推荐

  1. 4x3矩阵键盘扫描法c语言,4X4矩阵键盘扫描程序

    4X4矩阵键盘扫描程序 4X4矩阵键盘扫描: 1. 4根行线的GIO均设为Output,根列线的GIO均设为Input: 2. 4根行线的GIO分别置为0111.1011.1101.1110,读逐一读 ...

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

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

  3. AD按键-矩阵按键-独立按键:

    原理:利用数组分压+AD采集: 优点:一个IO口可以做成多个按键,节省IO口(矩阵键盘在>4时优点才能体现出来):可备用作为AD基准输入. 缺点:不能做成组合按键(或者电阻要精确选择):且离IO ...

  4. 单片机c语言矩阵按键,单片机4×4矩阵键盘设计方案

    描述 1.设计原理 (1)如图14.2所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码管上显示每个按键 & ...

  5. 4x4矩阵键盘扫描c语言程序,单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...

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

  6. 51单片机矩阵键盘C程序

    飞哥语录:别高估关系,别低估人心. 主程序1: void main() {uchar i,j,ki=0;j=0;while(1){i=key();//键盘循环扫描,其值赋给变量数组tableif(i! ...

  7. 单片机4x4矩阵键盘c语言,求一个单片机4X4矩阵键盘扫描程序,C语言的。

    满意答案 lfm630228 2013.05.08 采纳率:50%    等级:12 已帮助:8260人 uchar code KeyCodeTable[]= { 0x11,0x12,0x14,0x1 ...

  8. GPIO 按键及矩阵键盘程序------/* 自己实验确认并总结 */

    新型的按键扫描程序 不过入式处理器上面我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉.我非常坚信这种按键处理办法的便捷和高效,你可以移植 ...

  9. 三行代码按键消抖 独立按键 矩阵按键 长按 短按 双击

    九层妖塔 起于垒土 直接跳转到三行代码 三行代码按键消抖 独立按键 矩阵按键 长按 短按 双击 一.基本理论 0.按键的常见名词:  ①按键抖动  ②按键稳定闭合时间 1.按键的扫描: 2.按键的消抖 ...

  10. 51单片机之按键(独立按键矩阵按键)

    难的东西学不会是因为简单的知识没学好 基础不牢,地动山摇 按键 1.1基础温习 (1)按键的物理结构 (2)单片机引脚有两种状态(I/O)输入[读]或者输出[写] (3)上拉电阻的作用.通过这个电阻把 ...

最新文章

  1. RBAC角色权限设计
  2. html embed详解
  3. 数组树/fenwicktree/Binary Indexed Tree
  4. 第二阶段---python基础
  5. python随机生成中文字符串_利用python3随机生成中文字符的实现方法
  6. 小学五年级就已经开始编程啦吗???
  7. 分布式事务:RocketMQ实现分布式事务原理
  8. 用计算机充手机吗,电脑充电器可以充手机吗
  9. Python学习 第3天 VS与PyCharm使用对比
  10. 201503-2-数字排序
  11. 韦东山《嵌入式Linux应用开发完全手册》配套视频教程
  12. lisp弧度转度分秒_用C语言实现度分秒与弧度的转化
  13. MTK车载平台添加或更换开机启动LOGO
  14. java打印ascii码_JAVA实现打印ascii码表代码
  15. 石墨笔记,熊掌记和 Effie 哪个更适合采编?
  16. 利用时间字符串计算时间差
  17. 帝国理工创新领袖:数据驱动创新的五种模式
  18. NB-Iot烟感04:BC26模块原理图设计
  19. 解决IDEA Warning: Class ‘XXX‘ not found in module ‘XXX‘
  20. 如何理解矩阵的乘法?

热门文章

  1. 大数据之路读书笔记-16数据应用
  2. mysql员工信息表_MySQL版emp员工信息表
  3. AIOps案例: 阿里巴巴的智能监控系统
  4. 进阶篇-SpringBoot2.x自定义starter启动器
  5. 如何用DirectShow替代付费的摄像头SDK
  6. 计算机板块:外包引领软件业高成长
  7. eclipse 换背景图片
  8. 【无人机】基于Matlab实现高效局部地图搜索算法附论文
  9. loj10155:数字转换:树的直径问题
  10. 【平衡车】电机编码器知识总结