微机课程设计报告-八路抢答器.doc_第1页
微机课程设计报告-八路抢答器.doc_第2页
微机课程设计报告-八路抢答器.doc_第3页
微机课程设计报告-八路抢答器.doc_第4页
微机课程设计报告-八路抢答器.doc_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

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

文档简介

目录第一章 论证方案11.1 方案一11.1.1 硬件选择及说明11.1.2 原理框图及原理11.1.3 经济及应用论证21.2 方案二21.2.1 硬件选择及说明21.2.2 原理框图及原理21.2.3 经济及应用论证3第二章 总体设计32.1 总体设计32.2 系统工作原理4第三章 硬件设计43.1 键盘显示模块电路图43.2 键盘扫描模块功能43.3键盘扫描模块的工作原理53.4 数码管显示原理5第四章 软件设计64.1软件设计思想64.2程序流程图6第五章 编码及调试125.1源程序代码125.2硬件调试195.3软件测试19第六章 总结20第一章 论证方案本设计以微机原理及接口技术为基础,以实验箱为工具,完成pc机键盘控制的智能抢答器设计。该智能抢答器包括8088最小应用系统整体设计模块、键盘处理模块(dos调用)、答题计时与声光报警模块、led数码管显示模块。选用8086作为微处理器、扩展可编程并行i/o接口8255a芯片、可编程定时计数芯片8254、可编程中断控制器8259a(或不用)、led数码管及键盘和发光二极管等元件,制定方案如下:1.1 方案一1.1.1 硬件选择及说明选用8255a,8254,8259,试验箱键盘显示区。(1)8254作为定时器使用。(2)8259利用ir0端作为定时到的中断引入端,ir2端作为开始键按下的中断引入端ir3端作为清零键按下的中断引入端ir4端作为暂停键按下的中断引入端ir5端作为退出键按下的中断引入端。(3)8255a作为并行输入输出,a口接键盘显示区,c口接灯光报警系统,b口输出位码。(4)键盘显示区由四个led数码管和12个按键组成。1.1.2 原理框图及原理利用8255a,8259,8254,键盘显示区共同实现,其中8255a作为并行输出输入,8259作为定时到的中断采集,8254作为定时。其中键盘显示区中kl1-kl4作为行,kh1-kh4作为列,当kl1-kl4为高电平时四个数码管选通,当给数据线送数据时将显示所要显示的数据。当kl1-kl4与kh1-kh4共同配合使用时可作为键盘扫描读入使用并在led数码管上显示按下的键对应的数值。如图1-1所示:60s倒计时模块8086cpuled数码显示模块键盘输入模块声光报警模块图1-1 硬件原理框图1.1.3 经济及应用论证对于这种方案,8259中断的引入使程序更易读,更简单一些,操作相对简单一些,但硬件相应增多,费用也相应增多。1.2 方案二1.2.1 硬件选择及说明选用8255a,8254,8259,实验箱键盘显示区。1.2.2 原理框图及原理利用8255a的a口,c口作为并行输入输出,其中c口定义为高四位输出,低四位输入,a口定义为输出,b口定义为输出。利用8254的通道0和1作为红灯亮3秒定时器,绿灯亮定时器,而8254的通道2用来接黄灯和蜂鸣器具体的功能实现:通过8255端口c来扫描键盘输入,并有一定的削抖功能。信号传输至cpu进行处理。通过软件进行倒记时,进行加减分,送led显示。信号灯,蜂鸣器作相应的反应。硬件原理框图如下图所示:答题计时显示模块cpu 82558284led显示模块 8254 声光报警模块 键盘扫描模块图1-2 原理框图1.2.3 经济及应用论证对于这种方案可以看出,硬件设备较少设计,避免了8259的使用,节约了设计成本,软件编程也并不是很复杂,相对于方案一有一定优势。但在调试中由于软件相对复杂会使运行过程稍微复杂,但可以采用整块运行调试,但须对程序非常熟悉。方案比较:方案二采用扫描,没有用到8259,程序编制简单,但是cpu耗费了更多的时间在扫描,效率相对来说较低。方案一采用中断,程序结构化更为清晰,且cpu少了循环扫描的时间,效率较高。但是多用了一个8259中断控制芯片,程序编制上涉及到中断服务子程序的编写,稍显复杂。可见两种方案各有优劣。方案选择:经过对比,先采用更实用、经济的方案二,完成基本和扩展功能。若有时间,再采用方案一完成实验。第二章 总体设计2.1 总体设计总体设计框图如图1-2。2.2 系统工作原理本设计主要是以8088为核心,通过加上必要的支持芯片,比如时钟电路、地址锁存器、译码器、总线驱动器以及存储器和i/o接口电路及基本外围设备,构成一台完整微机系统。通过8255a与外部键盘相连,工作方式为定时扫描,利用定时器产生中断、cpu响应中断后对键盘进行扫描,或软件定时扫描,并在有键按下时转入键功能处理程序。将8255a端口c的上(输入方式)、下(输出方式)半部分分别用作键盘的行线和列线,程序使某行为低电平,然后读入并查询列值;如果列值中有某位为低电平,则说明行列交叉点处的键被按下;否则扫描下一行,直到扫描全部行线。8255a的端口a用来输出显示字符;设置tab为led段选码表的首地址,要显示的数字的地址正好为起始地址加数字值,其地址存放着对应于该数字值的显示代码。8255a的端口b用来控制led的显示位,即位控端口,在软件的设计上通过逐个接通8位led,把a口输出的代码送到相应的位上显示,以减少硬件开支。利用8254产生定时,通道0用于60s倒计时定,定时时间到蜂明器发出声响,黄灯闪烁,由裁判控制答案正确与否,这两个通道分别用来定时3s,答案正确绿灯亮3秒,led显示的数据加10分,否则红灯亮3秒,数据减10分。第三章 硬件设计3.1 键盘显示模块电路图图3-1 键盘显示电路图3.2 键盘扫描模块功能键盘扫描模块的功能是通过8255扩展口实现对选手抢答信号的确定。1-8号选手中先按下按键者,led数码管显示其选手号码(后按下无效)。 选手按下答题结束键,停止倒记时。 若该选手回答正确,裁判按加分键;错误按减分键。3.3键盘扫描模块的工作原理为减少引线,键盘采用矩阵式。键盘的识别采用行扫描法,程序使某行为低电平,则说明行列交叉点处的键被按下,然后,再具体确定按下的是哪个键。为此先使所在行输出为0,再检查列线是否有0。如果有零的话,此时由于不能确定闭合键所在的行,于是再用行扫描法来具体定位。如果读得数据全部为1,则说明无键闭合。硬件上将8255端口c的上、下半部分分别用作键盘的行线和列线。用电平逻辑开关输出高低电平来代替键盘按键。3.4 数码管显示原理数码管的段位顺序如右图所示:一般来说在一个字节中按照abcdefg dp的顺序放置字型码,比如在一个“共阴极”数码管上要显示“1”,则b、c段需被点亮,因此在段选线中写入60h。对应规则:a-d7 b-d6c-d5d-d4 e-d3 f-d2g-d1 图3-2数码管显示dp-d0图3-3 4位8段led动态显示器电原理图led显示器的显示方法有两种静态显示法和动态扫描显示法。静态显示就是每一个显示器各笔画段都要独占具有所存功能的输出口线,cpu把要显示的字符代码送到输出口上,就可以是显示器显示所需的数字后符号。但由于它站用的i/o口线较多,硬件成本高。所以我们选用了动态扫描显示法。第四章 软件设计4.1软件设计思想本次实验的软件设计思想如下:利用8255a的a口,c口作为并行输入输出,其中c口定义为高四位输出,低四位输入,a口定义为输出,b口定义为输出。利用8254的通道0和1作为红灯亮3秒定时器,绿灯亮定时器,而8254的通道2用来接黄灯和蜂鸣器具体的功能实现:通过8255端口c来扫描键盘输入,并有一定的削抖功能。信号传输至cpu进行处理。通过软件进行倒记时,进行加减分,送led显示。信号灯,蜂鸣器作相应的反应。至此整体思路已如上所描述。整个编程思想如下所述:首先,为了使主程序易读,本次设计采用了将多个功能的模块编成为子程序的方法,所用程序为:键盘显示子程序,键盘扫描子程序,60秒倒记时子程序,声光报警子程序。第一,初始化8255a,8254,给8254送初值。这一部分主要完成8255a、8254的初始化。第二,查询是否有键盘按键按下,若没有按下则继续查询,8254仍未开始定时,直到检测出有按键按下为止才可以开始定时。第三,当开始键按下,给8254送初值开始定时,然后用test指令来进行查询。第四,当定时60s开始时每进行一次循环要判断是否有答题结束键按下。如果有,结束60s倒记时,若没有,倒记时至0并打开声光报警系统;第五,通过8255检测键盘是否有“正确”键按下。如果有,则调用加法指令,并绿灯闪烁。否则调用减法指令,红灯闪烁。因此,在设计该软件时考虑到程序设计的基本要求中要求:程序应简单、易读、便于读者理解,更重要的是设计者自身的设计思想应清晰,编制的程序应易于理解。所以本次设计采用的软件思想如上所述。4.2程序流程图该设计的程序流程图可以分为五个:主程序流程图、键盘显示子程序流程图、键盘扫描子程序流程图、60秒倒记时声光报警模块程序流程图、计分模块程序流程图。注:程序流程图如下所示:图4-1 主程序流程图60秒倒记时声光报警模块程序流程图:图4-2 声光警报模块流程图键盘扫描子程序流程图:图4-3 键盘扫描流程图计时分部分程序流程图:图4-4 设计部分流程图键盘显示子程序流程图:图4-5 键盘显示流程图第五章 编码及调试5.1源程序代码:datasegmentkeyv db ?p8255a equ 0e180hp8255b equ 0e184hp8255c equ 0e182hp8255_ctrlequ 0e186hp82540 equ 0e190hp82541equ 0e192hp82542 equ 0e194hp8254_ctrlequ 0e196hdis_tabledb0c0h,0f9h,0a4h,0b0h,099h,92h,82hdb0f8h,080h,90h,88h,83h,0c6h,0a1hdb86h,8eh,0ffh,8ch,89h,8eh,0bfh,0f7h dis_bit0db?dis_bit1 db?dis_bit2 db?dis_bit3db ?num db ?baidb ?tensdb ?seconddb ?fendw ?chundb?shiequ000ahchushudb ?shang db ?yushu db ?dataendscodesegmentassumecs:code,ds:datastart;movax,datamovds,axmovbai,0movtens,6movsecond,0start1:moval,10001000bmovdx,p8255_ctrloutdx,almoval,00010001bmovdx,p8254_ctloutdx,alnext:call keymoval,blcmpal,07janextaddbl,1movmum,blcall display1movcx,60moval,00010001bmovdx, p8254_ctloutdx,almoval,32hmovdx, p8254_1outdx,alpush axpush bxpush cxpush dxlea bx,dis_tablemovax, 60movcx,60lop: movdx, p8255_boutdx,0fbhcalldjsxsxlatmovdx, p8255_aoutdx ,almoval,ahxlatmovdx, p8255_boutdx,0f7h movdx, p8255_aoutdx,alcalldelay1smovdx,p8255_cinal,dxtestax,0f3hjzll decaxlooplopcallsgbaojingll:popdx popcx popbx popaxcallkeywarning:movax,fensdivax,100movbai,almoval,ahmovah,0div10movtens,almovsecond,ahcalldisplay1callkeymov al ,bl cmpal,10 jlwarning cmp al,11 jg warning cmp al,10 je jia clc mov ax,fens sub ax,10 movfens,ax divax,100movbai,almoval,ahmovah,0div10movtens,almovsecond,ahcalldisplay1 mov dx,8284_ctrl mov al,10010001b out dx,al mov dx,8254_1 mov al,96h out dx, aljia: mov ax,fens(num-1) add ax,10 mov fens,axdivax,100movbai,almoval,ahmovah,0div10movtens,almovsecond,ahcalldisplay1mov dx,8254_ctrl mov al,00010001b out dx,al mov dx,8254_2 mov al,96h out dx, alchaxun: call display1 mov dx,p8255_c inal,dx cmpal,7bh jne chaxun mov al,00000000b mov dx,p8255_b out dx,aljmp start1keyprocfar mov dx,p8255_ctrl mov al,10001000b out dx,al call keyscan cmp bl,0ffh jnz wait retwait: mov key_v,bl call delay call keyscan cmp bl,key_v jz release retrelease:mov al,0f0h mov dx,p8255_c out dx,al in al,dx andal,0f0h cmp al,0f0h jnz release retkeyendpkeyscanporcfarkeyscan:mov al,0f0h mov dx,p8255_c out dx,al in al,dx and al,0f0h cmp al,0f0h jnz done mov bl,0ffh retdone: mov bl,0 mov cl,0feh mov ch,3frow: mov al,cl mov dx, p8255_c out dx,al rcl al,1 mov cl,al in al,dx and al,0f0h cmp al,0f0h jnz fcol add bl,4 dec ch jnz frow retfcol: rclal,1 nc fcol1 inc bl jmp fcolfcol1: retkeyscanendp display1procnear push axpushbx push cx push dx lea bx,dis_tablemov al,numxlatand al,01111111bmov dis_bit0,al mov al,baixlatmov dis_bit1,almov al,tensxlatmov dis_bit2,almov al,secondxlatmov dis_bit3,al dis_lop1: movdx,p8255_b moval,01houtdx,almovdx,p8255_amoval,dis_bit0outdx,almovcx,000loop$movdx,p8255_bmoval,02houtdx,almovdx,p8255_amoval,dis_bit1outdx,almovcx,000loop$movdx,p8255_bmoval,03houtdx,almovdx,p8255_amoval,dis_bit2outdx,almovcx,000loop $movdx,p8255_bmoval,04houtdx,almovdx,p8255_amoval,dis_bit3outdx,almovcx,000loop$pop axpop bxpop cxpop dxretdisplay1endpdjsxsprocnearmov chushu,10div chushumov shang,almov yushu,ahdjsxs endpdelay1s proc nearpush axpush bxpush cxpush dxmov bl,100delay:mov cx,2801wait:loop waitdec bljnz delaypop dxpop cxpop bxpop axretdelay1sendpsgbaojingproc farpush ax push bx push cxpush dxcall delay60s mov al,00000000b mov dx,p8254_ctrmov al,97houtdx,al mov dx,p8254-2 mov al,60outdx,aljnz delay2dec dxjnz delay1 mov al,00000000b mov dx,p8254-2 out dx,al pop dx pop cx pop bx pop axprocdelay60sfar mov dx,60delay1: mov bl,100delay2: mov cx,2801wait1:loopwait1decbldelay60sendpsgbaojingendpcodeendsendstart5.2硬件调试为了使每次实验都能准确进行,实验前先进行硬件调试。首先,检测led数码管是否显示良好。其次,检测数码管为良好显示后。再检查8255a的三个输送端口a口b口c口是否可以正常输出输入,作为并行端口使用。再次,查8254的良好性,只能通过简单小程序单步进行检测,或用示波器来进行检测。最后确定实验时排线连接正确,及电源开关正确。尽量避免长时间将实验箱处于开电源状态以使实验箱温度过高。5.3软件测试在进行软件调试时遇到了许多问题,下面叙述如下:在刚开始编程时,各种功能大部分是由主程序来完成的。由于主程序过于复杂,可读性不高。使得在以后的程序的调试中遇到了很大的麻烦。后来把主程序的部分功能转化成子程序来实现,并在一些重要的地方增加了注释,使的程序的可读性大大加强。调试也变的比较简单了。到此基本解决了第一个问题。在编程时,子程序的调试也是相当重要,由于子程序不可避免的使用axbxcxdx通用寄存器一个或几个。使得原主程序中的通用寄存器的内容很容易被覆盖,对子程序中所有的通用寄存器出入栈即可以避免上诉的问题,不用考虑使用的是哪几个寄存器,使用起来又比较简单方便。所以至此这个问题也已基本解决。软件的调试是一个复杂烦琐而漫长的过程。在调试的过程中一定要耐下心来去做,否则一旦出现烦躁的心里,就会事倍功半,适得其反。在本

温馨提示

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

评论

0/150

提交评论