河北工业大学《计算机硬件技术基础》
课 程 设 计 任 务 书
一、 题目:反应速度测试仪(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秒(快如闪电),亮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) uwb标签根据精度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 ;灯灭