4乘4矩阵键盘怎么接?矩阵键盘有这种接法吗
一、4***4***矩阵键盘有这种接法吗***谢谢
这种画法确实不易看出设计者的想法,直接画出按键就容易懂了。矩阵接法通常是这样接。而且上拉电阻也可以不需要。
逐行扫描读键或反转法快速读键。(多键按下时,无法得到键值)
基本原理是:
1、4根行线,4根列线。交叉位置分别布置按键。共计16个键。
2、逐行读:将其中一行置0,其余行置1。列线均置1,输入。当该行有键按下。列线有变化。
依次扫描完。即可读到被短接的行列位置。
3、反转法:所有行均置0,列均置1。可确定按下键所在的列。
仅将该列清0,行均置1。可确定按下键所在的行。
二、单片机 4*4矩阵键盘
这个电路图,只是你使用哪几个口在程序中对应上就可以了
程序
//行列扫描程序,可以自己定义端口和扫描方式,这里做简单介绍
#include<reg52.h>//包含头文件
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
ucharkeyscan(void);
voiddelay(uinti);
voidmain()
{
ucharkey;
P2=0x00;//1数码管亮按相应的按键,会显示按键上的字符
while(1)
{
key=keyscan();//调用键盘扫描,
switch(key)
{
case0x7e:P0=dofly[0];break;//0按下相应的键显示相对应的码值
case0x7d:P0=dofly[1];break;//1
case0x7b:P0=dofly[2];break;//2
case0x77:P0=dofly[3];break;//3
case0xbe:P0=dofly[4];break;//4
case0xbd:P0=dofly[5];break;//5
case0xbb:P0=dofly[6];break;//6
case0xb7:P0=dofly[7];break;//7
case0xde:P0=dofly[8];break;//8
case0xdd:P0=dofly[9];break;//9
case0xdb:P0=dofly[10];break;//a
case0xd7:P0=dofly[11];break;//b
case0xee:P0=dofly[12];break;//c
case0xed:P0=dofly[13];break;//d
case0xeb:P0=dofly[14];break;//e
case0xe7:P0=dofly[15];break;//f
}
}
}
ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法
{
ucharcord_h,cord_l;//行列值
P3=0x0f;//行线输出全为0
cord_h=P3&0x0f;//读入列线值
if(cord_h!=0x0f)//先检测有无按键按下
{
delay(100);//去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f;//读入列线值
P3=cord_h|0xf0;//输出当前列线值
cord_l=P3&0xf0;//读入行线值
return(cord_h+cord_l);//键盘后组合码值
}
}return(0xff);//返回该值
}
voiddelay(uinti)//延时函数
{
while(i--);
}
不明白的在联系我,也可以直接访问我的Blog:hi.baidu/lyzhangxiang
三、4x4矩阵键盘的工作原理是什么
4x4矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,通过读入输入线的状态就可得知是否有键被按下。
扩展资料:
作为单片机外部设备,在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。矩阵式结构的键盘比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
矩阵式结构的键盘比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
四、arduino 4*4矩阵键盘 怎么用
这里简单介绍一种矩阵键盘的工作原理,4*4矩阵键盘有8个引脚,4个一组,分别对应行和列,通过按键扫描的方法,对不同行(列)分别输入高低电平,然后读取不同列(行)上的电平,从而知道键盘上的某一按键按下。
例如,当第1行输出低电平,其他行输出高电平,分别读取依次列上的状态,如果第1列为低,结果为(1,1),按键为1,如果第2列为低,则结果为(1,2)按键为2
安装4*4矩阵键盘
4*4矩阵键盘有一个8孔的排母,理论上可以直接插到0-7脚上,但0,1脚用于串口通信,所以只能选择2~13脚,这里选用了2-9脚。
首先,选取一个16 PIN的双排针,将双排针长的那一排的一面引脚插到键盘排母里
另一面插8P线,8P线另一头按键盘正面从左到右的顺序,线接2 PIN排针,再接5 PIN排针,
2 PIN的排针插到Arduino的8,9脚,5 PIN的排针插到2~5脚
定义Arduino IO口
byte rowPins[ROWS]={9, 8, 7, 6};//连接到行数字小键盘的管脚
byte colPins[COLS]={5, 4, 3, 2};//连接到列数字小键盘的管脚
示例程序
[C++]
#include<Keypad.h>
const byte ROWS= 4;//four rows
const byte COLS= 4;//four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS]={9, 8, 7, 6};//connect to the row pinouts of the keypad
byte colPins[COLS]={5, 4, 3, 2};//connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad= Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey= customKeypad.getKey();
if(customKey){
Serial.println(customKey);
}
}