小键盘按键识别(微机原理课程设计)
《微机原理》课程设计说明书_键盘电子乐器

《微机原理》课程设计说明书_键盘电子乐器武汉理工大学《微机原理》课程设计说明书课程设计任务书学生姓名: 专业班级: 电气0805班指导教师: 工作单位: 自动化学院题目: 键盘电子乐器初始条件:掌握汇编语言程序设计方法,所设计的程序运行后可通过键盘控制,满足系统功能,并实现该系统设计方案。
在DOS,windows,汇编软件环境下运行。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.设计一个用键盘演奏音乐的程序,计时器系统设计编程定时输出――电子音调,用pc机内部8253time~使扬声器发声。
用汇编语言对8253进行编程,使其OUT0上输出一定的频率,将其一定频率输出到喇叭上,演奏出不同的音节。
pc机的数字键(1,7)作为电子音调的音调选择2. 课程设计说明书应包括:a)设计任务及要求b)方案比较及认证c)程序设计基本思想,程序流程图,部分源程序及注解d)调试记录及结果分析e)参考资料f)附录:全部源程序清单g)总结时间安排:2011年元月07日--元月09日选题、查阅资料和方案设计 2011年元月10日--元月14日编程2011年元月15日--元月16日调试程序,改进与提高2011年元月17日撰写课程设计报告(有调试过程及结果的截屏) 2011年元月18日答辩和交课程设计报告指导教师签名: 2011 年元月 6 日系主任(或责任教师)签名: 年月日1武汉理工大学《微机原理》课程设计说明书摘要利用PC上的定时/计数芯片8253A控制PC扬声器发声。
编写内核模块,直接操作扬声器相关端口,或字符设备驱动,供应用程序调用,用键盘使其发出不同的声音。
关键字:8253 定时器中断2武汉理工大学《微机原理》课程设计说明书目录1. 方案比较 ....................................... 42.芯片介绍 (4)2.1 8255芯片简述 (4)2.1.1 8255三种方式下工作 (4)2.2 8253芯片简述 (5)2.2.1 8253六种工作方式 ........................ 63.通用发声程序 ..................................... 7 4.音调与频率和时间的关系 ........................... 11 附录 (13)附录一: (13)附录二: (14)附录三: (26)附录四: (27)附录五: ...................................... 32 参考文献 (33)3武汉理工大学《微机原理》课程设计说明书键盘电子乐器1.方案比较1.1 发声程序循环优点:简单,易于思维缺点:程序过于长,比较繁琐1.2 调用宏,进行发声优点:程序短缺点:不易想到2.芯片介绍2.1 8255芯片简述8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,+5V单电源供电。
微机原理课程设计打字

微机原理课程设计打字一、课程目标知识目标:1. 理解微机原理的基本概念,掌握计算机硬件的基本组成及其工作原理;2. 学习并掌握打字的基本技巧,熟悉键盘布局,了解打字的正确姿势及指法;3. 了解打字软件的基本功能,能够运用软件进行打字练习和测试。
技能目标:1. 培养学生具备一定的打字速度和准确性,提高信息处理能力;2. 学会使用打字软件进行自主练习,养成独立学习的良好习惯;3. 能够运用所学知识,解决实际打字过程中遇到的问题。
情感态度价值观目标:1. 培养学生对计算机科学的兴趣和好奇心,激发学习积极性;2. 培养学生具备耐心、细心的品质,提高克服困难的自信心;3. 增强团队合作意识,学会在小组合作中互相学习、互相帮助;4. 培养学生遵守网络道德规范,养成良好的计算机使用习惯。
课程性质:本课程为实践性较强的课程,注重理论知识与实际操作相结合。
学生特点:学生处于掌握基本计算机知识的阶段,对新鲜事物充满好奇,但学习耐心和自律性有待提高。
教学要求:结合学生特点,注重启发式教学,以学生为主体,教师为主导,培养学生的实际操作能力。
在教学过程中,关注学生的个体差异,因材施教,确保每个学生都能达到课程目标。
将目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. 计算机硬件基本组成:讲解微机原理中的CPU、内存、输入输出设备等硬件组成,及其工作原理;相关教材章节:第一章 计算机硬件基本组成2. 键盘指法训练:介绍键盘布局,教授打字的正确姿势及指法,进行基础指法练习;相关教材章节:第二章 键盘与指法3. 打字技巧与练习:讲解打字的基本技巧,如盲打、连打等,组织学生进行打字练习;相关教材章节:第三章 打字技巧与练习4. 打字软件的使用:介绍打字软件的基本功能,教授如何使用软件进行打字练习和测试;相关教材章节:第四章 打字软件的使用5. 实践操作与提高:组织学生进行实际打字操作,提高打字速度和准确性,针对学生个体差异进行指导;相关教材章节:第五章 实践操作与提高教学内容安排与进度:第一周:计算机硬件基本组成学习;第二周:键盘指法训练;第三周:打字技巧与练习;第四周:打字软件的使用;第五周:实践操作与提高,进行总结测试。
认识部分功能键及小键盘区的应用教案

认识键盘第一课时教学目标:1、掌握主键盘区部分功能键的作用及使用方法。
2、熟练运用主键盘输入字符。
德育目标:通过学习培养爱惜微机室的公共财物,正确合理的使用计算机。
课时安排:1课时。
【教学重点:主键盘区部分功能键的作用及使用方法。
教学难点:熟练运用主键盘输入字符。
教学方法:1、采用启发式、讨论式、探究式、互动式等多种教学方法,启发和引导学生的学习活动,充分发挥学生的主体作用。
2、注重教学方法的灵活性,讲授时注意多种方法的结合,使教学内容丰富而不单调,教学过程生动而不枯燥,吸引学生注意,提高学习兴趣。
3、提倡学生自主学习、协作学习、研究性学习,鼓励学习方法的多样性。
以“问题解决式”为主,注重知识的连惯性。
,4、将现代化教学手段、多媒体教学网络与图表、实物等传统教学手段有机结合起来,让学生积极主动地参与教学活动,及时理解和掌握所学知识。
教学准备:1、多媒体教学网络。
2、功能键名称图。
3、学生练习。
授课时间:教学过程:、一、复习导入有谁愿意先来帮大家回忆一下上节课我们学习了什么内容1、键盘分区(出示课件)键盘一般分成四个区,分别是主键盘区、功能键区、光标控制区和小键盘区。
出示键盘分区图片:游戏:谁的反应快教师任意指出键盘四个分区中的一个分区,学生齐答键盘区名称。
2、主键盘区\主键盘区分为:(1)字母键(标有A—Z二十六个字母的键,叫做字母键,用于向计算机输入相应的字母。
)(2)双字符键:双字符键分为数字键(上标有0—9十个数字的键,叫数字键,用于向计算机输入相应的数字。
)和符号键(在键帽上有两个符号的键我们称为符号键,共有十一个,用于向计算机输入相应的符号。
)双字符键共有21个二、新授1、三个功能键a、空格键(键盘最下面长条形状的键,叫做空格键,一般用Space 表示)b、回车键(标有Enter的键,叫做回车键。
书写时常用来表示。
执行一个命令或需要换行时,一般都要按一次回车键)c、退格键(标有或Backspace的键,叫做退格键。
小键盘按键识别数码管移位显示

微机原理与接口技术课程设计实验报告《微机原理与接口技术》课程设计评分标准1、对课程设计的目的和意义的表述和理解 5分12、总体方案设计 5分3、硬件电路设计:(1)按给定的要求正确的设计出8086最小模式电路图 5分(2)按给定的要求正确的设计出各所需的译码电路图 5分(3)按给定的要求正确的设计出各所需的接口电路图 5分(4)按给定的要求正确的设计出系统硬件电路图 5分4、软件设计:(1)按所设计系统的要求给出正确的程序流程图 5分(2)按给定的要求正确的编写出各接口的初始化程序 5分(3)按给定的要求正确的编写出主程序 10分(4)对所编写的程序有注释说明 5分5、设计报告的书写:(1)阐明了硬件设计的基本原理和设计要求与方法 5分(2)阐明了软件设计的基本原理和方法 5分6、按时完成设计任务 10分7、考勤 5分8、答辩 20分答辩表2小键盘按键识别数码管移位显示设计内容:用系统小键盘输入控制数码管的移位显示。
设计目的:掌握“行扫描”按键识别的原理,掌握行扫描按键识别的编程技术设计要求:3用行扫描技术识别小键盘.将小键盘键入的任意长度的由0—9组成的数字串,采用左移位显示的方法显示任数码管上(仿照移动电话显示屏的显示效果),当小键盘按下F键时,程序结束。
一、课程设计的目的和意义:学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼,它具有动手、动脑,理论联系实际的特点,是培养我们工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。
通过这次设计实践能够进一步加深我们对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
二、总体设计方案:(1)在数据段设置两张表,一张是0—9的键值表,一张是0—9的字形编码表。
小键盘按键识别实验--实验报告-孔令宇-10284032

小键盘按键识别实验学生:孔令宇班级:计科10级1006班任课教师:吴为民一、实验目的掌握用软件方法识别行列式键盘按键的原理和方法,以此进一步理解和掌握8255并行接口的原理和使用方法。
二、实验内容将小键盘的键号(S1-S16)用16进制数0-F在7段数码管上显示。
三、实验原理图四、实验流程五、实验代码.model small.386data segmenti8255_a equ 200hi8255_b equ 201hi8255kz equ 203hled_cs equ 210hledcode db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,67h,77h,7ch,39h,5eh,79h,71hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,i8255kz ;8255 命令口mov al,10000010 ;设置8255控制字:0方式A口输出,B口输入 out dx,al ;输出8255控制字L1 : call readkey ;判断行线、列线状态mov bh,ah ;AH=行线状态mov bl,al ;AL=列线状态call delay ;延时20-30mscall readkey ;再次判断行线、列线状态是否与第一次相同cmp bl,al ;比较al和bl的值jnz start ;不相等则跳至start cmp bh,ah ;比较bh ,ah 的值 jnz start ;不相等则跳至start call keyup ;等待键释放后再处理 mov ax,bxcall cmpoffset ;调用求键值的子程序cmpoffset call disp ;调用求键值的子程序disp ,显示数字 call delay ;延时20-30msjmp L1 ;循环进行将小键盘输出到数码管显示readkey proc mov ah,11111110 scan: mov al,ahmov dx,i8255_a ;8255 A 口out dx,al ;输出一行线为低 mov dx,i8255_b ;8255 B 口in al,dx ;输入列线状态or al,0f0h ;高四位置1,低四位为列线状态 cmp al,0ffh ;检查是否有按键按下jne exitkey ;有键按下,退出rol ah,1 ;没有键按下则检查下一行 jmp scan exitkey: ret readkey endpdelay proc push cx mov cx,8000h ;延时delay1: loop delay1pop cx ret delay endp keyup procnoup: mov al,ahmov dx,i8255_a ;8255 A 口 out dx,al ;输出行线 mov dx,i8255_b ;8255 B 口in al,dx ;读入列线or al,0f0h ;与0f0h 相或,为判断按键是否释放提供数据cmp al,0ffh ;按键是否释放 je exit ;已释放,退出 jmp noup ;未释放,继续检查exit: ret keyup endpcmpoffset procnot ah ;行值取反not al ;列值取反mov bh,00hmov bl,00hkk: shr ah,1jc next1add bh,4h ;一行4列jmp kknext1: shr al,1jc next2add bl,1 ;列号加1jmp next1next2: add bh,bl ;求得键值mov al,bhcmpexit: retcmpoffset endpdisp procpush bxpush dxmov bx,offset ledcode ;将偏移地址放bx中 mov ah,0add bx,axmov al,[bx]mov dx,led_cs ;段选out dx,almov al,01h ;位选inc dxout dx,alpop dxpop bxretdisp endpcode endsend start六、实验现象将实验代码在“386EX微机实验集成开发环境中”编译生成可执行文件后,在“386EX 微机实验集成开发环境中”全速运行程序后,按动试验箱右下方的小键盘中任意一个数字,在数码管中以十进制的方式显示该数字。
小学信息技术教案《认识键盘》

小学信息技术教案《认识键盘》(实用版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的实用范文,如工作总结、策划方案、演讲致辞、报告大全、合同协议、条据书信、党团资料、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, this shop provides various types of practical sample essays for everyone, such as work summary, planning plan, speeches, reports, contracts and agreements, articles and letters, party and group materials, teaching materials, essays, other sample essays, etc. Please pay attention to the different formats and writing methods of the model essay!小学信息技术教案《认识键盘》小学信息技术教案《认识键盘》作为一名辛苦耕耘的教育工作者,时常会需要准备好教案,教案是保证教学取得成功、提高教学质量的基本条件。
键盘录入数据的转换与显示微机原理课程设计

微机原理课程设计题目: 键盘录入数据的转换与显示初始条件:从键盘读入二个五位十进制数(1位符号位+4位数值位),并将这二个十进制数,分别转换为二进制数,然后求其和,再将和以十进制形式进行显示。
按Q退出程序。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图摘要:本文所设计的程序是运行于硬件和DOS操作系统下的,本程序通过调用DOS下的基本输入输出中断,实现数据的输入和输出。
程序中有两个子程序,输入的两个五位的十进制数通过调用一个叫ASC_TO_BIN的子程序可以将其转换成二进制数,然后求两个二进制数的和,求和完成后,再调用一个叫BIN_TO_ASCII的子程序将二进制和转换成相应的ASCII码,调用DOS输出中断显示在屏幕上,最后看用户是否输入的是Q或者q,若是则程序结束,若不是则程序循环。
关键字:8086;DOS系统;ASCII码;中断目录1设计任务及要求分析 (1)1.1设计任务 (1)1.2要求分析 (1)2方案比较及认证说明 (2)3系统原理阐述 (3)3.1统设计的软硬件环境 (3)3.2统设计中用到的DOS调用 (3)4软件设计说明 (5)4.1 ASCII码转换成二进制算法实现 (5)4.2二进制转换成ASCII码算法实现 (5)4.3主程序结构分析 (5)4.4子程序结构分析 (6)4.5中断程序的结构分析 (8)5调试记录及结果分析 (9)5.1调试记录 (9)5.2调试结果分析 (9)总结和心得体会 (10)参考文献 (11)附录一源程序和程序注释 (12)附录二程序运行结果截图 (16)附录三本科生课程设计成绩评定表 (17)附录四评定项目表 (18)键盘录入数据的转换与显示1设计任务及要求分析1.1设计任务从键盘读入二个五位十进制数(1位符号位+4位数值位),并将这二个十进制数,分别转换为二进制数,然后求其和,再将和以十进制形式进行显示。
按键识别和数码管显示微机系统实验

1.设计内容用系统小键盘输入控制数码管的位移显示。
2.设计目的掌握:“行扫描”按键识别的原理,掌握行扫描按键识别的编程设计技术。
3:设计任务与要求用行扫描技术识别小键盘,将小键盘入得任意长度的有0~9组成的数字串,采用左移位显示的方法显示在数码管上(仿照移动电话显示屏的显示效果),当小键盘按下F键时,程序结束。
4:设计思想1:程序中应设置七段码表和显示缓冲区,并调用显示子程序进行显示。
该子程序访问显示缓冲区并进行数码显示。
例如,若显示“0123”,则显缓内应置入数据0、1、2、3;当显缓中数据改为10、11、12、13时,可显示数码“AbCd”。
由于实验中的数码管为共阴结构,且“段”和“位”分别采用74LS240反相驱动和7407同相驱动,故二者均低电平有效(点亮)。
程序应采用共阳形式的七段码表(即“0”的七段码为0C0H)。
2: 用8255的C口作4*4键盘接口,采用行列反转法所示的硬件电路其行、列结构完全对称)识别按键,将按键键值(0~F)送串行口、以字符形式将它显示在PC机的屏幕上。
注意,按键键值应转成ASCII码后再用INT 14H的AH=1子功能上传到PC机进行显示。
5:主要元器件介绍MUT—Ⅲ型实验箱,8086CPU模块,8255、LED数码管1、8255的内部结构数据总线缓冲器读/写控制部件A组控制部件B组控制部件A组端口A(8)A组端口C上半部(4)B组端口C上半部(4)B组端口B(8)双向数据总线D7~D0RDWRA1A0 RESETCS 8位内部数据总线I/OPA7~PA0I/OPC7~PC4I/OPC3~PC0I/OPB7~PB02、LED数码管共阴极的情况下定义字形码:FECDBA9876543210 6:硬件连线1、实验接线CS0 CS8255(地址为04A0H);PA0~PA7(输入) RL10~RL17(列选择线);PB0~PB7(输出) 发光二极管LED-A~LED-DP ;PC0~PC2(输出) KA10~KA12(行选择线)PC3(输出) LED14*4键盘7:程序流程图8255的电路连接8:程序源代码MY8255_A EQU 0600HMY8255_B EQU 0602HMY8255_C EQU 0604HMY8255_CON EQU 0606HSSTACK SEGMENT STACKDW 16 DUP(?)SSTACK ENDSDATA SEGMENTDTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,3000HMOV AL,00HMOV [SI],AL ;清显示缓冲MOV [SI+1],ALMOV [SI+2],ALMOV [SI+3],ALMOV [SI+4],ALMOV [SI+5],ALMOV DI,3005HMOV DX,MY8255_CON ;写8255控制字MOV AL,81HOUT DX,ALBEGIN: CALL DIS ;调用显示子程序CALL CLEAR ;清屏CALL CCSCAN ;扫描JNZ INK1JMP BEGININK1: CALL DISCALL DALLYCALL DALLYCALL CLEARCALL CCSCANJNZ INK2 ;有键按下,转到INK2JMP BEGININK2: MOV CH,0FEHMOV CL,00HCOLUM: MOV AL,CHMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXL1: TEST AL,01H ;is L1? JNZ L2MOV AL,00H ;L1JMP KCODEL2: TEST AL,02H ;is L2? JNZ L3MOV AL,04H ;L2JMP KCODEL3: TEST AL,04H ;is L3? JNZ L4MOV AL,08H ;L3JMP KCODEL4: TEST AL,08H ;is L4? JNZ NEXTMOV AL,0CH ;L4 KCODE: ADD AL,CLCALL PUTBUFPUSH AXKON: CALL DISCALL CLEARCALL CCSCANJNZ KONPOP AXNEXT: INC CLMOV AL,CHTEST AL,08HJZ KERRROL AL,1MOV CH,ALJMP COLUMKERR: JMP BEGINCCSCAN: MOV AL,00HMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXNOT ALAND AL,0FHRETCLEAR: MOV DX,MY8255_BMOV AL,00HOUT DX,ALRETDIS: PUSH AXMOV SI,3000HMOV DL,0DFHMOV AL,DLAGAIN: PUSH DXMOV DX,MY8255_AOUT DX,ALMOV AL,[SI]MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AXMOV AL,[BX]MOV DX,MY8255_BOUT DX,ALCALL DALLYINC SIPOP DXMOV AL,DLTEST AL,01HJZ OUT1ROR AL,1MOV DL,ALJMP AGAINOUT1: POP AXRETDALLY: PUSH CXMOV CX,0006HT1: MOV AX,009FHT2: DEC AXJNZ T2LOOP T1POP CXRETPUTBUF: MOV SI,DIMOV [SI],ALDEC DICMP DI,2FFFHJNZ GOBACKMOV DI,3005H GOBACK: RETCODE ENDSEND START。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与接口技术课程设计报告专业:班级:姓名:学号:小键盘按键识别一.课题任务与要求实验箱上有一个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、程序框图:2、实验电路图:3、8255方式选择控制字1D6D5D4D3 D2 D1 D04、源程序:TITLE LITTLEKEYBOARDSSEG SEGMENT PARA STACK 'STACK' DB 256 DUP (0)SSEG ENDSDSEG SEGMENTA_8255 EQU 210HB_8255 EQU 211HCON_8255 EQU 213HBUFFER 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 ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG,SS:SSEGSTART PROC NEARMOV AX,DSEGMOV DS,AXCALL CLOSEALL(关掉数码管,防止因为最初数码管有显示而使程序执行不正常。
) CMPAGAIN:CALL DISPLAY(DISPLAY函数用来将BUFFER中的键值显示在数码管上。
)MOV DX,CON_8255MOV AL,10000010BOUT DX,AL(设定A口方式0输出,B口方式0输入)AGAIN:CALL DISPLAYMOV DX,A_8255MOV AL,0OUT DX,AL (0->PA7---PA0)MOV DX,B_8255IN AL,DXAND AL,00000111B (取出PB0-PB2CMP AL,00000111BJE AGAINMOV LIE,AL(将列值保存)CALL DELAY1(延时20ms)MOV DX,CON_8255MOV AL,10010000BOUT DX,AL(预置A口方式0输入,B口方式0输入)MOV DX,A_8255IN AL,DXMOV HANG,AL(将行值保存)CALL GETINPUT(GETINPUT函数通过行值和列值查出输入的键值,并将它保存在AL中,如果输入是R,则AL赋值为FFH;如果输入非法字符,则AL赋值为0AH。
)CMP AL,0AHJE CMPAGAIN(如果是非法字符则跳回)CMP AL,0FFHJNE CONTINUE(如果是R则退出程序.)CALL CLOSEALLMOV AH,4CHINT 21HCONTINUE:CALL CHANGE(CHANGE函数用来改变BUFFER中保存的键值)MOV DX,CON_8255MOV AL,10000010BOUT DX,AL(设定A口方式0输出,B口方式0输入)LLL:CALL DISPLAYMOV DX,B_8255IN AL,DXAND AL,00000111B(取出PB0-PB2)CMP AL,00000111BJNE LLLJMP CMPAGAIN(不断扫描,如果不松开按键,那么就循环等待;直到按键松开就跳回。
) RETSTART ENDP;*********************************(此函数用以延时20MS)DELAY1 PROC NEARPUSH AXPUSH CXPUSH DXMOV AH,86HMOV CX,0MOV DX,20000INT 15HPOP DXPOP CXPOP AXRETDELAY1 ENDP;********************************(GETINPUT函数通过行值和列值查出输入的键值,并将它保存在AL中,如果输入是R,则AL赋值为FFH;如果输入非法字符,则AL赋值为0AH。
)GETINPUT PROC NEAR CMP LIE,00000110BJE LIE0CMP LIE,00000101BJE LIE1CMP LIE,00000011BJE LIE2MOV AL,0AHRETLIE2:CMP HANG,00010000B JE NEXTMOV AL,0AHRETNEXT:MOV AL,0FFHRETLIE0:CMP HANG,01111111B JE KEY8CMP HANG,10111111BJE KEY9MOV AL,0AHRETKEY8:MOV AL,8RETKEY9:MOV AL,9RETLIE1:CMP HANG,01111111B JE KEY0CMP HANG,10111111BJE KEY1CMP HANG,11011111BJE KEY2CMP HANG,11101111BJE KEY3CMP HANG,11110111BJE KEY4CMP HANG,11111011B JE KEY5CMP HANG,11111101B JE KEY6CMP HANG,11111110B JE KEY7MOV AL,0AHRETKEY0:MOV AL,0RETKEY1:MOV AL,1RETKEY2:MOV AL,2RETKEY3:MOV AL,3RETKEY4:MOV AL,4RETKEY5:MOV AL,5RETKEY6:MOV AL,6RETKEY7:MOV AL,7RETGETINPUT ENDP;**********************************(CHANGE函数用来改变BUFFER中保存的键值,将BUFFER中的键值移位,最后一位加入AL中的新键值。
)CHANGE PROC NEARPUSH AXPUSH SIMOV SI,OFFSET BUFFERMOV AH,[SI+1]MOV [SI],AHMOV AH,[SI+2]MOV [SI+1],AHMOV AH,[SI+3]MOV [SI+2],AHMOV AH,[SI+4]MOV [SI+3],AHMOV AH,[SI+5]MOV [SI+4],AHMOV [SI+5],ALPOP SIPOP AXRETCHANGE ENDP;**********************************(DISPLAY函数用来将BUFFER中的键值显示在数码管上。
) DISPLAY PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIMOV BX,OFFSET TABLE MOV SI,OFFSET BUFFER MOV CL,1 XUNHUAN:MOV AL,[SI]XLATMOV DX,201HOUT DX,ALMOV DX,200HMOV AL,CLOUT DX,ALMOV DX,200HMOV AL,0OUT DX,ALINC SISHL CL,1CMP CL,40HJNE XUNHUANPOP SIPOP DXPOP CXPOP BXPOP AXRETDISPLAY ENDP;********************************* (此函数用在退出程序时将数码管关闭.)CLOSEALL PROC NEARPUSH AXPUSH CX PUSH DXMOV CL,1 XUNHUAN1: MOV DX,200H MOV AL,CL OUT DX,AL MOV AL,0OUT DX,AL SHL CL,1 CMP CL,20H JNE XUNHUAN1 POP DXPOP CXPOP AXRET CLOSEALL ENDPCSEG ENDEND START四、程序运行结果分析:六.实验总结:1.实验电路板上8255的端口地址位210H-213H,这与书上给的不一样,开始时在这方面花费了较多时间。
2.通过此次程序设计,我对计算机读取键盘值的过程有了一定的认识。
最开始编程序时并没有想到如果始终按同一个键不放,数码管上就会一下子出来很多字符。
调试时发现了这个问题,想到的解决方法有两种,一种是每一次按键后检测键是否松开,直到松开后再继续执行下一次判断;另一种是按键后延缓一个固定的时间(大约0.2秒)再判断(计算机的键盘就是采取这样的方法)。
本程序采用的是第一种方法。
3.编程序要养成好的习惯,我最初的程序结束时并没有关掉数码管,以致下次用时数码管显示不正确。
好的程序应该各方面想得周到一些,例如我后来在开始和结束时都加了关闭数码管程序(CLOSEALL),这就避免了上述问题。
4.我并没有采用查表得方法来获得键值,我觉得用跳转的方法能使程序的可读性强一些。
当然,程序代码会长许多,但此法由于思路清楚,比较容易查错。