首先如图所示导入各个元器件,并连线。
因为P3口连接着矩阵键盘,所以上来要先付个初值,从高位到低位H0,H1,H2,H3,L0,L1,L2,L3的值是11110000,高位全是1,低位全是0,十六进制就是0xF0,也就是P3=0xF0。如果有按键按下了,肯定就不是这个值了。
比如说:
第一行789+中的任何一个按下,H0的高电平就会被拉低,P3口就变成了01110000, P3=0x70
第二行中的456-任何一个被按下,H1的高电平也会被拉低,P3口就变成了10110000, P3=0xB0
第三行中的123X任何一个被按下,H2的高电平也会被拉低,P3口就变成了11010000, P3=0xD0
第四行中的%0.÷任何一个被按下,H3的高电平也会被拉低,P3口就变成了11100000, P3=0xE0
上面是行都检查完了,下面检查列,检查列之前先把P3口设置成00001111,所有的列上的低位端口都设置成1,行上的端口都设置成0,也就是把P3赋初值为0x0f
然后再去检查每一列:
第一列中的741%任何一个被按下,L0的高电平都会被拉低,P3口就变成了00000111, P3=0x07
第二列中的8520任何一个被按下,L1的高电平都会被拉低,P3口就变成了00001011, P3=0x0B
第三列中的963.任何一个被按下,L2的高电平都会被拉低,P3口就变成了00001101, P3=0x0D
第四列中的+-X÷任何一个被按下,L3的高电平都会被拉低,P3口就变成了00001110, P3=0x0E
这样就能确定到底是哪一个按键被按下了,比如说按下的是7键,首先P3=0xf0,检查值有变化了就先保存下来,比如说是0x70,再把P3=0x0f,再检查P3的值有没有变化,如果有变化了,也要保存下来比如说是0x07,这会7键按下的值就是0x70+0x07=0x77,这样每一个键都会有一个固定的值,需要自己来编码,因为接线画图有不一样的地方,编码都会有变化的。
0到9的按键值就为:
{0xd7, 0xeb, 0xdb, 0xbb, 0xed, 0xdd, 0xdb, 0xee, 0xde, 0xbe}
下面编写c程序,每行都有注释。主要给自己看。
#include"reg52.h"
char duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 段码,也是就是数码管要显示的0到9的值
char s[]={0xd7, 0xeb, 0xdb, 0xbb, 0xed, 0xdd, 0xbd, 0xee, 0xde, 0xbe}; // 所有按键的值
unsigned int num=0; // 定义要显示的数字变量
void delay(unsigned int n){ // 延时函数
unsigned int i=0, j=0;
for(i=0; i<n; i++){
for(j=0; j<120; j++);
}
}
void key_scan(){
unsigned int i=0;
unsigned char temp0=0, temp1=0, temp=0; // 定义3个变量存放按键接口的值
P3=0xf0; // P3口赋初值
if(P3 != 0xf0){ // 如果P3不等于初值了,证明有按键被按下了
delay(20); // 延时20毫秒去抖
temp0 = P3; // 保存现在P3的值
P3 = 0x0f; // P3口再次赋初值,用来检查列,这里不用担心检查不到,单片机还是很快的。
if(P3 != 0x0f){ // 如果P3不等于初值了,证明有按键被按下了
temp1 = P3; // 保存现在P3的值
}
}
temp = temp0 + temp1; // 键值= 第一次保存的值+ 第二次保存的值
for(i=0; i<10; i++){ // 循环10次
if(s[i]==temp){ // 把数组s中的每一个值和现在的键值比对,如果一样就是现在的第几个数字
num=i; //就把num值设成i值
}
}
}
void display(){
P2 = ~duan[num]; // P2口接的数码管显示段的第num个数字,正好是按下的按键的那个数字。
}
void main(){
while(1){
key_scan(); // 检测按键按下的是几的函数
display(); //显示函数,用来显示按下的是数字几
}
}
把hex文件导入proteus中仿真就能实现从0到9的按键并且数码管上会显示0到9这10个数字。
proteus中接线要认真不然会有看着圆点在线上,实际一放大就不在的现象,也就是根本没接上,会带来很多麻烦事。
最近从网上买了一个4X4的矩阵键盘,其接口定义要理清了关系,不然会出错的,特此记录一下。
今天在弄proteus时发现了一个矩阵键盘,特此记录一下,当时要是知道有这个东西就不用搞那么多的button了,一个矩阵键盘就搞定了,多简单啊!看看图片吧!
查找的方法也很简单搜索时输入KEYPAD就可以了,从旁边选就好了。这就是proteus中导入矩阵键盘的方法。文章来源:https://www.toymoban.com/news/detail-447299.html
文章来源地址https://www.toymoban.com/news/detail-447299.html
到了这里,关于51单片机设计16个按键的矩阵键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!