人对事件的反应是需要一定的时间的,比如短跑运动员听到发令枪响到起跑之间有一定的时间差,运动员的反应越快这个时间差就越小,当然短跑成绩也会越好。有许多仪器都可以测定这个时间,这里将要介绍一个利用单片机设计的反应时间测试仪,它能测定当测试者听到信号声后到按下按钮的时间差。
反应时间测试仪的功能说穿了非常简单,如图2-24所示,单片机向蜂鸣器输出一个很短的鸣响信号 V out (比如500ms),测试者听到这个信号后立即按下按钮开关向单片机输入一个信号 V in ,单片机只要计算出输出信号 V out 与输入信号 V in 之间的时间差就得到反应时间(以ms为单位),最后输出到反应时间显示器上显示即可。
图2-24 反应时间测试仪系统框图
在做这个测试时,一般人的反应时间会在200~500ms之间,有的人可达到200ms以下,说明反应非常敏捷。
对于图2-24规划的系统来说,因为实在没有过多的外设,所以电路图还是比较简单的,虽然后面章节我们才开始介绍单片机系统电路的具体知识,但现在不妨先对反应时间测试仪的电路图稍微分析一下。
如图2-25所示是反应时间测试仪的电路图,系统由4个模块(部分)组成:单片机、蜂鸣器及驱动电路、按钮开关、反应时间显示器。
图2-25 人的反应时间测试仪系统电路图
图2-25中,每个模块与系统框图是一一对应的,单片机与其他模块之间的信号流向还有箭头表示,比如控制信号 V out 由单片机的P1.0口流向蜂鸣器及驱动电路,按钮开关信号 V in 送入单片机的P1.7口等。现在先不必急于搞清楚图2-25是怎么设计出来的,因为稍后会详细谈到。只要把系统框图和电路图对照看一看,找找其中的对应关系就可以。
刚才说到单片机程序使用汇编或C51语言来编写,这里我们先不谈具体的程序代码,而先来看看反应时间测试仪程序设计的思路。
根据需求分析,我们知道首先得让蜂鸣器鸣响一会,这样可以让单片机P1.0在 t 1 时刻输出一个高电平使驱动电路工作从而使蜂鸣器鸣响,如图2-26(a)所示。同时单片机内部开始计时,等到按钮开关按下时,因开关的短路(图2-25)P1.7变成了低电平,此时为 t 2 时刻,单片机计时结束。单片机的计时时长( t 2 -t 1 )即为反应时间,只要输出到显示器显示即可。
图2-26(b)把这个设计思路形成了一个流程图,这样更方便地描述程序的执行过程。
单片机启动后(开始),单片机从P1.0口输出高电平,蜂鸣器鸣响,同时计时开始。在计时过程中单片机不断检测P1.7口的电平,如果不为低电平就循环检测。如果检测出低电平表示按钮开关被按下,测试者对蜂鸣器的鸣响信号进行了反应。于是计时结束,单片机把时间计算出来并输出到显示器显示后,程序结束。
后面我们还会详细介绍如何把图2-26(b)所示的流程图设计成具体的程序代码,下载到单片机后就可以实现系统功能了。
图2-26 反应时间测试仪系统程序设计思路、流程图