4×4小键盘按键检测识别
本学期刚开学,我们进行了微机原理课程设计,我们小组选择了4×4小键盘按键检测识别这个综合性题目。
具体课设过程记录如下:
具体所需器材:
在本次课程设计中,我们使用了16个按键,4个10k电阻,1个8255A芯片,两位8段共阴极数码管,导线若干。
设计思想:
- 将16个按键,按照4行4列的方式摆放,模拟4行4列的方式摆放,模拟4×4的矩形小键盘,再通过8255A芯片,将按键对应的数码管显示字符显示在数码管上,其中按键从左至右,从上至下依次显示的是“0~15”。
- 按键扫描的具体思想是:首先从第一行到第四行依次判断,是否有某一行有键按下,如果有,确定该行第一个按键所对应的的数码管的字形码,当确定了行之后,利用移位操作,来寻找该行中按下的键所在列,至此,已经可以确定按键位置。这里需要注意的是——消抖,防止电路抖动,造成不期望看到的现象。
8255A的接线如下:
(图片来自网络)
我们采取如下的接线方式:
- D0-D7:系统总线XD0-XD7,控制字设为81H(即:AB端口设为方式0下的输出模式,PC0-PC3设置为方式0下的输入模式)
- PB0-PB7:两位8段数码管的引脚A-G,以及DP
- PA4-PA5:两位8段数码管的位控1-2
- PA0-PA3:输出模式,接4*4小键盘
- PC0-PC3:输入模式,接4*4小键盘
proteus仿真图:
附有proteus安装包链接:
https://pan.baidu.com/s/1t5cMO02vTdWVEJ6qCNNO_Q
代码:
IOY0 EQU 0600H ;片选IOY0对应的端口始地址
MY8255_A EQU 0600H+00H*2 ;8255的A口地址
MY8255_B EQU 0600H+01H*2 ;8255的B口地址
MY8255_C EQU 0600H+02H*2 ;8255的C口地址
MY8255_CON EQU 0600H+03H*2 ;8255的控制寄存器地址
SSTACK SEGMENT STACK
DW 16 DUP(?)
SSTACK ENDS
DATA SEGMENT
ZIXINGMA DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;数码管的字形码
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV SI, 00H
;存储数码管将要显示的0-15对应的字形码
MOV [SI],</