友情提示:380元/半年,儿童学编程,就上码丁实验室。
产品介绍
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。4*4矩阵按键其原理图如图:
实验器件
■ 4*4矩阵按键:1个
■ 多彩面包板实验跳绳:若干
实验连线
如图所示分别用杜邦线将4*4矩阵按键的8个接口按照顺序接到开发板的4 5 6 7 8 9 10 11接口
程序代码
const int numRows = 4;//定义4 行
const int numCols = 4;//定义4 列
const int debounceTime = 20;//去抖动时间长度
const char keymap[numRows][numCols]= {//键值,可以按需要更改
{ ’1′,’2′,’3′,’A’ },
{’4′,’5′,’6′,’B’ },
{’7′,’8′,’9′,’C’ },
{‘*’,’0′,’#’,’D’ }
}
const int rowPins[numRows] = {4,5,6,7};//设置硬件对应的引脚
const int colPins[numCols] = {8,9,10,11};
//初始化功能
void setup(){
Serial.begin(9600);
for(int row = 0; row < numRows; row++){
pinMode(rowPins[row],INPUT);
digitalWrite(rowPins[row],HIGH);
}
for(int column = 0;column < numCols;column++){
pinMode(colPins[column],OUTPUT);
digitalWrite(colPins[column],HIGH);
}
}
//主循环
void loop() {
// 添加其他的程序,循环运行
char key = getkey();
if(key !=0)
{
Serial.print(“Got key “);//串口打印键值
Serial.println(key);
}
}
//读取键值程序
char getkey(){
char key = 0;
for(int column = 0;column < numCols;column++){
digitalWrite(colPins[column],LOW);
for(int row = 0 ;row < numRows; row++){
if(digitalRead(rowPins[row]) == LOW){ //是否有按键按下
delay(debounceTime);
while(digitalRead(rowPins[row]) == LOW) //等待按键释放
{
key = keymap[row][column];
}
}
digitalWrite(colPins[column],HIGH); //De-activethe current column
}
return key;
}
米思齐代码:
实验结论
打开串口监视器,按下键盘上的按键,能够显示出对应的键。