一、独立按键原理

按键在闭合和断开时,触点会存在抖动现象

硬件消抖电路

独立按键控制程

二、独立按键控制程序

#include "reg52.h"

typedef unsigned int u16;

typedef unsigned char u8;

sbit k1=P3^1;

sbit k2=P3^0;

sbit k3=P3^2;

sbit k4=P3^3;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

void delay(u16 i)

{

while(i--);

}

/*******************************************

* 函 数 名     : keypros

* 函数功能    : 按键处理函数,判断按键K1是否按下

******************************************/

void keypros()

{

if(k1==0)  //检测按键K1是否按下

{

delay(1000);   //消除抖动 一般大约10ms

if(k1==0) //再次判断按键是否按下

{

P0=smgduan[0];

LSA=0;LSB=0;LSC=0;

}

while(!k1); //检测按键是否松开

}

if(k2==0)  //检测按键K1是否按下

{

delay(1000);   //消除抖动 一般大约10ms

if(k2==0) //再次判断按键是否按下

{

P0=smgduan[1];

LSA=1;LSB=0;LSC=0;

}

while(!k2); //检测按键是否松开

}

if(k3==0)  //检测按键K1是否按下

{

delay(1000);   //消除抖动 一般大约10ms

if(k3==0) //再次判断按键是否按下

{

P0=smgduan[2];

LSA=0;LSB=1;LSC=0;

}

while(!k3); //检测按键是否松开

}

if(k4==0)  //检测按键K1是否按下

{

delay(1000);   //消除抖动 一般大约10ms

if(k4==0) //再次判断按键是否按下

{

P0=smgduan[3];

LSA=1;LSB=1;LSC=0;

}

while(!k4); //检测按键是否松开

}

}

void main()

{

while(1)

{

keypros();  //按键处理函数

}

}

一、矩阵按键

矩阵按键扫描原理

方法一:

逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下

方法二:

方法二:

行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。

二、实验程序

实现现象:下载程序后数码管显示0,按下矩阵按键上的按键显示对应的数字

S1-S4:0-3

S5-S8:4-7

S9-S12:8-B

S13-S16:C-F。

***************************************************************************************/

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;  //对数据类型进行声明定义

typedef unsigned char u8;

#define GPIO_DIG P0   //对按键端口进行定义

#define GPIO_KEY P1//发送断码端口定义

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 KeyValue;//用来存放读取到的键值

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

/*******************************************************************************

* 函 数 名         : delay

* 函数功能   : 延时函数,i=1时,大约延时10us

*******************************************************************************/

void delay(u16 i)

{

while(i--);

}

/*******************************************************************************

* 函 数 名         : KeyDown

* 函数功能   : 检测有按键按下并读取键值

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void KeyDown(void)

{

char a=0;

GPIO_KEY=0x0f;

if(GPIO_KEY!=0x0f)//读取按键是否按下

{

delay(1000);//延时10ms进行消抖

if(GPIO_KEY!=0x0f)//再次检测键盘是否按下

{

//测试列

GPIO_KEY=0X0F;

switch(GPIO_KEY)

{

case(0X07):KeyValue=0;break;

case(0X0b):KeyValue=1;break;

case(0X0d): KeyValue=2;break;

case(0X0e):KeyValue=3;break;

}

//测试行

GPIO_KEY=0XF0;

switch(GPIO_KEY)

{

case(0X70):KeyValue=KeyValue;break;

case(0Xb0):KeyValue=KeyValue+4;break;

case(0Xd0): KeyValue=KeyValue+8;break;

case(0Xe0):KeyValue=KeyValue+12;break;

}

while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测,按键一直按下,条件2成立,这时进入while 循环,当不满足条件1时,跳出循环体,表明按键被强制松开。

{

delay(1000);

a++;

}

}

}

}

/*******************************************************************************

* 函 数 名       : main

* 函数功能 : 主函数

* 输    入       : 无

* 输    出     : 无

*******************************************************************************/

void main()

{

LSA=0; //给一个数码管提供位选

LSB=0;

LSC=0;

while(1)

{

KeyDown();   //按键判断函数

GPIO_DIG=smgduan[KeyValue];  //

}

}

矩阵键盘程序_独立按键与矩阵按键相关推荐

  1. 矩阵键盘 多键组合 c语言,矩阵键盘的检测和独立按键有很大的区别

    描述 先说矩阵键盘,因为我写的组合键代码是在矩阵键盘的基础上写的,当然在独立按键上写组合键更简单一些.所以当你矩阵键盘的组合键会写的时候,你在独立按键上的组合键也就会写了. 矩阵键盘的检测和独立按键有 ...

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

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

  3. AVR 矩阵键盘程序源代码2(有连续按键功能)(原创)

    Keyboard.h /********** AVR 矩阵键盘扫描程序 ********* * 版本.........: 2.0 * 作者.........: 陈利栋 * 目标.........: A ...

  4. 矩阵键盘 多键组合 c语言,矩阵键盘多个按键同时按下的问题

    你看看这段程序怎么样?我自己写的. #include #define KEY P1 //按键码,按键之间按位或运算 #define KEY1  0x11 #define KEY2  0x12 #def ...

  5. java 矩阵求秩_线性代数精华3——矩阵的初等变换与矩阵的秩

    矩阵的初等变换这个概念可能在很多人听来有些陌生,但其实我们早在初中的解多元方程组的时候就用过它.只不过在课本当中,这种方法叫做消元法.我们先来看一个课本里的例子: 假设我们要解这个方程,怎么做呢? 首 ...

  6. 两个3×3矩阵乘法例题_两个3×3矩阵相乘 三个矩阵相乘从左向右算还是从右算起...

    两个三乘三矩阵相乘怎么算,在线等 设A为m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=AB ,其中矩阵C中的第i行第j列元素可以表示为: 例如: 扩展资料: 注意事项 ...

  7. python矩阵和向量乘积_向量点积和矩阵乘积的区别

    点积 dot product 点积是针对向量而言的. 我们可以理解为维度[n,1]或者[1,n],一维的矩阵. 在python中,我们设置一个array,查看其shape: >>> ...

  8. arduino的矩阵示例程序_用树莓派 Arduino 制造 LED 矩阵彩灯

    MAKER:maketvee/ 译:趣无尽 之前我们介绍过一款非常炫酷的<熔岩特效灯>.这期教程中我将为大家介绍一款更易上手的灯. 这款 LED 矩阵彩灯使用标准的 WS2812b LED ...

  9. 4x4矩阵键盘c语言,4X4键盘矩阵键盘程序

    #include//包含单片机内部资源预定义 __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 intresult; voidd ...

最新文章

  1. 农银:银行业中台系统的建设思路
  2. LeetCode 116. 填充每个节点的下一个右侧节点指针
  3. 微服务开发中的数据架构设计
  4. Deep Learning论文笔记之(一)K-means特征学习
  5. 使用IDEA 创建SpringBoot项目
  6. iphone如何信任软件_苹果iPhone手机安装两个微信教程
  7. 无盘服务器性能测试,无盘系统性能测试及结语
  8. Docker学习总结(32)——Dockerfile指令详解
  9. K - Repeating Decimals(循环小数)
  10. 自定义vue中的验证码组件
  11. 调用百度API 实现车型识别
  12. 一招解决网页文字无法复制
  13. (软件测试工程师)一线大厂新人工作指南!
  14. 标签系列二:spring 中bean解释以及bean标签里面的属性
  15. 程序员前世今生,从门外汉到菜鸟,再到独当一面,再到思变转行
  16. 计算机爱好者协会ppt,计算机协会PPT大赛
  17. 7-3 出租车计价 (15分)
  18. 踩坑:gitee报错fatal: Couldn‘t find remote ref master。
  19. 马斯克个人2021年向美国缴税110亿美元,特斯拉却是0元
  20. Kali linux下图片隐写,图片隐写信息快速检测工具——zsteg

热门文章

  1. 哈罗单车怎么关锁还车_好象被哈罗单车套路了,提醒大家小心
  2. 安卓期末项目源码_手机随时随地写Python,还可以开发安卓APP,太厉害了!
  3. Linux路由界面设置,nuxt中如何配置页面路由
  4. eclipse 配置java路径_如何在eclipse的配置文件里指定jdk路径
  5. 24岁博士毕业,受聘211高校副教授,90后开挂背后是自律和坚持
  6. HDLBits答案(14)_Verilog有限状态机(1)
  7. linux输入法源,Manjaro Linux 添加源及输入法
  8. java中如何设置浏览器宽度_[Java教程]关于JS中获取浏览器高度和宽度值的多种方法(多浏览器)_星空网...
  9. 桁架工业机器人编程_工业机器人之桁架机器人
  10. 20220202--CTF刷题MISC方向--第7题--编码