简介
独立键盘的原理及其使用都十分的简单,主要是搭配其他模块功能进行使用的。同时有新的工程知识按键去抖,下面进入正题
问题
通过一个题目来进行独立键盘的简单学习
当我按下S4时对应数码管第一位显示4,按下S5时数码管第一位显示5以此类推一直到S7那么如何实现这个功能呢?
原理解析
首先放出原理图和实物图
由图2中我们可以看到独立按键是在最左边一列的对应了原理图,由于独立按键与矩阵键盘是挨在一起的,于是在选择用哪个键盘来控制是十分重要的,于是就有了键帽来选择,图2看到左边两个引脚连在一起的时候是控制独立键盘的,对应原理图下方J5的2和3连在一起,由于3号引脚是接地的当2号和3号连接在一起的时候也是等电位对应都是逻辑0。所以判断键盘是否连接就要看S4—S7的逻辑值是否为0,如果为0说明开关连接,我们的代码也就可以按照这个思路来写
代码实写
我在这里先把代码放在这再来看看怎么写的
#include <STC15F2K60S2.H>
sbit S4 = P3^3;
sbit S5 = P3^2;
sbit S6 = P3^1;
sbit S7 = P3^0;
unsigned char arr[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void Delay20ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 1;
j = 216;
k = 35;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void class_buzz()
{
P0 = 0x00;
P2 = (P2 & 0x1F | 0xA0 );
P2 &= 0x1F;
}
void class_led()
{
P0 = 0xFF;
P2 = (P2 & 0x1F | 0x80);
P2 &= 0x1F;
}
void smg(unsigned char A,unsigned char B)
{
P0 = 0x01 << A;
P2 = (P2 & 0x1f | 0xC0);
P2 &= 0x1F;
P0 = B;
P2 = (P2 & 0x1f | 0xE0);
P2 &= 0x1F;
}
void key()
{
if(S4 == 0)
{
Delay20ms();
while(S4 == 0)
smg(0,arr[4]);
}
if(S5 == 0)
{
Delay20ms();
while(S5 == 0)
smg(0,arr[5]);
}
if(S6 == 0)
{
Delay20ms();
while(S6 == 0)
smg(0,arr[6]);
}
if(S7 == 0)
{
Delay20ms();
while(S7 == 0)
smg(0,arr[7]);
}
}
void main()
{
class_buzz();
class_led();
while(1)
{
key();
}
}
我们先对S4—S7参照原理图来做定义,由图1可见S4对应P33 S5对应P34等等而独立键盘的控制是由key()这个函数来实现的,可以看到通过一个条件语句来对按键的逻辑值是否为0来判断按键是否接通,然而为什么有两个判断呢,这是由于按键的材料性质因为弹性的形变导致接触可能会有误差导致判断失误,这就是所谓的按键去抖的作用,这里按键的材料我们无法避免,但是可以通过软件层面来达到去抖的作用。对于这种按键大概要10-20ms时间完全接通电路,所以我们通过一个延迟函数在第一次判断是否为0时再延迟20ms左右,如果仍为0则说明按键确实已经完全接通具体可自行搜索按键去抖来详细了解。
按键方面的操作大概就是这样,为了解决上面的问题则只用用数码管的知识这里不再赘述详情见上一篇文章。
实际表现
简单独立按键
小结
独立按键的操作还是十分简单的,它主要辅助其他模块来进行功能的实现
下一篇矩阵按键的简单使用