本仪器的功能是检测使用者的反应速度,当用户按下启动键之后,数码管会从3开始倒计时,计时结束后,8路LED发光二极管中会有1路被点亮,哪一路亮是随机的,用户看到灯亮了以后,立即按下LED对应的按键,LED就会熄灭,同时单片机检测从灯亮到灯灭花费的时间,通过这个时间来反应用户的反应速度,时间越短,说明反应的速度越快。
为了直观的表示出反应速度的等级,系统中利用数码管来指示速度级别,当灯灭后,单片机将计算得到的时间通过数码管显示出来,由于只用来显示等级,所以没有显示出实际的反应时间,下表是1O个等级反应时间:
一、随机数的产生
单片机产生随机数大多数都是伪随机数,因为一旦程序下载到单片机内部,程序就是固定的了,也就是说程序的执行是一个不变的套路,这样产生的一效果,没有意义了!
要产生随机数,必须要有一个种子,通过改变种子来改变产生的数字。
网上有不少产生随机数的方案,多数都比较复杂,算法比较难懂;本系统的解决方案是:利用内部定时器O作为种子,每隔10ms种子改变一次,从O~7循环,当用户按下启动键之后,就把当前的种子取走,并把这个值赋给LED显示。
换句话说,本系统是利用外部的启动按键触发,来产生随机数,很好的解决了单片机产生随机数这个难题!
二、电路原理图
电路图如下图所示,从中可以看出,整个电路十分的简单,P0口接8路LED发光二极管,P2口接8个对应的轻触开关,P1口接一个共阴极的数码管,起指示的作用,74HC245在中间作数码管的驱动,单片机的11引脚接启动开关。
如果用户的反应时间超过了900ms,数码管会显示O,表示反应太慢了;如果用户长时间没有按键,超过1s后,数码管也会显示0,表示此次测试失败。测试仪实物如下图所示。
三、软件程序
四、实际测试
系统调试成功后,进行实际测试,发现数码管最小的显示为3。说明反应时间在200~300ms段内,如果超过1秒没有按键,数码管显示0。
说明:
如果自己制作的话,可以选用共阳极的数码管,这样就省去了74LS245这个驱动芯片,公共段直接接5V就可以了,需要接限流电阻;发光二极管的限流电阻建议采用排阻,焊接的时候方便,也节省电路板空间。如果感兴趣,可以再增加2位数码管,这样就可以测试出实际的使用者反应时间了。
上一篇:直流工作电压测量法