小键盘按键识别(微机原理课程设计).doc_第1页
小键盘按键识别(微机原理课程设计).doc_第2页
小键盘按键识别(微机原理课程设计).doc_第3页
小键盘按键识别(微机原理课程设计).doc_第4页
小键盘按键识别(微机原理课程设计).doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

学习资料收集于网络 仅供参考 学习资料 微机原理与接口技术 课程设计报告 专专 业 业 班班 级 级 姓姓 名 名 学学 号 号 指导教师评语 成绩 签名 年 月 日 学习资料收集于网络 仅供参考 学习资料 小键盘按键识别 一 一 课题任务与要求 实验箱上有一个 24 键小键盘 出厂时按键接点已经按图所示连接 小 键盘有 8 根横向引出线 实验前将 8 根横向引出线与 PA0 PA7 相连 3 根 纵向引出线与 PB0 PB2 相连 再从 I O 口地址译码器 选择一个译码器 输出连接到 8255 的片选端 做好上述连接之后 就构成了以 8255 为核心 的键盘输入电路要求 在实际的自动控制系统中 键盘输入电路的作用是输入数据 0 9 A F 或者输入控制信号 G M P R W X Y S 实现上述 功能的核心程序是 按键识别 本实验要求设计按键识别程序 当按下小键盘上某一个键的时候 主 机屏幕显示闭合键的键名 按下小键盘 R 键之后停止演示 二 二 完成任务的方法或方案简介 本程序显示数字 0 到 9 刚刚开始提出两中解决方案一是用跳转法直接显示数值 二是用 查找法间接显示数值 本程序是用第一种方案 虽然程序多了些 但直观容易理解 故采 纳第一种方案 DISPLAY 函数用来将 BUFFER 中的键值显示在数码管上 设定 A 口方式 0 输出 B 口方式 0 输入 GETINPUT 函数通过行值和列值查出输入的键值 并将它保存在 AL 中 如果输入 是 R 则 AL 赋值为 FFH 如果输入非法字符 则 AL 赋值为 0AH 设定如果是 R 则退出程序 CHANGE 函数用来改变 BUFFER 中保存的键值 将 BUFFER 中的键值移位 最后 一位加入 AL 中的新键值 CLOSEALL 此函数用在退出程序时将数码管关闭 以上是主题函数 在设计过程中还碰到了一些细节问题 例数码管的显示才用延迟 20MS 的办法解决 具体方案在 DISPLAY 函数中 学习资料收集于网络 仅供参考 学习资料 三 实现系统 1 程序框图 程序框图 预置 A 口为方 式 0 输出 B 口为方 式 0 输入 0PA7 PA0 PB2 PB0 AH AH 7 延时 20ms 预置 B 口为方式 0 输出 A 口为方式 0 输入 列值 PB2 PB0 PA7 PA0 AL 根据 AX 内容 查找键值表 显 示相应的键值 是 R 结束演示 2 实验电路图 实验电路图 学习资料收集于网络 仅供参考 学习资料 3 8255 方式选择控制字方式选择控制字 1 D6 D5 D4 D3 D2 D1 D0 4 源程序 源程序 TITLE LITTLEKEYBOARD SSEG SEGMENT PARA STACK STACK 方式 选择 控制 字标 志 A 组方式 00 方式 0 01 方式 1 1X 方式 2 A 口 IO 1 输入 0 输出 C 上半 口 IO 1 输入 0 输出 B 组方式 0 方式 0 1 方式 1 B 口 IO 1 输入 0 输出 C 下半口 IO 1 输入 0 输出 学习资料收集于网络 仅供参考 学习资料 DB 256 DUP 0 SSEG ENDS DSEG SEGMENT A 8255 EQU 210H B 8255 EQU 211H CON 8255 EQU 213H BUFFER DB 6 DUP 0 HANG DB LIE DB NEWHANG DB NEWLIE DB TABLE DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH DSEG ENDS CSEG SEGMENT ASSUME CS CSEG DS DSEG SS SSEG START PROC NEAR MOV AX DSEG MOV DS AX CALL CLOSEALL 关掉数码管 防止因为最初数码管有显示而使程序执行不正常 CMPAGAIN CALL DISPLAY DISPLAY 函数用来将 BUFFER 中的键值显示在数码管上 MOV DX CON 8255 MOV AL 10000010B OUT DX AL 设定 A 口方式 0 输出 B 口方式 0 输入 AGAIN CALL DISPLAY MOV DX A 8255 学习资料收集于网络 仅供参考 学习资料 MOV AL 0 OUT DX AL 0 PA7 PA0 MOV DX B 8255 IN AL DX AND AL 00000111B 取出 PB0 PB2 CMP AL 00000111B JE AGAIN MOV LIE AL 将列值保存 CALL DELAY1 延时 20ms MOV DX CON 8255 MOV AL 10010000B OUT DX AL 预置 A 口方式 0 输入 B 口方式 0 输入 MOV DX A 8255 IN AL DX MOV HANG AL 将行值保存 CALL GETINPUT GETINPUT 函数通过行值和列值查出输入的键值 并将它保存在 AL 中 如果输入是 R 则 AL 赋值为 FFH 如果输入非法字符 则 AL 赋值为 0AH CMP AL 0AH JE CMPAGAIN 如果是非法字符则跳回 CMP AL 0FFH JNE CONTINUE 如果是 R 则退出程序 CALL CLOSEALL MOV AH 4CH INT 21H CONTINUE CALL CHANGE 学习资料收集于网络 仅供参考 学习资料 CHANGE 函数用来改变 BUFFER 中保存的键值 MOV DX CON 8255 MOV AL 10000010B OUT DX AL 设定 A 口方式 0 输出 B 口方式 0 输入 LLL CALL DISPLAY MOV DX B 8255 IN AL DX AND AL 00000111B 取出 PB0 PB2 CMP AL 00000111B JNE LLL JMP CMPAGAIN 不断扫描 如果不松开按键 那么就循环等待 直到按键松开就跳回 RET START ENDP 此函数用以延时 20MS DELAY1 PROC NEAR PUSH AX PUSH CX PUSH DX MOV AH 86H MOV CX 0 MOV DX 20000 INT 15H POP DX POP CX POP AX 学习资料收集于网络 仅供参考 学习资料 RET DELAY1 ENDP GETINPUT 函数通过行值和列值查出输入的键值 并将它保存在 AL 中 如果输入是 R 则 AL 赋值为 FFH 如果输入非法字符 则 AL 赋值为 0AH GETINPUT PROC NEAR CMP LIE 00000110B JE LIE0 CMP LIE 00000101B JE LIE1 CMP LIE 00000011B JE LIE2 MOV AL 0AH RET LIE2 CMP HANG 00010000B JE NEXT MOV AL 0AH RET NEXT MOV AL 0FFH RET LIE0 CMP HANG 01111111B JE KEY8 CMP HANG 10111111B JE KEY9 MOV AL 0AH RET KEY8 MOV AL 8 RET KEY9 MOV AL 9 RET 学习资料收集于网络 仅供参考 学习资料 LIE1 CMP HANG 01111111B JE KEY0 CMP HANG 10111111B JE KEY1 CMP HANG 11011111B JE KEY2 CMP HANG 11101111B JE KEY3 CMP HANG 11110111B JE KEY4 CMP HANG 11111011B JE KEY5 CMP HANG 11111101B JE KEY6 CMP HANG 11111110B JE KEY7 MOV AL 0AH RET KEY0 MOV AL 0 RET KEY1 MOV AL 1 RET KEY2 MOV AL 2 RET KEY3 MOV AL 3 RET KEY4 MOV AL 4 RET KEY5 MOV AL 5 RET 学习资料收集于网络 仅供参考 学习资料 KEY6 MOV AL 6 RET KEY7 MOV AL 7 RET GETINPUT ENDP CHANGE 函数用来改变 BUFFER 中保存的键值 将 BUFFER 中的键值移位 最后一位加 入 AL 中的新键值 CHANGE PROC NEAR PUSH AX PUSH SI MOV SI OFFSET BUFFER MOV AH SI 1 MOV SI AH MOV AH SI 2 MOV SI 1 AH MOV AH SI 3 MOV SI 2 AH MOV AH SI 4 MOV SI 3 AH MOV AH SI 5 MOV SI 4 AH MOV SI 5 AL POP SI POP AX RET CHANGE ENDP DISPLAY 函数用来将 BUFFER 中的键值显示在数码管上 DISPLAY PROC NEAR 学习资料收集于网络 仅供参考 学习资料 PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI MOV BX OFFSET TABLE MOV SI OFFSET BUFFER MOV CL 1 XUNHUAN MOV AL SI XLAT MOV DX 201H OUT DX AL MOV DX 200H MOV AL CL OUT DX AL MOV DX 200H MOV AL 0 OUT DX AL INC SI SHL CL 1 CMP CL 40H JNE XUNHUAN POP SI POP DX POP CX POP BX POP AX RET DISPLAY ENDP 学习资料收集于网络 仅供参考 学习资料 此函数用在退出程序时将数码管关闭 CLOSEALL PROC NEAR PUSH AX PUSH CX PUSH DX MOV CL 1 XUNHUAN1 MOV DX 200H MOV AL CL OUT DX AL MOV AL 0 OUT DX AL SHL CL 1 CMP CL 20H JNE XUNHUAN1 POP DX POP CX POP AX RET CLOSEALL ENDP CSEG END END START 四 程序运行结果分析 六 实验总结 六 实验总结 1 实验电路板上 8255 的端口地址位 210H 213H 这与书上给的不一样 开始时在 这方面花费了较多时间 2 通过此次程序设计 我对计算机读取键盘值的过程有了一定的认识 最开始编程序 时并没有想到如果始终按同一个键不放 数码管上就会一下子出来很多字符 调试时发现 学习资料收集于网络 仅供参考 学习资料 了这个问题 想到的解决方法有两种 一种是每一次按键后检测键是否松开 直到松开后 再继续

温馨提示

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

评论

0/150

提交评论