4×4 keypad For pcDuino

酸酸苹果汁 发布于 2014/04/03 16:43
阅读 213
收藏 2

图片1

键盘是人机对话不可缺少的组件之一,在按键比较少时,我们可以一个pcDuino的I/O口接一个按键,但当按键需要很多,而pcDuino的I/O资源又比较紧张时,使用矩阵式键盘无疑是最好的选择。下面来介绍如何在pcDuino上使用4×4矩阵键盘。

硬件清单

  • pcDuino V2       x1
  • 4×4 keyboard   x1
  • Wire                  x8
接线说明

图片2


测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include"core.h"
 
introwpins[4] = {2,3,4,5};
intcolpins[4] = {6,7,8,9};
 
intkey_value=0x00;
introw_value=0,col_value=0;
 
voidclean_pins(intp[])
{
  for(inti=0;i<4;i++)
  {
    pinMode(p[i],OUTPUT);
    digitalWrite(p[i],HIGH);
  }
}
 
voidSetPinMode(intp[],intmode)
{
  for(inti=0;i<4;i++)
  {
    pinMode(p[i],mode);
    if(mode==OUTPUT) 
    {
      digitalWrite(p[i],LOW);
    }
  }
}
 
intReadPin(intp[])
{
  intvalue=0;
  intpin=0;
  for(inti=0;i<4;i++)
  {
    pin = digitalRead(p[i]);
    if(pin ==0)
    {
      delay(50);
      pin = digitalRead(p[i]);
      if(pin ==0)
      {
        if(i==0) value =0x01;
        if(i==1) value =0x02;
        if(i==2) value =0x04;
        if(i==3) value =0x08;
      }
    }
  }
  returnvalue;
}
 
voidReadRow()
{
  row_value =0;
  SetPinMode(rowpins,OUTPUT);
  clean_pins(colpins);
  SetPinMode(colpins,INPUT); 
  row_value = ReadPin(colpins);
}
 
voidReadCol()
{
  col_value =0;
  SetPinMode(colpins,OUTPUT);
  clean_pins(rowpins);
  SetPinMode(rowpins,INPUT);
  col_value = ReadPin(rowpins);
}
 
voidsetup()
{     
    printf("4x4 keypad test:\n");    
}
 
voidloop()
{
   char key;
   ReadRow();
   if(row_value!=0)
   {
     delay(20);
     ReadCol();
     key_value = (row_value<<4) + col_value;
     switch(key_value)
     {
       case0x11: key ='1';break;
       case0x21: key ='2';break;
       case0x41: key ='3';break;
       case0x81: key ='A';break;
 
       case0x12: key ='4';break;
       case0x22: key ='5';break;
       case0x42: key ='6';break;
       case0x82: key ='B';break;
 
       case0x14: key ='7';break;
       case0x24: key ='8';break;
       case0x44: key ='9';break;
       case0x84: key ='C';break;
 
       case0x18: key ='*';break;
       case0x28: key ='0';break;
       case0x48: key ='#';break;
       case0x88: key ='D';break;
 
       default:0x00;
     }
     if(key!=0x00)
       printf("key value = %c\n+++++++++\n",key);
       //delay(100);
   }
}

测试运行

(1)按照接线图接线:

图片3

(2)打开Arduino IDE,输入测试代码:

图片4

(3)编译运行代码,按下任意按键,在终端可以看到打印的键值:

图片5



linksprite学习中心

加载中
返回顶部
顶部