课程设计-反应速度测试仪(N)

河北工业大学《计算机硬件技术基础》

课 程 设 计 任 务 书

一、 题目:反应速度测试仪(REACTION TIME TRAINER)

二、目的与要求:

1.目的:

培养学生综合利用汇编语言进行程序设计的能力,主要是培养学生利用DP51-PROC综合实验仪的基本部件进行应用程序设计的技能。

2.基本要求:

能够完成反应速度(精度10ms)的测试工作,并将结果以闪烁形式显示在LED上。

(1)程序开始时亮灯进入准备状态,被测试者按一次按钮则灯灭,开始进行测试。

(2)2-8.3(2+(0~63)/10)秒后,一个灯亮起,受试者应该迅速按下指定按钮。

(3)灯亮时开始计时,被测试者按下按钮后停止计时并将灯熄灭。灯持续点亮的时间即为反应时间,然后按照反应速度让LED灯闪烁,闪的越快,说明反应时间越短。例如反应速度为0.25秒,则显示结果时每秒闪烁4次(占空比为1:1,即亮0.125秒,灭0.125秒,如此循环不止)。

(4)如果受试者超过1秒未按下按钮,停止计时,按最差成绩计算。

(5)显示结果时按一下按钮,则清除结果显示,进入准备状态,进行下一个测试。

(6)犯规处理:如果在灯亮前抢先按下按钮,则犯规,成绩作废,LED每秒闪烁一次,再次摁按钮后状态复位,准备下一个测试。

3.创新要求:

在基本要求达到后,进行创新设计。方向1:用LED灯显示成绩等级。方向2:用LCD屏或者LED数码管精确显示成绩。方向3:连续测试5次,显示平均成绩。方向4:加上音效提示,以不同频率的声音或者曲目表示结果等级及犯规提示。

LED灯显示成绩等级可以分为6等:

 [0.1-0.2)秒(够快),亮5个灯 ●●●●●●

 [0.2-0.3)秒(不错),亮4个灯 ●●●●●●

 [0.3-0.6)秒(一般般) ,亮3个灯 ●●●●●●

 [0.6-1)秒(反应迟钝),亮2个灯 ●●●●●●

 >=1秒,亮1个灯(获一灯大师称号)●●●●● ●

可以用P1口接排线,让右面6个灯显示结果。左面的灯是准备好/指示灯。 如果使用LED数码管LCD屏显示,可以直接显示测到的毫秒数。

音效提示可以用测到的毫秒数转换为频率进行输出。100ms->100Hz,etc.

以上各创新方向可以同时进行。

三、设计方法和基本原理:

1.问题描述:

在要求中已经说的很清楚了,不再赘述。

2.问题的解决方案:

(1) 根据精度10ms(百分之一秒)可以得到定时初值为9216,宜采用方式1。

(2) 因为按钮的功能比较多,可使用查询方式处理(当然中断方式也可以处理),

P3.2接一个按钮(方便以中断方式实现),P1.1接个LED灯。

(3) 如果按方向1创新,则可用排线将P1口接到8个LED灯上。

(4) 如果按方向2创新,液晶屏或者LED阵列可以使用P1或者P3口输出。

四、主要技术问题的描述:

本题中的难点并不在于定时和显示,而在于随机数的产生和去除按键抖动。下面分别进行介绍。

1. 随机数的产生。

因为定时方式每秒有921600个脉冲(11.0592Hz晶振,12分频),其低8位的值在按下的一瞬间就是一个随机数,直接取出来就可以使用。具体用法如下:

程序运行开始(即灯亮起进入测试准备时间)时,启动一个定时器,直到用户按下按钮才停止定时器,这段时间定时器的低8位二进制值作为随机数即可。将这个数除于4(右移两位),得到一个0到63的数,然后再加上20,得到一个20-83的数,再按每个数100ms时长,就能算出一个2-8.3秒的时间。示例代码如下:

...

MOV TMOD,#1

SETB TR0

JB P3.2,$

CLR TR0

MOV A,TL0

ANL A,#11111100B

RR A

RR A

ADD A,#20 ;这时候A中的值就介于20-83了

然后再搞一个100ms溢出一次的定时,让A中的值成为循环次数,循环完成后就得到了2-8.3秒的延时。灯亮起并开始计时,用户按下后停止计时,然后处理并显示结果。

2. 去除按键抖动(以P1.0为例,其它口处理方法一样)。

按钮有触点式和非触点式两种,单片机中应用的一般是由机械触

点组成的。如右图。当按钮未被按下时,P10输入为高电平,按钮闭

合后,P10输入为低电平。由于按钮是机械触点,当机械触点断开、

闭合时,会有抖动,P10输入端的波形如右下图所示。一般为毫秒级,

典型值为10ms左右,有的开关可

达20ms以上。

为使CPU能正确地读出P1口

的状态,对每一次按钮只作一次响

应,就必须考虑如何去除抖动,常

用的去抖动的办法有两种:硬件法

和软件法。因为硬件处理需要增加

额外电路,单片机中常用软件法。

软件法其实很简单,就是在单片机获得P10为低的信息后,不是立即认定按钮已被按下,而是延时10毫秒或更长一些时间后再次检测P10口,如果仍为低,说明按键的确按下了,这实际上是避开了按钮按下时的抖动时间。而在检测到按钮释放后(P10为高)再延时10-20个毫秒,消除后沿的抖动,然后再对键值处理。样例处理程序如下:

;假设P1.0接按钮,P1.1接灯

CLR P1.1 ;亮灯,准备好状态

JB P1.0,$ ;待启动按钮

ACALL DELAY20 ;消除抖动延时,10-20ms

JB 1.0,$ ;确认按下

JNB 1.0,$ ;等待抬起

ACALL DELAY20 ;消除抖动

JNB P1.0,$ ;确认抬起

SETB P1.1 ;灯灭


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn