《竞赛评分系统(共25页).doc》由会员分享,可在线阅读,更多相关《竞赛评分系统(共25页).doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上合肥学院计算机科学与技术系课程设计报告20082009 学年 第 1 学期课程 微机原理与接口技术 课程设计名称竞赛评分系统学生姓名胡日明学号专业班级06网工(2)班指导教师肖连军2009年 2月一题义分析及解决方案1. 题义需求分析题目要求是用8086接口芯片设计一个四评委使用的评分系统,接受四个评委的打分,输出的是平均得分。由题目要求分析如下:(1)题目要求四个评委给出自己的打分,可知设计的第一步就是主持人给出一个开始打分的指令,否则任何打分都是无效的;(2)评委们接到打分指令后即可为选手输入分数, 先设想用通用可编程键盘/显示接口芯片INTEL8279与小键盘结
2、合实现该步;(3)接收所有评委的打分到指定缓冲区后,开始对数据进行处理,求出平均分;(4)将(3)步求出的平均分显示出来。综合题目要求分析提出以下四个问题:(1)如何实现主持人发出指令表示评分结束? (2)用什么来作为外设让评委进行打分?(3)怎样求平均分? (4)采用什么设备将平均分显示出来? 2 问题解决方法及思路基于以上问题分析此评分系统是由四个评委组成的一个评分系统。对每位评委给出的分数进行累加,并求出平均分。评委分数范围是010的整数,将4位评委给出的分数累加,由于最高分为10分,则用4位二进制就可以表示每位评委的分数,用8279的RL0RL7八位连接小键盘,将评委的分数保存到827
3、9的缓冲寄存器中,可同时将4位评委的分数同时输入。对求得平均分进行分析,将4位评委累加后除以4即得到平均分数,除以4后将会出现小数部分如:0.0、0.25、0.50、0.75这4种情况,要将最后得分显示在LED上,就要用4个LED显示,其中第二个LED存在小数点,故用八段LED显示,3个显示要分别进行输出,通过位选码对每一位的显示进行控制,还要通过段选码对每一个LED的每一段进行控制。这样,就能将整个最后得分显示出来了,还要考虑在显示后一位时前一位会不会消失的情况。1) 硬件部分问题(1)可以利用小键盘上的任意一位输入或逻辑开关的一位来实现。问题(2)评委可通过很多设备进行数据输入,但对其编程
4、接受输入数据相对复杂。选择小键盘作为输入设备。输入数据会很方便。问题(4)输出设备既可用发光二极管也可用LED显示器,但相对于前者,后者对结果的显示一目了然,故本设计选择LED显示器作输出设备。2) 软件部分 (1)读数据程序:采用小键盘与8279芯片相结合,故可8279的相应端口进行合适的参数设置,数据端口地址为0B0H,控制端口的地址为0B1H。(2)数据处理:每次读数据累加求和,并取数据整数和小数部分,从OUTA0OUTA3输出到LED显示器.当四个评委均输入完毕,将累加和采用逻辑右移2位的方式求平均分.在计算输入的时候,用两位输入来控制一位数的输入,将AL的值赋给中间变量TEMP,然后
5、将TEMP*10,然后累加,求出输入的数,进行和的累加。(3)数据输出:平均分整数和小数部分分别输出到LED.分析整数0-40之间的数除以4的小数部分, 平均分处理方法。 表1-1:小数部分的求解方法见下表:十进制和二进制和右移二位平均值十进制整数二进制整数小数部分00000001100.2500321000.500531100.75008410011110510111.25113611011.5115711111.7511881000102210091001102.252103十进制和二进制和右移二位平均值十进制整数二进制整数小数部分101010102.52105111011102.7521
6、08151111113.253113201010010155101035401010101010100二 硬件设计1 选择芯片82791) 芯片8279在本设计中的作用8279连接4*4的键盘及8位显示器的电路,即可显示按下键对应的键值。2) 芯片8279的功能分析图2-18279内部逻辑框图 【 INTEL8279是一种通用可编程键盘/显示接口芯片,它能同时完成键盘输入和显示控制两种功能。键盘接口电路可最多控制64个按键或传感器组成的阵列,可自动消除开关抖动、自动识别键码并具有多键同时按下保护功能。显示接口电路采用自动扫描方式工作,最多可连接16位LED显示器。采用该芯片设计键盘与显示接口电
7、路可简化程序,从而减少CPU运行时间,提高工作效率。】1、8279内部结构及基本工作原理1)数据缓冲器及I/O控制 数据缓冲器为双向缓冲器,连接内、外总线,用于传送CPU和8279之间的命令或数据。I/O控制线实现CPU对8279内部各种寄存器、缓冲器读写数据和读写控制命令进行控制。2)控制与定时寄存器及定时控制 控制与定时寄存器用于寄存键盘及显示工作方式控制字以及其它操作方式控制字。该寄存器接收并锁存CPU送来的命令,然后通过译码产生相应的控制信号,从而完成相应的控制功能。定时与控制电路由N个基本计数器组成,其中,第一个计数器是一个可编程N级分频器,N可由软件编程在231间取值。该分频器将外
8、部时钟CLK分频得到内部所需的100kHz时钟,再经分频为键盘提供适当的扫描频率和显示时间。 3)扫描计数器该电路为键盘和显示器提供扫描信号,有两种工作方式:编码方式和译码方式。按编码方式工作时,计数器进行二进制计数并由扫描线SL0SL3输出,经外部译码器译码后,为键盘和显示器提供扫描信号。按译码方式工作时,扫描计数器的最低两位被译码后,从SL0SL3输出,提供了4选1的扫描译码。4)回复缓冲器、键盘去抖动及控制 (1)在键盘工作方式中,从SL0SL3送出的扫描信号,将会去扫描键盘,如有按键被按下时,去抖电路被置位,延时等待10ms后,再检查该键是否仍处在闭合状态。若不闭合,则视作干扰信号;若
9、仍闭合,则将该键的地址和附加的移位、控制状态一起形成键盘数据送入8279内部的FIFO(先入先出)存储器,数据格式如下: 表2-1D7D6D5D4D3D2D1D0控制移位扫描回复(2)在传感器开关状态矩阵方式中,回复线的内容直接被送往相应的传感器RAM(即FIFO存储器)中。(3)在选通输入方式工作时,回复线的内容在CNTL/STB线的脉冲上升沿被送入FIFO存储器。5)FIFO/传感器RAM及其状态寄存器FIFO/传感器RAM是一个双重功能的88位RAM。在键盘或选通工作方式时,它是FIFO RAM,其输入/输出遵循先入后出的原则。此时,FIFO状态寄存器存放FIFO的工作状态,若FIFO不
10、空,IRQ信号为高电平,向CPU申请中断。在传感器矩阵方式工作时,该存储器用于存放传感器矩阵中每一个传感器的状态。在此方式中,若检出传感器发生变化,则IRQ信号变为高电平,向CPU申请中断。6)显示RAM和显示地址寄存器显示RAM用于存储显示数据,容量为168。在显示过程中,存储的显示数据轮流从显示寄存器输出。显示寄存器分为A、B两组,OUTA30、OUTB30。它们即可以单独送数,也可以组成一个8位的字,OUT A输出高4位,OUTB输出低4位。显示寄存器的输出与显示扫描配合,轮流驱动被选中的显示器件,实现稳定的动态显示。显示地址寄存器用来寄存CPU读/写显示RAM的地址,它可以由命令设定,
11、也可以设置成在每次读出或写入之后自动递增。2、8279工作方式 1)键盘工作方式通过命令字可将键盘工作方式设定为双键互锁与N键巡回两种工作方式。1)双键互锁:若有两个键或多个键同时按下,8279电路只识别最后一个释放的键,并把键值送入FIFO/传感器RAM中。2)N键巡回:若有多个按键同时按下时,键盘扫描将各键键值依按下顺序依次存入FIFO/传感器RAM中。2)显示器工作方式通过设置键盘/显示命令字和写显示RAM命令字,显示数据写入显示缓冲器时可置为左端送入和右端送入两种方式。左端送入为依次填入方式,右端送入为移入方式。3)传感器矩阵方式 通过设置读FIFO/传感器命令字,8279可工作于传感
12、器矩阵方式,此时传感器的开关状态直接送到传感器RAM。CPU对传感器阵列扫描时,如果检测到某个传感器状态发生变化,则产生中断请求信号IRQ。3、8279命令字1)键盘/显示方式设置命令 表2-2D7D6D5D4D3D2D1D0000DDKKK D7、D6、D5是方式设置的特征位。D4、D3为显示方式设定位,D2、D1、D0位键盘/显示工作方式设定位。2)时钟编程命令 表2-3D7D6D5D4D3D2D1D0001PPPPPD7、D6、D5是时钟编程命令的特征位,D4、D3、D2、D1用于设定对CLK输入端输入的外部时钟信号进行分频的分频系数N。3)读FIFO/传感器RAM命令 表2-4D7D6
13、D5D4D3D2D1D0010AIAAAD7、D6、D5是读FIFO/传感器RAM命令的特征位,D4自动递增设置位,D2、D1、D0为FIFO/传感器RAM地址。4)读显示RAM命令 表2-5D7D6D5D4D3D2D1D0011AIAAAAD7、D6、D5是读显示RAM命令的特征位,D4自动递增设定位,D3、D2、D1、D0为显示RAM的存储单元地址。5)写显示RAM命令 表2-6D7D6D5D4D3D2D1D0100AIAAAAD7、D6、D5是写显示RAM命令的特征位,D3、D2、D1、D0为写入显示RAM的存储单元地址。6)显示禁止写入/消隐命令 表2-7D7D6D5D4D3D2D1D
14、0101IWAIWBBLABLBD7、D6、D5是显示禁止写入/消隐命令的特征位,D3、D2为A、B组显示RAM写入屏蔽位,当D3=1时,A组的显示RAM禁止写入,从CPU写入显示RAM数据时,这种情况通常用于双4位显示器,当D2=1时,可屏蔽B组显示器。D1、D0位A 、B组的消隐设置位。7)清除命令 表2-8D7D6D5D4D3D2D1D0110CDCDCDCFCAD7、D6、D5是清除命令的特征位,D4、D3、D2为清除显示RAM方式设定位,D1为置空FIFO存储器设定位,D0为总清楚设定位。8)结束中断/出错方式设置命令 表2-9D7D6D5D4D3D2D1D0111ED7、D6、D5
15、为111是结束中断/出错方式设置命令的特征位,D4为1时,N键轮回工作方式可工作得特殊出错方式,对传感器工作方式,此命令使IRQ变低,结束中断,并允许对RAM进一步写入。3)、芯片8279的技术参数 表2-10 8279技术参数2. 选择芯片LED1) LED在本设计中的作用显示最后得分,共三块,一块用来显示其整数部分的十位,一块用来显示其整数部分个位,另一块用来显示其小数部分(保留一位小数)。2) LED的功能分析LED显示电路较为简单,成本也较低,在功能单一的仪器仪表与机电设备中应用较广。但当设备显示的点或位较多时,就需要采用一定的驱动电路与相应的驱动方式。利用专用接口芯片如8255作为计
16、算机芯片的端口扩展,并通过软件编程加外部驱动实现。 图 2-2 LE 表2-2. LED显示管段选码编码表数字dpgfedcba二进制编码011000000C0H111111001F9H 210100100A4H310110000B0H41001100199H51001001092H61000001082H711111000F8H81000000080H91000011090H LED数码管的显示方式(1)静态:数码管显示过程持续得到信号,与数码管接口的I/O口线为专用。特点是无闪烁,元器件多,占I/O线多,无须扫描,节省CPU时间,编程简单。(2)动态:数码管显示过程轮流得到信号,与各数码管
17、接口的I/O口线为共用。特点是有闪烁,元器件少,占I/O线少,必须扫描,花费CPU时间,编程复杂 (有多个LED时尤为突出)。3) 芯片LED的技术参数 表2-12. 芯片LED的技术参数PcwIfVrIrIfp对应型号散射颜色BT2352702551.52.5200SEL-10红色BT1004050.52.5565绿色BT1004050.52.5585蓝色消耗功率 PM150mW 最大工作电流 IFM100mA 正常工作电流 IF40mA 正向压降 VF 1.8V 燃亮电压为5v共阴极LED的PM300mW,IFM200 mA,IF60mA,VF 1.8V,VR5V,发红光。LED的技术参数
18、分析LED发光二极管的压降一般为1.5-2.0V,其工作电流一般取10-20Ma,发光二极管可应用于直流驱动电路、交流驱动电路和脉冲驱动电路。3. 小键盘1) 小键盘在本设计中的作用评委通过小键盘置数,输入分数。四个评委各个依次打分,系统读取开关量,再将处理后的数据在LED上显示出来。 图2-32) 小键盘的逻辑图 图2-3小键盘4. 选择芯片74LS2401) 74LS240芯片引脚及真值表 图2-4-1 74LS240芯片引脚 图2-4-2 真值表2) 74LS240技术参数 表2-13 74LS240技术参数5 芯片比较 表2-14 逻辑开关 小键盘连线较简单,以逻辑开关的上下切换来表示
19、,易实现,易观察所输入的是哪8位二进制数据。用时短连线较复杂,实现需编程实现CPU对键盘电路的扫描,察看是否有键按下,是哪个键。扫描占用大量CPU时间,是CPU的效率大大降低。表2-68255芯片74LS240和74LS2448279芯片可编程的并行接口芯片,有多种与外设及CPU的连接方法,来满足不同应用要求,减少器件数量支持字节数据的并行传送,有3个8位I/O端口成本:通用且廉价以锁存器接受和输出数据,不可编程。八缓冲器/线驱动器/线接收器(反码三态输出)通用可编程键盘/显示接口芯片,能同时完成键盘输入和显示控制两种功能。键盘接口电路可最多控制64个按键或传感器组成的阵列,可自动消除开关抖动
20、、自动识别键码并具有多键同时按下保护功能。显示接口电路采用自动扫描方式工作,最多可连接16位LED显示器。采用该芯片设计键盘与显示接口电路可简化程序,从而减少CPU运行时间6 硬件总逻辑图及其说明1) 实验硬件原理图图 2-5 实验硬件原理图说明:由于实验室设备中很多芯片已经集成,故给连线带来很大方便性,使的连线简单了许多。8279的RL0RL7连接4*4键盘,SL0SL2三位用来74L138的输入,输出的8位作为LED的段选,OUTA0OUTA3四位作为芯片4511的输入,输出的7位作为LED的位选,8279的数据DB0DB7与PCI卡的数据线连接,其中A0连接A0,CS连接CS5,读写信号
21、的连接如图。三控制程序设计1 主程序流程图:图 3-1 主程序流程图开始初始化8279扫描按键KEYCOUNT+KEYCOUNT?=9按键转换为键号CX加1CX?=2SUM=TEMP+ALCX=0TEMP=TEMP*10取最后两位(小数)存入AH将前6位移位(除4)存入AL输出整数部分调用小数部分过程结束 N Y Y NN Y 处理小数子程序: 图 3-2 处理小数子程序 扫描按键子过程:读入数据后3位?为1读FIFO RAMCF=1返回CF=0进入读状态 图 3-3 扫描按键子过程 清除子过程:进入设置清除命令清除显示RAM清除完毕吗?返回 图 3-4 清除子过程3 程序清单及注释:专心-专
22、注-专业 .MODEL TINYPCIBAR3 EQU 1CH ;8位I/O空间基地址(它就是实验仪的基地址,也为DMA & 32 BIT+RAM板卡上的8237提供基地址)Vendor_ID EQU 10EBH ;厂商ID号Device_ID EQU 8376 ;设备ID号 .STACK 100 .DATAIO_Bit8_BaseAddress DW ?msg0 DB BIOS不支持访问PCI $msg1 DB 找不到Star PCI9052板卡 $msg2 DB 读8位I/O空间基地址时出错$SUM DB 0H ;分数和TEMP DB 0H ;中间变量 KEYCOUNT DB ? ;按键数
23、目COUNT DB ? ;乘10的时候,保存AL所用的中间变量LED_TAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;不带小数点的整数 DB 080H,90H LED_TBB DB 040H,079H,024H,030H,19H,12H,02H,078H ;带小数点的整数 DB 000H,10HCMD_8279 DW 00B1H ;8279命令字、状态字地址DATA_8279 DW 00B0H ;8279读写数据口的地址,由于偏移地址则CS接PCI卡的CS5! .CODESTART: MOV AX,DATA MOV DS,AX NOP CALL Ini
24、tPCI CALL ModifyAddress ;根据PCI提供的基地址,将偏移地址转化为实地址 CALL INIT8279 ;初始化子程序 MOV KEYCOUNT,0 MOV CX,0 ;-;主程序START1: CALL IfExit JZ START11 JMP ExitSTART11: CALL SCAN_KEY ;键扫描 JNC START1 ;没有按键 XCHG AL,KEYCOUNT INC AL CMP AL,9 JNZ START2 MOV CX,0 ;在进入下一个数的输入的时候,由于CX是判断两位输入是一个数,故要清零! MOV KEYCOUNT,0 CALL INIT8
25、279_1 ;8个数码块全有字符显示后,再按键,清除显示 MOV AL,SUM ;计算部分 CMP AL,28H JNE NOTSHI MOV AL,01H LEA BX,LED_TAB ;字型码表 XLAT CALL WRITE_DATA MOV AL,0H LEA BX,LED_TBB ;字型码表 XLAT CALL WRITE_DATA MOV AL,0H CALL XIAOSHU JMP HUAN NOTSHI: ;上面处理等于10的情况,下面的分支是小于10的情况 PUSH AX MOV AL,0H LEA BX,LED_TAB ;字型码表 XLAT CALL WRITE_DATA
26、POP AX MOV BL,AL AND AL,B ;将小数的两位取出 MOV BH,AL MOV AL,BL AND AL,B ;将整数的六位取出 MOV CL,2 SHR AL,CL ;AL里保存整数部分 MOV AH,BH ;AH里保存小数部分 MOV CL,00H ;主程序需要CL进行循环,所以在计算以后将CL清零 AND AL,3FH LEA BX,LED_TBB ;带小数点的字型码表 XLAT CALL WRITE_DATA MOV AL,AH CALL XIAOSHU ;计算部分HUAN: MOV SUM,0 CALL INIT8279_1 JMP START1START2: X
27、CHG AL,KEYCOUNT CALL KEY_NUM ;键值转换为键号CMP AL,09H ;输入的键值不在09范围内,及输入错误,重新输入 JG CHULI INC CL CMP CL,2 JNE NO10 MOV CL,0 ;主程序需要CL进行循环,所以在计算以后将CL清零 ADD TEMP,AL ;求TEMP+AL的值 MOV AH,TEMP CMP AH,0AH ;输入的值大于10的话,重新输入 JG CHULI ADD SUM,AH MOV TEMP,0H JMP NO9 NO10: MOV COUNT,AL ;求TEMP*10的值 MOV AH,0AH MUL AH MOV T
28、EMP,AL MOV AL,COUNT NO9: LEA BX,LED_TAB ;字型码表 XLAT CALL WRITE_DATA JMP START1 CHULI: LEA BX,LED_TAB ;字型码表 XLAT CALL WRITE_DATA CALL INIT8279_1 MOV SUM,0 MOV KEYCOUNT,0 JMP START1 START_EXIT: JMP $ ;-;处理小数部分 XIAOSHU PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX CMP AL,0H JE X0 CMP AL,01H JE X1 CMP AL,02H
29、 JE X2 CMP AL,03H JE X3X0: MOV AL,0H LEA BX,LED_TAB ;字型码表 XLAT CALL WRITE_DATA MOV AL,0 JMP X4X1: MOV AL,02H AND AL,3FH LEA BX,LED_TAB ;字型码表 XLAT CALL WRITE_DATA MOV AL,05H JMP X4X2: MOV AL,05H AND AL,3FH LEA BX,LED_TAB ;字型码表 XLAT CALL WRITE_DATA MOV AL,0H JMP X4X3: MOV AL,07H AND AL,3FH LEA BX,LED_
30、TAB ;字型码表 XLAT CALL WRITE_DATA MOV AL,05H X4: AND AL,3FH LEA BX,LED_TAB ;字型码表 XLAT CALL WRITE_DATAXIANSHI: CALL SCAN_KEY ;键扫描 JNC XIANSHI ;键的输入来控制显示结果的时间 POP DX POP CX POP BX POP AXXIAOSHU ENDP;-;8279初始化INIT8279 PROC NEARMOV DX,CMD_8279 ;CMD_8279为写命令地址、读状地址 MOV AL,34H ;可编程时钟设置,设置分频系数(20分频) OUT DX,AL MOV AL,0H ;8位字符显示,左边输入,外部译码键扫描方式,双键互锁,10H右入口 OUT DX,AL CALL INIT8279_1 RETINIT8279 ENDP