任务一密码锁按键值显示全解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0 1 1 0 1 0 1 1 0
行线输出 列线输入 0111 1111
1 1
1 1
1 1
0 1 1 1
1011 1101 1110
1110 1111 1111
②行列式键盘的基本驱动函数
/**************按键扫描子函数***********/ /*说明 该程序要求每2ms左右执行一遍 */ /**可在定时中断中调用,也可在主程序中循环调用**/ #define uchar unsigned char #define KEYIO P1//定义按键的IO口 void key() { static uchar kv=0xff ,ts=0; KEYIO=0xf0;//键盘IO口高4位置1,低4位置0 if(KEYIO!=0xf0) //输入不是全"1",说明有键按下 { if(ts<11)ts++;//ts累加,防止ts加过256 if(ts==10) // ts等于10即20ms时取一次键值(延时去抖)
• 使用YL-236单片机实训考核装置实现 密码锁按键值显示功能,具体要求如下 : • 1.使用指令模块中行列式4×4键盘 作为密码锁的输入。 • 2.使用显示模块的4位数码管单元显 示密码锁按键键值。 • 3.上电后,数码管无显示,按下行 列式4×4键盘的任意键,左边两个数码 管显示按键的键值(键值参考左表)。
硬件电路的设计与搭建
1、硬件电路设计 2、绘制模块接线图
3
C
3
C
0
0
3
2
P
P
10μF
C
1
11.0592MHz
1
R
0
1
k
+5V
XT1
ROW0
ROW1
ROW2
ROW3
COL0
COL1
COL2
COL3
2
1
1
1
1
1
1
1
1
1
1
0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
MK1
P27
AT89S51T CS1
P26
项目三
简易电子密码锁制作
任务一
密码锁按键值显示
任务一 密码锁按键值显示
任务要求
任务分析
硬件电路的 设计与搭建
软件编写
任务实施
任务书:
键号
键值 键号
0
0x77 4
1
0x7b 5
2
0x7d 6
3
0x7e 7
键值
键号 键值
0xb7
8 0xd7
0xbb
9 0xdb
0xbd
10 0xdd
0xbe
11 0xde
1、硬件电路设计

ALE/PROG
B
D 2

P2.2(A10)
P2.3(A11)
P2.4(A12)
P2.5(A13)
P2.6(A14)
P2.7(A15)
P2.0(A8)
P2.1(A9)
P0.7(A7)
P0.6(A6)
P0.5(A5)
P0.4(A4)
P0.3(A3)
P0.2(A2)
P0.1(A1)
P0.0(A0)
键号
键值
12
0xe7
13
0xeb
14
0xed
15
0xee
任务分析:
①行列式键盘接口 ②行列式键盘的基本驱动函数 ③按键输入中存在的问题及解决方法
①行列式键盘接口
逐行扫描法
行列 式键 盘的 扫描 方式
设第2行第 4列键按下 +5V
89C51 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
ROW1
ROW0
1
R
K
2
C
8
4
0
+5V
IC2
D
9
5
1
+12V
1
R
K
3
1
R
K
5
E
6
2
1
R
K

4
B

LED2
E
C
8
V
0
5 1
0
1
5
F
7
3

定 2 闭
4

3

KA1

密码锁按键值显示模块接线图(YL-236单片机实训装置)
软件编程
1、主程序流程图 2、参考程序 3、程序知识点
1、主程序流程图
按键处理函数 流程图
C
EA/VPP 示
D 3
D
PSEN 模
VCC
D 4
E

D 5
e
f
F
D 6
d g G
a
D 7
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
4
D P
c
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
b
LOCKP25来自P26P27+5V
D
D
D
D
D
D
D
D
+5V
7
6
5
4
3
2
1
0
LOCK
COL3
COL2
COL1
COL0
ROW3
ROW2
密码锁按键值显示 主函数流程图
2、参考程序
/****************宏定义*****************/ #include <reg52.h> #define uchar unsigned char #define uint unsigned int #define KEYIO P1 /*************LED数码管端口定义*****************/ unsigned char xdata DM _at_ 0x7fff;//定义总线P2_7 unsigned char xdata PX _at_ 0xbfff;//定义总线P2_6 /*************变量定义*****************/ uchar code tab[]=//共阳极数码管字形码 { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff }; uchar dis_buf[8]=//定义显示缓冲区 { 16,16,16,16,16,16,16,16//tab[16]为0xff,数码管不显示 }; /*************函数声明*****************/ void key(void);//按键扫描函数 void act_key(uchar kv);//按键功能执行函数 void display(void);//显示函数
③按键输入中存在的问题及解决方法
(1)键抖动 这个问题前文已有说明,这里不再重复。 (2)重键 有时由于操作不小心,可能会同时按下几个键,这种问题称为重键。 处理重键的方法有很多,这里只介绍最简单的一种处理方法。如果“n个键同时按下”,即 只处理一个键,任何其他按下又松开的键不产生任何代码。通常第一个被按下或最后一个松开 的键产生键码。这种方法最简单,也最常用。 (3)按键持续时间的长短不一 按键稳定闭合时间的长短是由操作人员的按键动作决定的,一般为零点几秒至数秒。为了保 证无论按键持续时间长短,单片机对按键的一次闭合仅作一次键输入处理,必须等待按键释放 之后,再进行按键功能的处理操作。
G
XTAL2
XTAL1
P3.7(RD)
P3.6(WR)
P3.5(T1)
P3.4(T0)
P3.3(INT1)
P3.2(INT0)
P3.1(Txd)
P3.0(Rxd)
Reset
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
e
f
CS2
N
P25
D
W R
d g
a
IC1
c
b
8


D 0

A
D 1
相关文档
最新文档