蓝桥杯单片机比赛学习:3、独立按键与矩阵按键的基本原理
独立按键
首先我们看一下按键的原理图,如图1,当J5中的2,3接在一起的时候,红线标注就是一个完整的电路图,此时只有s4、s5、s6、s7按键可以使用,也就是独立按键。例如:当我们按下s4时,电路导通,P33引脚被拉为低电平0,此时我们读取P33引脚电平的高低就能判断出哪个按键被按下。其他按键也是如此。
消抖 :
消抖的方法包括:硬件消抖和软件消抖。硬件消抖主要是通过添加滤波电路消除抖动干扰。软件消抖则是延迟时间,当检测到按键状态发生变化时,延迟5~10ms的时间,让抖动消失后,再次检测按键的状态。我们在这里主要使用软件消抖。当我们按下按键时,整个过程的波形如下图2所示。所以,当我们检测到按键状态发生变化时,加一个10ms的延迟后,再次检测按键状态,如果与上次状态相同则说明按键被按下。
矩阵按键
如图3所示,J5中的1,2连接在一起就形成4X4的矩阵按键,这里我们设从下到上依次为Y1、Y2、Y3、Y4(行),从左到右依次为X1、X2、X3、X4(列),例如:想要扫描第一列时,只要使X1为低电平0,Y1、Y2、Y3、Y4为高电平1,此时如果没有按键按下,那么这个状态会一直保持。当S7按下的时候,由于X1为低电平0,S7按下电路导通,使得Y4也为低电平0。(这里我们就可以用代码判断:Y4的电平高低,当Y4为低电平时,说明S7按下)其他按键同理。
这里我们最好使用 #include "stc15f2k60s2.h" 而不是 #include "reg52.h" ,下图我们对比一下,reg52.h中有很多端口没有声明。而stc15f2k60s2.h中则比较全面。大家有兴趣也可以自己去头文件里看一下。
代码实现 :
如使用独立按键请将矩阵按键代码屏蔽,反之亦然。
独立按键S4的功能:按下时8个数码管全亮,松开时8个数码管全灭。
矩阵按键S4、S8、S12、S16的功能:按下S4 L1 L2亮,按下S8L3 L4亮,按下S12 L5 L6亮,按下S16 L7 L8亮,松开熄灭。
#include "stc15f2k60s2.h"sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;//***********独立按键****************
sbit s7 = P3^0;
sbit s6 = P3^1;
sbit s5 = P3^2;
sbit s4 = P3^3;
//***********************************//**********矩阵按键***************
//Y为行,X为列
sbit Y1=P3^3;
sbit Y2=P3^2;
sbit Y3=P3^1;
sbit Y4=P3^0;sbit X1=P4^4;
sbit X2=P4^2;
sbit X3=P3^5;
sbit X4=P3^4;void Delay1ms() //@12.000MHz
{unsigned char i, j;i = 12;j = 169;do{while (--j);} while (--i);
}void delay_ms(int x)
{while(x--){Delay1ms();}
}/* 选择通道并且输入数据 */
void slect_138_573(unsigned char channel, unsigned char dat)
{P0 = 0x00; /* 将原来P0口中的数据清0 */P0 = dat; /* 这里用P0而不用其他端口是因为我们操作LED、数码管、继电器、蜂鸣器都是对P0进行操作 */switch(channel) /* 选择通道 */{case 4: /* 使Y4输出低电平0,也就是操作LED */P2 = (P2 & 0x1f) | 0x80;/* (P2 & 0x1f)就是将前3位清0,再操作前3位。将0x80转为2进制1000 0000,这里只看前3位100就是Y4 */break;case 5: /* 使Y5输出低电平0,也就是操作继电器和蜂鸣器 */P2 = (P2 & 0x1f) | 0xa0;break;case 6: /* 使Y6输出低电平0,也就是操作8个数码管 */P2 = (P2 & 0x1f) | 0xc0;break;case 7: /* 使Y7输出低电平0,也就是操作8个数码管中的1个数码管显示值 */P2 = (P2 & 0x1f) | 0xe0;break;case 0: /* 关闭所有通道 */P2 = (P2 & 0x1f) | 0x00;break;}P2 = (P2 & 0x1f) | 0x00; /* 使用后,关闭所有通道 */}*****************************独立按键***********************
void anjian(void)
{ if(s4==0){delay_ms(10);if(s4==0){slect_138_573(4, 0x00);while(s4==0);slect_138_573(4, 0xff);} }}********************************************************************//******************************矩阵按键*********************************//void anjian(void)
//{
// Y1=0;//扫描第一行
// Y2=Y3=Y4=1;
// X1=X2=X3=X4=1;
// if(X1==0) /* s4 */
// {
// delay_ms(10);
// if(X1==0)
// {
// slect_138_573(4, 0xfc);
// while(X1==0);
// slect_138_573(4, 0xff);
// }
// }
// else if(X2==0) /* s8 */
// {
// delay_ms(10);
// if(X2==0)
// {
// slect_138_573(4, 0xf3);
// while(X2==0);
// slect_138_573(4, 0xff);
// }
// }
// else if(X3==0) /* s12 */
// {
// delay_ms(10);
// if(X3==0)
// {
// slect_138_573(4, 0xcf);
// while(X3==0);
// slect_138_573(4, 0xff);
// }
// }
// else if(X4==0) /* s16 */
// {
// delay_ms(10);
// if(X4==0)
// {
// slect_138_573(4, 0x3f);
// while(X4==0);
// slect_138_573(4, 0xff);
// }
// }
//
//
//}//***********************************************************************
void main(void)
{slect_138_573(0,0x00);slect_138_573(4,0xff);slect_138_573(5,0x00);slect_138_573(6,0xff);slect_138_573(7,0xff);while(1){anjian();}
}
蓝桥杯单片机比赛学习:3、独立按键与矩阵按键的基本原理相关推荐
- 蓝桥杯单片机比赛学习:8、PWM的基本原理之呼吸灯
经过7节的学习,我们已经掌握了基本的硬件的使用规则,从本节开始我们开始学习一些模块的使用PWM.PCF8591.AT24C02.DS18B20.DS1302.555频率测量.光敏电阻测量.超声波测距等 ...
- 蓝桥杯单片机比赛学习:5、中断系统之外部中断的基本原理
中断的基本概念 百度百科上是这样说的,当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作 ...
- 蓝桥杯单片机比赛学习:11、频率测量的基本原理
在蓝桥杯单片机比赛中,频率测量一次都没考过,但是也不排除不考的可能.频率测量相对前面的几个模块来说相对简单,只需要两个定时器就可以实现. 频率测量的基本原理 产生脉冲的主要元件是555定时器.555定 ...
- 蓝桥杯单片机比赛学习:6、中断系统之定时器中断的基本原理
上节我们讲了中断的外部中断,基本的了解了一下中断,这一节我们继续来学习中断系统的定时器中断基本原理,本节很重要无论是在比赛中还是在单片机.嵌入式等的学习上都有着很重要的地位.如对本作者有兴趣可以去我主 ...
- 蓝桥杯单片机比赛学习:9、PCF8591的基本原理和使用方法
前面一节我们说了PWM呼吸灯的基本原理和使用方法,下面我们来看第二个模块,也是蓝桥杯单片机比赛中常考的一个模块--PCF8591.我主页有其他模块的使用方法和基本原理(2条消息) Do My Best ...
- 蓝桥杯单片机比赛学习:7、中断系统之串口中断的基本原理
这一节我们讲一下蓝桥杯单片机比赛中断中的最后一个模块--串口.中断的其他模块在我的个人主页(4条消息) Do My Best的博客_CSDN博客-蓝桥杯单片机比赛学习领域博主有兴趣的可以去学习. 通信 ...
- 蓝桥杯单片机比赛学习:1、led点亮原理
此教程是鄙人蓝桥杯单片机的学习过程总结,可能会有错误,请指出批评.蓝桥杯单片机学习最重要的是将整个单片机模块化,比如,我们可以将它分为LED.蜂鸣器.继电器.数码管.按键.AD/DA.555定时器.光 ...
- 蓝桥杯单片机国赛客观题_蓝桥杯单片机比赛历年试题获取
蓝桥杯单片机比赛历年试题获取!!! 准备蓝桥杯蓝桥杯比赛除了对板子各个模块的熟悉外,还有一件事,那就是把它们综合起来运用.当你单独使用板子上的某一个模块时,可能不会有什么问题,甚至对已经反复练习过后的 ...
- [蓝桥杯单片机]模块学习—中断系统
前一段时间的文章已经跟各位一起刷了一部分的客观题了 接下来将会跟大家一起从官方提供的原理图和芯片手册出发 练习每个模块的程序编写 因为我学习采用的是模块化编程的思路,函数的定义分散在不同的文件中,所以 ...
最新文章
- 【Spark】Spark基础练习题(一)
- UVa 311 - Packets
- python读取文件参数_Python 通过配置文件 读取参数进行
- scala强制类型转换
- matplotlib(四)核心模式以及注意事项
- SQL 语句执行顺序
- dsniff 和 Ettercap 和 bettercap 详解 - 网络嗅探工具包
- python求1到n的乘积_Python实现矩阵相乘的三种方法小结
- Qt实践录:常见控件操作示例1
- 如何使用JMeter 对Dubbo接口进行测试
- 使用单元测试驱动开发的方式编写flask应用
- 洛谷——P1421 小玉买文具
- 《等级保护二级基本要求》
- U盘系统安装步骤超级简单,弄懂ghost不管是windows7win10都不难
- 3D立方体图片切换动画
- 当你的职业是一名IT项目经理
- 中国科学技术大学研究生免疫学技术原理与应用复习资料及历年题
- 信捷plc485通信上位机_上位机开发之三菱FX3U以太网通信实践
- JavaFX 边框背景
- 整理的apollo 入门课程