矩阵键盘程序_独立按键与矩阵按键
一、独立按键原理
按键在闭合和断开时,触点会存在抖动现象
硬件消抖电路
独立按键控制程
二、独立按键控制程序
#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]; //
}
}
矩阵键盘程序_独立按键与矩阵按键相关推荐
- 矩阵键盘 多键组合 c语言,矩阵键盘的检测和独立按键有很大的区别
描述 先说矩阵键盘,因为我写的组合键代码是在矩阵键盘的基础上写的,当然在独立按键上写组合键更简单一些.所以当你矩阵键盘的组合键会写的时候,你在独立按键上的组合键也就会写了. 矩阵键盘的检测和独立按键有 ...
- GPIO 按键及矩阵键盘程序------/* 自己实验确认并总结 */
新型的按键扫描程序 不过入式处理器上面我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉.我非常坚信这种按键处理办法的便捷和高效,你可以移植 ...
- AVR 矩阵键盘程序源代码2(有连续按键功能)(原创)
Keyboard.h /********** AVR 矩阵键盘扫描程序 ********* * 版本.........: 2.0 * 作者.........: 陈利栋 * 目标.........: A ...
- 矩阵键盘 多键组合 c语言,矩阵键盘多个按键同时按下的问题
你看看这段程序怎么样?我自己写的. #include #define KEY P1 //按键码,按键之间按位或运算 #define KEY1 0x11 #define KEY2 0x12 #def ...
- java 矩阵求秩_线性代数精华3——矩阵的初等变换与矩阵的秩
矩阵的初等变换这个概念可能在很多人听来有些陌生,但其实我们早在初中的解多元方程组的时候就用过它.只不过在课本当中,这种方法叫做消元法.我们先来看一个课本里的例子: 假设我们要解这个方程,怎么做呢? 首 ...
- 两个3×3矩阵乘法例题_两个3×3矩阵相乘 三个矩阵相乘从左向右算还是从右算起...
两个三乘三矩阵相乘怎么算,在线等 设A为m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=AB ,其中矩阵C中的第i行第j列元素可以表示为: 例如: 扩展资料: 注意事项 ...
- python矩阵和向量乘积_向量点积和矩阵乘积的区别
点积 dot product 点积是针对向量而言的. 我们可以理解为维度[n,1]或者[1,n],一维的矩阵. 在python中,我们设置一个array,查看其shape: >>> ...
- arduino的矩阵示例程序_用树莓派 Arduino 制造 LED 矩阵彩灯
MAKER:maketvee/ 译:趣无尽 之前我们介绍过一款非常炫酷的<熔岩特效灯>.这期教程中我将为大家介绍一款更易上手的灯. 这款 LED 矩阵彩灯使用标准的 WS2812b LED ...
- 4x4矩阵键盘c语言,4X4键盘矩阵键盘程序
#include//包含单片机内部资源预定义 __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 intresult; voidd ...
最新文章
- 农银:银行业中台系统的建设思路
- LeetCode 116. 填充每个节点的下一个右侧节点指针
- 微服务开发中的数据架构设计
- Deep Learning论文笔记之(一)K-means特征学习
- 使用IDEA 创建SpringBoot项目
- iphone如何信任软件_苹果iPhone手机安装两个微信教程
- 无盘服务器性能测试,无盘系统性能测试及结语
- Docker学习总结(32)——Dockerfile指令详解
- K - Repeating Decimals(循环小数)
- 自定义vue中的验证码组件
- 调用百度API 实现车型识别
- 一招解决网页文字无法复制
- (软件测试工程师)一线大厂新人工作指南!
- 标签系列二:spring 中bean解释以及bean标签里面的属性
- 程序员前世今生,从门外汉到菜鸟,再到独当一面,再到思变转行
- 计算机爱好者协会ppt,计算机协会PPT大赛
- 7-3 出租车计价 (15分)
- 踩坑:gitee报错fatal: Couldn‘t find remote ref master。
- 马斯克个人2021年向美国缴税110亿美元,特斯拉却是0元
- Kali linux下图片隐写,图片隐写信息快速检测工具——zsteg
热门文章
- 哈罗单车怎么关锁还车_好象被哈罗单车套路了,提醒大家小心
- 安卓期末项目源码_手机随时随地写Python,还可以开发安卓APP,太厉害了!
- Linux路由界面设置,nuxt中如何配置页面路由
- eclipse 配置java路径_如何在eclipse的配置文件里指定jdk路径
- 24岁博士毕业,受聘211高校副教授,90后开挂背后是自律和坚持
- HDLBits答案(14)_Verilog有限状态机(1)
- linux输入法源,Manjaro Linux 添加源及输入法
- java中如何设置浏览器宽度_[Java教程]关于JS中获取浏览器高度和宽度值的多种方法(多浏览器)_星空网...
- 桁架工业机器人编程_工业机器人之桁架机器人
- 20220202--CTF刷题MISC方向--第7题--编码