代码输入器课程设计说明书.doc_第1页
代码输入器课程设计说明书.doc_第2页
代码输入器课程设计说明书.doc_第3页
代码输入器课程设计说明书.doc_第4页
代码输入器课程设计说明书.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

微机原理与接口技术课程设计说明书代码输入器设计起止日期: 2012年12月22日 至 2012年12月28日学生姓名班级学号成绩指导教师(签字)计算机与通信学院2012年 12月28 日课题名称微机原理与接口技术课程设计人 数5组 长同组人员课题的主要内容和要求1、 设计目的 通过该设计,掌握8255并行接口芯片的使用,普通键盘的设计和数码管的使用,并掌握相应的程序设计和电路设计的技能。是对8255并行接口芯片章节理论学习的总结和补充,为后续的硬件课程的学习打下基础。2、 设计内容 利用开发板KB-C中的18个按钮中的前16个作为代码键,即代表:0、1、2、9、A、B、C、D、E、F,最后2个键,1个为删除键(S24),一个为回车键(S25),实现以下功能:每按1个键,则在屏幕上显示相应该键代表的字符,按S25键结束输入,每个代码为4个16进制代码组成。 再利用KB-C上的6个数码管中最后面的4个,在输入代码时不在屏幕上显示,而在数码管上显示,即输第1个时,在最后1位显示,输第2个时,前的那个在倒数第2个显示,而刚才输入的那个在最后1位显示,如此等等,4个代码输完后,按S25结束输入,并在屏幕上显示出来。具体任务 分析课题,汇总,调试,修正程序错误等时间安排与完成情况一、 时间安排:1、 12月22日:分组、任务分配、课题理解。2、 6月23日-6月24日:功能分析、程序设计。3、 6月25日-6月27日:实验验证和测试。4、 6月28日:总结、书写实验报告。二、 完成情况: 在大家的共同努力下我们在安排的时间里顺利完成了相应的任务,同时我们也在课程设计过程中学到了很多。一、基本原理1、按钮的原理: 在KB-C板上,端口A负责发按键扫描信息,端口C的低3位,即PC0、PC1、PC2,负责接收扫描结果,如下图所示,先定时通过端口A(PA0,PA1,PA2,PA3,PA4,PA5)扫描各按钮,即先PA0=0,其它为1发信号,然后PA1=0,其它为1,端口发出1个信号后,即读端口C,如果PC0,PC1,PC2全为高电平,说明无按钮按下,如果PC0为低电平(PC1,PC2肯定为高电平),且此时,端口扫描的情况是:PA0=1,PA1=0,PA2=1,则说明SW1被按下。2、数码管显示原理数码管由8255端口B和端口C联合控制,端口负责控制某个数码管中的那些段码的显示和小数点的显示(PB7)。端口C的PC4,PC5,PC6发送的信号通过译码后,负责选择6个数码管中的1个显示,即某时刻只有1个数码显示,如果要让几个同时显示,则采用来回扫描显示的方法,且当某个数码管显示时,必须要有一定的延时,约在100ms左右,太短显示不明显(发光不够),太长会产生闪烁。数码管的控制如下图所示:键盘对应的ASCII码表键盘012345678910ASCII30H31H32H33H34H35H36H37H38H39H41H键盘1112131415ASCII42H43H44H45H46H键盘对应发光二极管表键盘012345678发光二极管3FH06H5BH4FH66H6DH7DH07H7FH键盘9101112131415发光二极管67H77H7CH39H5EH79H71H2、 设计步骤1、程序流程图 1)、程序一流程图: 8255A的初始化开始始判断是否有键按下 回车结束在屏幕上显示YYNN 流程图说明:8255初始化后,程序一直扫描键盘,如果没有按键按下则直接继续扫描键盘,如果有按键按下,则判断按键是否是回车键,如果是回车则结束程序,否则显示出按键所对应的十六进制字符到电脑屏幕上。 2)、程序二流程图 回车在四个发光二极管上显示相应的按键值(按第一个在最右端显示,按第二个第一个左移,第二个在最右端显示) 在屏幕上显示发光二极管上的信息开始8255的初始化扫描键盘结束YN 程序二流程图说明:8255初始化后程序开始扫描键盘,如果没有按键按下则继续扫描键盘,如果有按键按下则判断是不是回车键,如果是回车键则把输入的最后四个字符输出到电脑屏幕上显示,如果不是则把数码管和屏幕显示对应的第三位左移到第四位,第二位左移到第三位,第一位左移到第二位,再把新输入进来的存到第一位。2.8255的初始化 1)、程序一: MOV AL,81H MOV DX,CON_8255;CON_8255即303H OUT DX,AL2)、程序2: mov al,10000001b mov dx,303h out dx,al程序一和程序二初始化相同,但是程序一只需要端口A和端口C低三位输入。而程序二需要端口A和端口C低三位输入和端口B和端口C的第五六七位输出才可以。3.程序设计 根据课程设计要求和上面整个程序的流程图以及我们对程序的分析有下列程序段:1) 、数据段 程序1: DATA SEGMENT PC_0 DB 0 1 2 3 4 5 ;在屏幕上显示的数据 PC_1 DB 6 7 8 9 A B PC_2 DB C D E F DATA ENDS 程序2: data segment pc_0 db 3fh,06h,5bh,4fh,66h,6dh;发光二极管 pc_1 db 7dh,07h,7fh,67h,77h,7ch pc_2 db 39h,5eh,79h,71h pcA_0 db 30h,31h,32h,33h,34h,35h;DOS字符ASCII值 pcA_1 db 36h,37h,38h,39h,41h,42h pcA_2 db 43h,44h,45h,46h temp db 00h,00h,00h,00h;四个灯的变量 temp1 db 30h,30h,30h,30h;DOS字符的值 data ends2) 、键盘扫描 两个程序的键盘扫描基本上是一样的: WAIT1: MOV AL,0FEH MOV BH,0D WAIT2: MOV DX,300H OUT DX,AL MOV BL,AL MOV DX,302H IN AL,DX TEST AL,00000001B ;测试D0位是否为1 JZ PC0 TEST AL,00000010B ;测试D1位是否为1 JZ PC1 TEST AL,00000100B ;测试D2位是否为1 JZ PC2 MOV AL,BL ROL AL,1 INC BH INC BH CMP BH,12 JZ WAIT1 JMP WAIT2 PC0: MOV SI,OFFSET PC_0 ;响应第一排键盘的某个按钮 CALL KEYB_HANDLING CALL DELAY JMP WAIT1 PC1: MOV SI,OFFSET PC_1 ;响应第二排键盘的某个按钮 CALL KEYB_HANDLING CALL DELAY JMP WAIT1 PC2: MOV SI,OFFSET PC_2 ;响应第三排键盘的某个按钮 CMP BH,8 JL NEXT1 JNZ NEXT CALL BACKSPACE JMP WR3) 、屏幕显示 程序1: KEYB_HANDLING PROC ;键盘响应 MOV BL,BH MOV BH,00H MOV AL,SI+BX mov dl,al mov ah,02h int 21h CALL DELAY RETKEYB_HANDLING ENDP 程序2:input proc ;输入到显示在屏幕上的值 call shift_e mov al,si+bx mov si,offset temp1 mov si,al retinput endp4) 、数码管显示 show proc ;显示在发光二极管 push ax push bx mov si,offset temp mov cx,4 mov bx,0 mov ah,00hbbb:mov al,ah mov dx,302h out dx,al mov al,si+bx inc bx mov dx,301h out dx,al add ah,10h call delay1loop bbb pop bx pop ax ret show endp5) 、数码管数字和电脑屏幕字符的移动 数码管数字移动:shift_l proc ;二极管的灯左移动 push si push ax push cx push bx mov si,offset temp mov cx,3 mov bx,2 mov al,2bsss:mov bl,al mov ah,si+bx inc bx mov si+bx,ah dec alloop bsss pop bx pop cx pop ax pop si retshift_l endp 电脑屏幕字符移动:shift_e proc ;显示在屏幕上的值的移动 push si push ax push cx push bx mov si,offset temp1 mov cx,3 mov bx,2 mov al,2bsss1:mov bl,al mov ah,si+bx inc bx mov si+bx,ah dec al loop bsss1 pop bx pop cx pop ax pop si retshift_e endp4.程序的验证程序一比较简单,没有花费太多时间就做好了。程序二其实也不难,只是由于我们不是一个人在设计而是五个组员都在共同工作,开始的时候我们的程序在我们看来没有错,但是运行起来没有看到想要的结果。经过我们不懈的努力我们终于获得了成功。最后,程序一和程序二都运行正确,需要提出来的是,程序二有一点点不影响实验结果的问题:数码显示管某些不应该亮的地方运行时有微弱的灯光,正也是我们到最后也没有解决的问题,需要请教老师。心得体会: 经过本次微机课题的设计与研究,我们深入的学习了除课本以外的很多微机附件的内容,掌握了很多实验室操作技能。我们在实际设计中遇到很多问题,但结合所学知识以及参考资料的帮助,不断地尝试,设计了一种能够解决实际问题的系统。同时也加深了我们对于现实生活中,实际的嵌入式操作系统的原理的理解。此次微机课程设计让我懂得了实践的重要性。即使课本知识掌握的很好,如 果不会综合运用,也是一些支离破碎的无用的知识,而如果能够运用而实际动手 能力很差,理论与实践结合不起来,学得再好也没用。这次课程设计恰好是将课 本知识与的巩固与综合运用结合起来, 再加上实际动手能力的培养三者结合起来 的。一方面,它加深与巩固了所学的各章节的理论,并将其综合运用,提高了我 们综合运用知识的能力;另一方面,培养了我们对专业知识学习的趣。 总之,在这一过程中,我们充分发挥我们的主观能动性,想象创造性,攻克了很多之前都没有想过的难关,真的受益匪浅。这次设计不仅仅耗时耗力,而且还要整天对着电脑进行仿真且不停的调试、修改,这次课程设计对我们理论和实验都有很大的提升,我想这些对于我们今后的学习生活都有很重要的意义,这将是我们在程序设计以及大学学习过程中的宝贵经验和财富。 附件程序源代码:1) 程序一:只在屏幕上显示DATA SEGMENTA_8255 EQU 300HB_8255 EQU 301HC_8255 EQU 302HCON_8255 EQU 303H PC_0 DB 0 1 2 3 4 5PC_1 DB 6 7 8 9 A BPC_2 DB C D E FDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,81H MOV DX,CON_8255 OUT DX,AL MOV AL,00H MOV DX,C_8255 OUT DX,AL WAIT1: MOV AL,0FEH MOV BH,0d WAIT2: MOV DX,A_8255 OUT DX,AL MOV BL,AL MOV DX,C_8255 IN AL,DX TEST AL,00000001B JZ PC0 TEST AL,00000010B JZ PC1 TEST AL,00000100B JZ PC2 MOV AL,BL ROL AL,1 INC BH inc bh CMP BH,12 JZ WAIT1 JMP WAIT2 PC0: MOV SI,OFFSET PC_0 CALL KEYB_HANDLING CALL DELAY JMP WAIT1 PC1: MOV SI,OFFSET PC_1 CALL KEYB_HANDLING CALL DELAY JMP WAIT1 PC2: MOV SI,OFFSET PC_2 CMP BH,8 JL NEXT1 JNZ NEXT CALL BACKSPACE JMP WR NEXT: CMP BH,10 JNZ WR CALL ENTER JMP WR NEXT1: CALL KEYB_HANDLING WR: CALL DELAY JMP WAIT1KEYB_HANDLING PROC MOV BL,BH MOV BH,00H MOV AL,SI+BX MOV DL,AL MOV AH,02H INT 21H CALL DELAY RETKEYB_HANDLING ENDPENTER PROC JMP EXITENTER ENDPBACKSPACE PROC MOV AL,00H MOV DX,B_8255 OUT DX,AL RETBACKSPACE ENDPDELAY PROC MOV CX,0D AA1: MOV BX,8000DAA2: DEC BX JNZ AA2 LOOP AA1 RETDELAY ENDPEXIT: MOV AH,4CH INT 21H CODE ENDSEND START2) 程序二:在数码管上显示data segmentpc_0 db 3fh,06h,5bh,4fh,66h,6dh;发光二极管pc_1 db 7dh,07h,7fh,67h,77h,7chpc_2 db 39h,5eh,79h,71hpcA_0 db 30h,31h,32h,33h,34h,35h;DOS字符ASCII值pcA_1 db 36h,37h,38h,39h,41h,42hpcA_2 db 43h,44h,45h,46htemp db 00h,00h,00h,00h;四个灯的变量temp1 db 30h,30h,30h,30h;DOS字符的值data endscode segmentassume cs:code,ds:databeg:mov ax,data mov ds,ax mov al,10000001b mov dx,303h out dx,al mov al,00h mov dx,302h out dx,al f1:mov al,0feh;键盘扫描开始 mov bh,00h f2:mov dx,300h out dx,al mov bl,al call show mov dx,302h in al,dx test al,00000001b jz pc0 test al,00000010b jz pc1 test al,00000100b jz pc2 mov al,bl rol al,1 inc bh cmp bh,6h jz f1 jmp f2pc0:mov si,offset pc_0 ;第一排键盘 call key_press mov si,offset pcA_0 call input call delay jmp f1pc1:mov si,offset pc_1 ;第二排键盘 call key_press mov si,offset pcA_1 call input call delay jmp f1pc2:mov si,offset pc_2 ;第三排键盘 cmp bh,04h jl next1 jnz next jmp wrnext:cmp bh,05h ;第17键盘 jnz wr call enter jmp wr next1:call key_press mov si,offset pcA_2 call input wr: call delay jmp f1key_press proc;键盘按下 mov bl,bh mov bh,00h call shift_l mov al,00h mov dx,302h out dx,al mov al,si+bx mov dx,301h out dx,al mov si,offset temp mov si,al retkey_press endpenter proc ;回车盘 mov si,offset temp1 mov cx,4 mov bx,3bb1:mov dl,si+bx dec bx mov ah,02h int 21hloop bb1 jmp exitenter endpinput proc ;输入到显示在屏幕上的值 call shift_e mov al,si+bx mov si,offset temp1 mov si,al retinput endpshow proc ;显示在发光二极管 push ax push bx mov si,offset temp mov cx,4 mov bx,0 mov ah,00hbbb:mov al,ah mov dx,302h out dx,al mov al,si+bx inc bx mov dx,301h out dx,al add

温馨提示

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

评论

0/150

提交评论