4x4矩阵键盘
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7 P1.6
8 P1.7
AT89C52
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
判断闭合键所在行位
置P3=0x0f
0
0
0
0
1
1
1
1
设E键按下
0
0
0
0
0
1
1
1 P3=0000 0111
key=temp|P3
1 0 1 1 0 1 1 1 键值key=0xb7序号“14”
八、作业:
编写一个矩阵扫描子程序
+5v
0---F号按键
编写一个矩阵扫描子程序
4.7k
4.7k
4.7k
4.7k
39 P0.0/AD0
} }
//头文件 //宏定义
//延时子程序
//键值表
//共阳极数码管编码表
// 定义变量类型 //大循环
//置行为低电平0,列为高电平1,读列值。 //判断有,无键盘按下 //去抖延迟 //如果if的值为真,这时可以确定有键盘按下 //存储列读入的值
//置列为0,行为1,读行值。 //位或运算,求键值,赋给key
矩阵键盘
孙长发 2014-05-08
目录 ▲矩阵键盘义定 ▲矩阵键盘优点 ▲教学任务 ▲硬件电路 ▲程序设计流程 ▲程序代码 ▲按键识别方法 ▲作业
教学目标: 1.掌握矩阵式键盘的电路结构。 2.理解矩阵式键盘扫描原理。 3.掌握矩阵式键盘与51单片机接口的编程方法。 4.巩固延时程序、数码管显示程序知识。
P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1
P3.4/T0 P3.5/T1 P3.6/W R P3.7/RD
39 38 37 36 35 34 33 32
21 22 a 23 b 24 c 25 d 26 e 27 f 28 g
dp 10 11 12 13 14 15 16 17
if(P3!=0xf0) { delayms(10); if(P3!=0xf0) { temp=P3; P3=0x0f; key=temp|P3; for(i=0;i<16;i++) if(key==KEY_TABLE[i]) { num=i; P2=TABLE[num]; delayms(2); } } }
28 P2.7/A15
10 P3.0/RXD
11 P3.1/TXD
12 P3.2/INT0
13 P3.3/INT1
14 P3.4/T0
15 P3.5/T1
16 P3.6/WR
17 P3.7/RD
AT89C52
19 XTAL1
18 XTAL2
9 RST
29 PSEN
30 ALE
31 EA
1 P1.0/T2
2.行扫描法键盘扫描过程(高→低电平翻转法)续
闭合按键位置判断程序分析
P3口(行、列线)赋
给P3赋值
值
列线
行线
Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
判断有无键按下
P3=0xf0
判断闭合键所在列位 1 1 1 1 0 0 0 0 置P3=0xf0
闭合按键 无键按下
读取P3
列线
行线
Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
38 P0.1/AD1
37 P0.2/AD2
36 P0.3/AD3
35 P0.4/AD4
34 P0.5/AD5
33 P0.6/AD6
32 P0.7/AD7
21 P2.0/A8
22 P2.1/A9
23 P2.2/A10
24 P2.3/A11
25 P2.4/A12
26 P2.5/A13
27 P2.6/A14
b、判断闭合键所在行的位置 :在确认有键按下后, 即可进入确定具体闭合键的位置在哪行。其方法是: 将全部列线Y4-Y7置低电平、行线Y0-Y3置高电平、然 后检测行线的状态,只要有一行的电平为低,则表示 键盘该行有一个或多个键被按下。
2.行扫描法键盘扫描过程(高→低电平翻转法)续
c、通过a、b两次检测到Y0-Y7的电平状态进行 位或运算,计算出闭合按键的键值,再查找键值表 便可以确定按下按键的序号。
按键 ,数码管显示相应键值,要求用行扫描法识别 键盘,且键盘要有去抖动功能。
分别用软件和硬件演示实际效果
四、硬件电路
按下按键数码管显示其值
19 XTAL1
18 XTAL2
9 RST
29 PSEN
30 ALE
31 EA
1 P1.0/T2
2 P1.1/T2EX
3 P1.2
4 P1.3
5 P1.4
6 P1.5
0
Y0
4
Y1
8
Y2
C
Y3
Y4 Y5 Y6 Y7
a b c d e f g
1
5
9
D
+5v
2
3
6
7
A
B
E
F
五、程序设计流程
开始
扫描键盘 N
有键按下? Y
延时去抖动 N
有键按下? Y
扫描键盘
识别闭合键
计算键值
根据键值找对应的段码
输出显示
六、程序代码
#include<reg52.h> #define uint unsigned int #define uchar unsigned char void delayms(uint xms)
教学课时: 2课时。
一、矩阵键盘义定 单片机外部设备中使用的排布类似于矩阵形式的
按键组。
0
1
2
3Leabharlann Baidu
Y0
4
5
6
7
Y1
8
9
A
B
Y2
C
D
E
F
Y3
Y4 Y5 Y6 Y7
二、使用矩阵键盘优点 在按键数量较多时,减少I/O口资源的占用,通
常采用矩阵键盘。
三、教学任务: 设计一个4×4矩阵键盘,其键值为0---F,按下
{ uint i,j;
for(i=xms;i>0;i--) for(j=110;j>0;j--); } uchar code KEY_TABLE[]={ 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; uchar code TABLE[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e }; void main() { uint temp,key,num,i; while(1) { P3=0xf0;
//查找键值表,确定所按键的序号
//根据按键的序号,找到显示段码点亮数码管,显示按键值。
七、按键识别方法: 1.行扫描法:即逐行或逐列扫描查询法。
行 线 列 线
0
1
2
3
Y0
4
5
6
7
Y1
8
9
A
B
Y2
C
D
E
F
Y3
Y4 Y5 Y6 Y7
2.行扫描法键盘扫描过程(高→低电平翻转法 )
a、判断键盘中有无键按下及按下键所在列的位置 : 将全部行线Y0-Y3置低电平,列线Y4-Y7置高电平, 然后检测列线的状态。若所有列线均为高电平,则键 盘中无键按下。只要有一列的电平为低,则表示键盘 该列有一个或多个键被按下。
2 P1.1/T2EX
3 P1.2
4 P1.3
5 P1.4
6 P1.5
7 P1.6
8 P1.7
11110000
运算结果 无键按下循环扫描
1 1 1 0 0 0 0 0 temp=P3=1110 0000
判断闭合键所在行位
设0键按下
置P3=0x0f
00001111
0 0 0 0 1 1 1 0 P3=0000 1110
key=temp|P3
判断闭合键所在列位
置P3=0xf0
11110000
1 1 1 0 1 1 1 0 键值key=0xee序号“0” 1 1 0 1 0 0 0 0 temp=P3=1101 0000
判断闭合键所在行位
设5键按下
置P3=0x0f
00001111
0 0 0 0 1 1 0 1 P3=0000 1101
key=temp|P3
判断闭合键所在列位
置P3=0xf0
11110000
1 1 0 1 1 1 0 1 键值key=0xdd序号“4” 1 0 1 1 0 0 0 0 temp=P3=1011 0000
8 P1.7
AT89C52
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
判断闭合键所在行位
置P3=0x0f
0
0
0
0
1
1
1
1
设E键按下
0
0
0
0
0
1
1
1 P3=0000 0111
key=temp|P3
1 0 1 1 0 1 1 1 键值key=0xb7序号“14”
八、作业:
编写一个矩阵扫描子程序
+5v
0---F号按键
编写一个矩阵扫描子程序
4.7k
4.7k
4.7k
4.7k
39 P0.0/AD0
} }
//头文件 //宏定义
//延时子程序
//键值表
//共阳极数码管编码表
// 定义变量类型 //大循环
//置行为低电平0,列为高电平1,读列值。 //判断有,无键盘按下 //去抖延迟 //如果if的值为真,这时可以确定有键盘按下 //存储列读入的值
//置列为0,行为1,读行值。 //位或运算,求键值,赋给key
矩阵键盘
孙长发 2014-05-08
目录 ▲矩阵键盘义定 ▲矩阵键盘优点 ▲教学任务 ▲硬件电路 ▲程序设计流程 ▲程序代码 ▲按键识别方法 ▲作业
教学目标: 1.掌握矩阵式键盘的电路结构。 2.理解矩阵式键盘扫描原理。 3.掌握矩阵式键盘与51单片机接口的编程方法。 4.巩固延时程序、数码管显示程序知识。
P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1
P3.4/T0 P3.5/T1 P3.6/W R P3.7/RD
39 38 37 36 35 34 33 32
21 22 a 23 b 24 c 25 d 26 e 27 f 28 g
dp 10 11 12 13 14 15 16 17
if(P3!=0xf0) { delayms(10); if(P3!=0xf0) { temp=P3; P3=0x0f; key=temp|P3; for(i=0;i<16;i++) if(key==KEY_TABLE[i]) { num=i; P2=TABLE[num]; delayms(2); } } }
28 P2.7/A15
10 P3.0/RXD
11 P3.1/TXD
12 P3.2/INT0
13 P3.3/INT1
14 P3.4/T0
15 P3.5/T1
16 P3.6/WR
17 P3.7/RD
AT89C52
19 XTAL1
18 XTAL2
9 RST
29 PSEN
30 ALE
31 EA
1 P1.0/T2
2.行扫描法键盘扫描过程(高→低电平翻转法)续
闭合按键位置判断程序分析
P3口(行、列线)赋
给P3赋值
值
列线
行线
Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
判断有无键按下
P3=0xf0
判断闭合键所在列位 1 1 1 1 0 0 0 0 置P3=0xf0
闭合按键 无键按下
读取P3
列线
行线
Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
38 P0.1/AD1
37 P0.2/AD2
36 P0.3/AD3
35 P0.4/AD4
34 P0.5/AD5
33 P0.6/AD6
32 P0.7/AD7
21 P2.0/A8
22 P2.1/A9
23 P2.2/A10
24 P2.3/A11
25 P2.4/A12
26 P2.5/A13
27 P2.6/A14
b、判断闭合键所在行的位置 :在确认有键按下后, 即可进入确定具体闭合键的位置在哪行。其方法是: 将全部列线Y4-Y7置低电平、行线Y0-Y3置高电平、然 后检测行线的状态,只要有一行的电平为低,则表示 键盘该行有一个或多个键被按下。
2.行扫描法键盘扫描过程(高→低电平翻转法)续
c、通过a、b两次检测到Y0-Y7的电平状态进行 位或运算,计算出闭合按键的键值,再查找键值表 便可以确定按下按键的序号。
按键 ,数码管显示相应键值,要求用行扫描法识别 键盘,且键盘要有去抖动功能。
分别用软件和硬件演示实际效果
四、硬件电路
按下按键数码管显示其值
19 XTAL1
18 XTAL2
9 RST
29 PSEN
30 ALE
31 EA
1 P1.0/T2
2 P1.1/T2EX
3 P1.2
4 P1.3
5 P1.4
6 P1.5
0
Y0
4
Y1
8
Y2
C
Y3
Y4 Y5 Y6 Y7
a b c d e f g
1
5
9
D
+5v
2
3
6
7
A
B
E
F
五、程序设计流程
开始
扫描键盘 N
有键按下? Y
延时去抖动 N
有键按下? Y
扫描键盘
识别闭合键
计算键值
根据键值找对应的段码
输出显示
六、程序代码
#include<reg52.h> #define uint unsigned int #define uchar unsigned char void delayms(uint xms)
教学课时: 2课时。
一、矩阵键盘义定 单片机外部设备中使用的排布类似于矩阵形式的
按键组。
0
1
2
3Leabharlann Baidu
Y0
4
5
6
7
Y1
8
9
A
B
Y2
C
D
E
F
Y3
Y4 Y5 Y6 Y7
二、使用矩阵键盘优点 在按键数量较多时,减少I/O口资源的占用,通
常采用矩阵键盘。
三、教学任务: 设计一个4×4矩阵键盘,其键值为0---F,按下
{ uint i,j;
for(i=xms;i>0;i--) for(j=110;j>0;j--); } uchar code KEY_TABLE[]={ 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; uchar code TABLE[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e }; void main() { uint temp,key,num,i; while(1) { P3=0xf0;
//查找键值表,确定所按键的序号
//根据按键的序号,找到显示段码点亮数码管,显示按键值。
七、按键识别方法: 1.行扫描法:即逐行或逐列扫描查询法。
行 线 列 线
0
1
2
3
Y0
4
5
6
7
Y1
8
9
A
B
Y2
C
D
E
F
Y3
Y4 Y5 Y6 Y7
2.行扫描法键盘扫描过程(高→低电平翻转法 )
a、判断键盘中有无键按下及按下键所在列的位置 : 将全部行线Y0-Y3置低电平,列线Y4-Y7置高电平, 然后检测列线的状态。若所有列线均为高电平,则键 盘中无键按下。只要有一列的电平为低,则表示键盘 该列有一个或多个键被按下。
2 P1.1/T2EX
3 P1.2
4 P1.3
5 P1.4
6 P1.5
7 P1.6
8 P1.7
11110000
运算结果 无键按下循环扫描
1 1 1 0 0 0 0 0 temp=P3=1110 0000
判断闭合键所在行位
设0键按下
置P3=0x0f
00001111
0 0 0 0 1 1 1 0 P3=0000 1110
key=temp|P3
判断闭合键所在列位
置P3=0xf0
11110000
1 1 1 0 1 1 1 0 键值key=0xee序号“0” 1 1 0 1 0 0 0 0 temp=P3=1101 0000
判断闭合键所在行位
设5键按下
置P3=0x0f
00001111
0 0 0 0 1 1 0 1 P3=0000 1101
key=temp|P3
判断闭合键所在列位
置P3=0xf0
11110000
1 1 0 1 1 1 0 1 键值key=0xdd序号“4” 1 0 1 1 0 0 0 0 temp=P3=1011 0000