4x4矩阵键盘

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XTAL1
19
XTAL2
18
RST
9
PSEN ALE EA
29 30 31
P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
1 2 3 4 5 6 7 8
0
1
0
0
0
0
0
1
1
1
1
0 1
0
0 1
0 1
0 0
1 1
1 1
1 P3=0000 0111 1 键值key=0xb7序号“14”
0
八、作业:
编写一个矩阵扫描子程序
+5v
编写一个矩阵扫描子程序
Fra Baidu bibliotek0---F号按键
39 4.7k 4.7k 4.7k 4.7k 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
//根据按键的序号,找到显示段码点亮数码管,显示按键值。
七、按键识别方法:
1.行扫描法:即逐行或逐列扫描查询法。
0
Y0
1
2
3
4
Y1
5
6
7
行 线
Y2
8
9
A
B
C
Y3
D
E
F
列 线
Y4 Y5 Y6 Y7
2.行扫描法键盘扫描过程(高→低电平翻转法 ) a、判断键盘中有无键按下及按下键所在列的位置 :将全部行线Y0-Y3置低电平,列线Y4-Y7置高电平, 然后检测列线的状态。若所有列线均为高电平,则键 盘中无键按下。只要有一列的电平为低,则表示键盘 该列有一个或多个键被按下。 b、判断闭合键所在行的位置 :在确认有键按下后, 即可进入确定具体闭合键的位置在哪行。其方法是: 将全部列线Y4-Y7置低电平、行线Y0-Y3置高电平、然 后检测行线的状态,只要有一行的电平为低,则表示 键盘该行有一个或多个键被按下。
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.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD AT89C52
//键值表
//共阳极数码管编码表
// 定义变量类型 //大循环 //置行为低电平0,列为高电平1,读列值。 //判断有,无键盘按下 //去抖延迟 //如果if的值为真,这时可以确定有键盘按下 //存储列读入的值 //置列为0,行为1,读行值。 //位或运算,求键值,赋给key //查找键值表,确定所按键的序号
2.行扫描法键盘扫描过程(高→低电平翻转法)续
c、通过a、b两次检测到Y0-Y7的电平状态进行位 或运算,计算出闭合按键的键值,再查找键值表便 可以确定按下按键的序号。
2.行扫描法键盘扫描过程(高→低电平翻转法)续
闭合按键位置判断程序分析
P3口(行、列线)赋 值 Y7 判断有无键按下 P3=0xf0 判断闭合键所在列位 置P3=0xf0 判断闭合键所在行位 置P3=0x0f key=temp|P3 判断闭合键所在列位 置P3=0xf0 判断闭合键所在行位 置P3=0x0f key=temp|P3 判断闭合键所在列位 置P3=0xf0 判断闭合键所在行位 置P3=0x0f key=temp|P3 1 1 1 1 0 0 0 0 设E键按下 1 1 1 1 0 0 0 0 设5键按下 1 1 1 1 0 0 0 0 1 设0键按下 1 1 0 0 0 0 0 temp=P3=1110 0000 给P3赋值 列线 Y6 Y5 Y4 Y3 行线 Y2 Y1 闭合按键 Y0 无键按下 Y7 1 列线 Y6 Y5 1 1 读取P3 Y4 1 Y3 0 行线 Y2 Y1 0 0 运算结果 Y0 0 无键按下循环扫描
0
0
0
0
1
1
1
1
0 1 1
0 1 1
0 1
0 0 1
1 1 0
1 1 0
1 1 0
0 P3=0000 1110 0 键值key=0xee序号“0” 0 temp=P3=1101 0000
0
0
0
0
0
1
1
1
1
0 1 1
0 1
0
0 1 1
1 1 0
1 1 0
0 0
0
1 P3=0000 1101 1 键值key=0xdd序号“4” 0 temp=P3=1011 0000
分别用软件和硬件演示实际效果
四、硬件电路
按下按键数码管显示其值
+5v 19 XTAL1 P0.0/AD0 P0.1/AD1 18 P0.2/AD2 XTAL2 P0.3/AD3 P0.4/AD4 P0.5/AD5 9 P0.6/AD6 RST P0.7/AD7 P2.0/A8 P2.1/A9 29 30 31 P2.2/A10 PSEN ALE EA P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 1 2 3 4 5 6 7 8 P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C52 Y3 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 Y2 a b c d e f g dp Y1 Y0 a b c d e f g
矩阵键盘
孙长发
2014-05-08
目 录 ▲矩阵键盘义定 ▲矩阵键盘优点 ▲教学任务 ▲硬件电路 ▲程序设计流程 ▲程序代码 ▲按键识别方法 ▲作业
教学目标: 1.掌握矩阵式键盘的电路结构。 2.理解矩阵式键盘扫描原理。 3.掌握矩阵式键盘与51单片机接口的编程方法。 4.巩固延时程序、数码管显示程序知识。 教学课时: 2课时。
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Y4 Y5 Y6 Y7
五、程序设计流程
开始
扫描键盘
N
有键按下? Y 延时去抖动
N 有键按下? Y 扫描键盘
识别闭合键
计算键值
根据键值找对应的段码
输出显示
六、程序代码
#include<reg52.h> #define uint unsigned int #define uchar unsigned char void delayms(uint xms) { 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; 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); } } } } } //头文件 //宏定义 //延时子程序
一、矩阵键盘义定 单片机外部设备中使用的排布类似于矩阵形式 的按键组。
0
Y0
1
2
3
4
Y1
5
6
7
8
Y2
9
A
B
C
Y3
D
E
F
Y4 Y5 Y6 Y7
二、使用矩阵键盘优点 在按键数量较多时,减少I/O口资源的占用, 通常采用矩阵键盘。
三、教学任务: 设计一个4×4矩阵键盘,其键值为0---F,按 下按键 ,数码管显示相应键值,要求用行扫描法 识别键盘,且键盘要有去抖动功能。
相关文档
最新文档