实验5-小键盘按键识别实验_第1页
实验5-小键盘按键识别实验_第2页
实验5-小键盘按键识别实验_第3页
实验5-小键盘按键识别实验_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验5 小键盘按键识别实验实验目的:掌握用软件方法识别行列式键盘的原理和方法实验要求:将小键盘的键号(S1-S16)用十六进制数0-F在7段数码管上显示分析实验设计思想;我们如何确定小键盘上哪个键被按下了?可以利用8255并行接口来进行确定,如果我们将8255的一个端口A作为小键盘行值的输出端口,将8255的另一端口B作为列值的输入端口。就可以完成对键盘按键的位置的确定了。原理如下:键盘采用简单的线性结构,没有键闭合时,各位均处于高电平,当有一个键按下时,就使对应位接地而成为低电平,其他位仍为高电平。举例:举例:如右图所示,如果开关0是闭合的,且第一列的电平为0,那么检测到第一行的端口状态就为

2、低电平。如果4是闭合的,第一列的电平为0,那么第二行的端口状态就为0。就是采用此种方法来判定有那个按键被按下了。扫描方法:先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合。这是通过检查列线电位来实现的。即在第0行接低电平时,看该列线是否为低电平。然后依次给第1行,第2行,第3行赋低电平。分别检测该列线是否为低电平。程序清单及相关注释:.model small.386data segment rowport dw 200h;以A口作为行扫描线,应为输出colport dw 201h;以B口作为列检测线,应为输入controlport dw 203h ;控制字写入端口地址led_cs

3、dw 210h ;led灯片选地址char db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,67h,77h,7ch,39h,5eh,79h,71h;显示0-F16个数字的数码管编码查询是哪行哪列的按键被按下了,0fe表示第0行,0fd表示第2行,0fb表示第3行,0f7表示第4行同理也是具体哪一列的表示,4种组合成16个按键的具体位置table dw 0fefeh ;查询是哪行哪列的按键被按下了,0fe表示第0行,0fd表示第2行,0fb表示第3行,0f7表示第4行同理也是具体哪一列的表示,4种组合成16个按键的具体位置 dw 0fefdh dw 0fefbh d

4、w 0fef7h dw 0fdfeh dw 0fdfdh dw 0fdfbh dw 0fdf7h dw 0fbfeh dw 0fbfdh dw 0fbfbh dw 0fbf7h dw 0f7feh dw 0f7fdh dw 0f7fbh dw 0f7f7h data ends code segment assume cs:code,ds:databeg: mov ax,data mov ds,ax mov dx,controlport ;8255 命令口 mov al,10000010h ;设置8255控制字:0方式A口输出,B口输入 out dx,al ;输出8255控制字L1 : call

5、 key1 ;判断行线、列线状态 mov bh,ah ;AH行线状态 mov bl,al ;AL列线状态 call delay ;延时20-30ms call key1 ;再次判断行线、列线状态是否与第一次相同 cmp bl,al ;比较al和bl的值 jnz beg ;不相等说明此时又有新的按键按下则跳至beg cmp bh,ah ;比较bh,ah的值 jnz beg ;不相等则跳至beg mov ax,bx ;将当前的按键行列值状态赋给ax call disp ;调用程序查表得到按下去键的数码管编码 call delay ;延时20-30ms jmp L1 ;循环进行将小键盘输出到数码管显

6、示 key1 proc mov ah,0feh ;从第0行开始key2: mov al,ah mov dx,rowport ;8255 A口作为扫描线 out dx,al ;输出一行线为低电平 mov dx,colport ;8255 B口检测线 in al,dx ;输入列线状态 or al,0f0h ;高四位置1,低四位为列线状态;与8行不同只有四行 所以高4行就置位1 cmp al,0ffh ;检查是否有按键按下 jne num1 ;有键按下就会有一位为低电平,退出 rol ah,1 ;没有键按下则检查下一行 jmp key2 ;再来一遍循环检查,直至查到有一个键按下为止num1: ret

7、 key1 endp delay proc push cx mov cx,8000h ;延时去除抖动,去除抖动后delay1: loop delay1 pop cx ret delay endp disp proc push bx push dx key3: mov si,offset table;位置表的首地址 mov di,offset char;数码管显示编码表的首地址 mov cx,16;16个按键,因而要比较16次 key4: cmp ax,si;将此时按键的行列状态值与位置表相比较 jz key5;本次查到了对应键的编码值,进行下一步处理 inc si;本次没有查到对应的码值,位置

8、表的位置移动到下一位 inc si;由于是字,加2 inc di;数码管的编码表的值对应加一 loop key4;循环16次,16个按键都要依次的比较 key5: mov al,di ;将数码管的显示编码值赋给寄存器al mov dx,led_cs ;数码管显示段吗地址 out dx,al ;要显示的段码值从该地址输入 mov al,01h ;设置数码管的位选值,是右边第一个 inc dx 从位码地址读入数据 ; out dx,al pop dx pop bx ret disp endpcode ends end beg分析实验结果:将实验代码在“386EX微机实验集成开发环境中”编译生成可执

9、行文件后,在“386EX微机实验集成开发环境中”全速运行程序后,按动试验箱右下方的小键盘中任意一个数字,在数码管中以十进制的方式显示该数字。例如,在上图中在小键盘上按9,在数码管上则显示9。实验问题与解决: 本次试验中我采用的是将要编译的程序写成子程序,然后在主程序中调用的形式,这里就存在一个问题,如果同学是按照书上的程序直接在主程序中编写代码,就一定要加上去除抖动的程序处理步骤。我这里要进行两次按键的判断,第一次通过对小键盘行和列的比较确定某一个按键被按下,在延时20-30ms后,再次进行判断小键盘行、列状况是否与第一次相同,相同则进行计算码值的工作。书上是先整体判断键盘上有无按键按下,若有按键按下就延迟20ms来消除抖动,没有按键按下就再次知行次过程直至有键按下为止。如果不加去除抖动的话就要一直按键才能达到显示数码管值的效果。实验收获与体会:通过本次实验,我对8255的0方式的设置和运用化有了更进一步的认识。本

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论