毕业设计基于单片机人体反应速度测试仪.docx
《毕业设计基于单片机人体反应速度测试仪.docx》由会员分享,可在线阅读,更多相关《毕业设计基于单片机人体反应速度测试仪.docx(21页珍藏版)》请在冰豆网上搜索。
毕业设计基于单片机人体反应速度测试仪
工学院
毕业设计报告
题目:
基于单片机人体反应速度测试仪
院系:
信息与控制学院(黑三)
专业:
通信工程(黑三)
班级学号:
09304107(黑三)
学生:
三(黑三)
指导教师:
(黑三)
成绩:
2014年06月25日
摘要
本文是基于单片机人体反应速度测试描述,通过单片机测试人的反应速度。
在本设计中以AT89S52单片机为核心的人体反应速度测试仪,主要通过控制测试灯的状态,在测试按键的状态来间接计算人体反应速度。
正常情况下系统运行主程序一直处于空闲等待状态,知道测试者按下按键后,LED测试灯立即点亮。
AT89S52单片机在LED测试灯亮的同时开始计算一个随机时间,在一段随机时间结束后,AT89S52单片机把LED测试灯熄灭,并开始计时灯灭与测试者放开按键的时间差,此计时时间用于纪录被测试者的反应时间,并以毫秒为时间单位在4位数码管上显示。
如果在LED测试灯灭之前提前放开测试按键,则显示9999作为出错信息。
设计中采用AT89S52单片机,其以高性能低价格的优势成为全球使用围最广泛的单片机之一;显示部分采用LED数码管的显示方式,本套系统在不影响其测试性能的情况下,大大的节省了设计成本,是性价比较高的一款人体反应测试议。
和其他测试仪相比具有明显的价格竞争优势;同时,本设计作品的使用方法简单,只需按下按键即可完成测试,方便测试人员的测试使用。
关键词:
单片机;反应速度;AT89S52;LED;数码管
Abstract
Thisarticleisbasedonsinglechipmicrocomputerhumanreactionspeedtestsdescribed,throughthesinglechipmicrocomputertestresponsespeed.AT89S52MCUasthecoreinthedesignofthehumanbodyreactionvelocitytester,mainlybycontrollingthestateofthetestlamp,inthestateofthetestbuttontoindirectcalculationofhumanbodyreactionspeed.Systemnormaloperationofthemainprogramhasbeenidlewaitingstate,knowthetesterafterpressthebutton,theLEDtestlamplightupimmediately.AT89S52singlechipmicrocomputerinLEDtotestthelightsatthesametimebegantocalculatearandomtime,attheendofarandomtime,AT89S52singlechipmicrocomputertesttheLEDlights,andstarttiminglightsandtestersreleasebuttonlag,thistimerisusedtorecordthesubject'sreactiontime,andinmillisecondsastheunitoftimeinthefourdigitaltubedisplay.IftheLEDtestbeforethelightswentoutearlyreleasetestbutton,9999astheerrormessageisdisplayed.
DesignUSESAT89S52singlechipmicrocomputer,itstohighperformancelowpriceadvantagetobecomeoneoftheworldscopethemostwidelyusedmicrocontroller;DisplaypartadoptsLEDdigitaltubedisplay,thissetofsysteminthecaseofdoesnotaffectthetestperformance,greatlysavethedesigncost,isthehighcostperformanceofahumanreactiontest.Comparedwithothertesterhasobviouspricecompetitiveadvantage;Atthesametime,theuseofthisdesignmethodissimple,justpressthebuttontocompletethetest,theconvenienceforthetester'stest.
Keywords:
Singlechipmicrocomputer;ReactionSpeed;AT89S52;LED;Digitaltube
1硬件部分设计1
1.1硬件结构设计2
1.2硬件电路设计3
1.2.1硬件模块选择3
1.2.2硬件模块设计3
1.2.3控制计算公式5
2软件部分设计6
2.1开发环境7
2.2主体程序设计7
2.2.1主程序设计7
2.2.2中断程序设计7
3系统测试8
3.1软件测试8
3.2硬件测试8
结论9
参考文献10
附录A12
附录B13
附录C14
1硬件部分设计
本项目以AT89S52单片机为核心,实现对人体反应速度的测试,主要控制测试灯的状态,通过测试按键的状态来间接计算人体反应速度。
正常情况下系统一直处于空闲等待状态,直到测试者按下按键后,LED测试灯立即点亮。
AT89S52单片机在LED测试灯亮的同时开始计算一个随机时间,在一段随机时间结束后,AT89S52单片机把LED测试灯熄灭,并开始计时灯灭与测试者放开按键的时间差,此计时时间用于纪录被测试者的反应时间,并以毫秒为时间单位在4位数码管上显示。
如果在LED测试灯灭之前提前放开测试按键,则显示9999作为出错信息。
整体系统框图如图1.1所示。
图1.1单片机引脚图
1.1硬件结构设计
1.1.1AT89S52单片机的介绍
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器、计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8位微控制器8K字节在系统可编程FlashAT89S52。
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz 、 三级加密程序存储器 、32个可编程I/O口线 、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
单片机引脚图如图1.2所示。
图1.2AT89S52单片机引脚图
1.1.2LED发光二极管的特性
(1)发光响应快,亮度强,高频特性好;而且随着材料的不同,数码管还能发出红、黄、绿、蓝、橙等多种颜色的光。
(2)机械性能好,体积小,重量轻,价格低廉;能与COMS和TTL电路配合使用;使用寿命长。
(3)工作电压低,驱动电流适中。
每段电流为5~10mA,一只数码管的7段LED全亮需要电流35~70mA。
这样打的电流需要由驱动电路提供,因此,使用时要注意数码管的驱动问题。
在使用中,为了给发光二极管加驱动电压,他们应有一个公共的引脚,公共的引脚有如下两种方法:
一、共阴极接法。
把发光二极管的阴极连接在一起构成阴极公共引脚,使用时公共引脚接地,这样阳极引脚上加高电平的发光二极管就导通点亮,而加低电平的则不亮。
二、共阳极接法。
把发光二极管的阳极连接在一起作为阳极公共引脚,使用时阳极公共引脚接+5V。
这样阴极引脚上加低电平的发光二极管即可导通点亮,二加高电平的则点不亮。
1.1.3LED数码管显示器显示原理
并排使用的多位数码管成为LED显示器。
LED显示器多采用动态显示方式,全部数码管共用一套段码驱动电路,各位数码管的同段引脚短接后再接到对应段码的驱动线上。
显示时通过位控制信号采用扫描的方法逐位地循环点亮各位数码管。
动态显示虽然在任一时刻只有一位数码管被点亮,但是由于人眼具有的视觉残留效应,看起来与全部数码管持续点亮的效果完全一样。
LED显示器的动态显示需要为各位提供段码以及相应的位控制,此即通常所说的段控和位控。
把LED显示器段码表预先存放在存储器中,使用时通过查表就可以得到段码。
段码输出后送到公共端码线上,也可称为段控信号。
而通过并行口输出的相互独立的位码则是起选通作用的,也称位控活扫描信号,用于选择显示位。
动态显示具有硬件简单,功耗低和显示灵活性强等优点,但动态显示增加了驱动软件的复杂性,且显示亮度较低。
1.2硬件电路设计
LED数码管的显示电路中采用动态数码管显示,在其中P0端口控制段码,低电平有效,P2.0~P2.3端口控制位码,高电平有效。
P2.3端口控制第1个数码管,P2.2端口控制第2个数码管,P2.1端口控制第3个数码管,P2.0端口控制第4个数码管。
各个数码管的段码都是P0端口的输出,即各个数码管输入的段码都是一样的,为了使其分别显示不同的数字,可采用动态扫描的方式,即先只让最低位显示0,经过一段延时,再只让次低位显示1,以此类推。
由于视觉暂留,只要延时时间足够短,就能够使得数码的显示看起来非常稳定清楚。
1.2.1硬件模块选择
硬件总体连接,用一只发光二极管模拟测试灯,以AT89S52单片机的P1.0端口控制这只发光二极管、发光二极管加限流电阻+5V电源,P1.0端口输出低电平时,测试灯亮,输出高电平时,测试灯灭。
P1.1端口接测试按键,P0端口控制LED数码管的七段数码显示,P2.0~P2.3控制4位数码管的选位。
本项目中的店铺单片机采用目前使用最广泛、成本最低廉的AT89S52,其性能在本设计中完全足够。
为了焊接上的方便,本设计中的LED数码管显示器采用四位共阳数码管。
数码管的共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。
图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个LED的亮灭来显示数字。
数码管的部示意图如图1.3所示。
图1.3数码管的部示意图
1.2.2硬件模块设计
1.单片机系统电路设计
单片机系统的设计主要包括单片机的电源设计、单片机时钟电路设计、单片机复位电路设计等。
时钟电路中采用11.0592MHz的晶振作为系统时钟,单片机复位电路采用上电自动复位和按键手动复位两种方式,在51单片机中单片机的复位都是采用高电平复位方式。
单片机最小系统图如图1.4所示。
图1.4单片机最小系统图
2.按键和指示灯设计
本设计的方案是通过人体去按下按键,由人体按下与松开按键的时间开判断人体反应速度的,所以设计中必须设计按键电路,为了操作者操作更明了,设计中增加了一个LED发光二极管作为按键指示。
设计电路如图1.5所示。
图1.5LED指示灯及按键电路图
3.数码管驱动设计
本设计中由于采用的是三寸共阳LED数码管显示器,所需的驱动电流不大,在本项目中采用低成本的8550PNP型三极管作为数码管的驱动,为了限制电流,防止电流过大对数码管烧坏,设计中在数码管的段选端分别串上一个100欧姆的电阻,数码管的驱动如图1.6所示。
图1.6数码管驱动电路图
1.2.3控制计算公式
在本系统中的计算主要是针对人体反应速度的计算。
在测试者按下按键后,LED测试灯立即点亮,在灯亮一个随机时间后就通过单片机控制灯灭,这时单片机定时器就开始计时,定时器初始值为Time1;在测试者看到LED灯灭时就释放按键,此时定时器的值为Time2,通过计算灯灭与测试者放开按键的时间差,得出测试者的反应速度。
具体计算公式如式(1.1)
V测试=Time2-Time1(1.1)
式中V测试为反应速度。
2软件部分设计
本系统使用AT89C51作为控制的单片机芯片,软件设计主要分为系统初始化、振铃检测计数、控制摘挂机、双音频信号分析处理、控制电器、密码处理(包括密码检测和密码修改)、信号音提示等部分,每个功能模块对于整体设计都是非常重要的,单片机AT89C51通过软件程序才能很好的对外部的信息进行采集、分析和决策。
系统的主程序流程图如图2.1所示。
图2.1主程序流程图
2.1开发环境
本设计采用KeilSoftware公司出品的集成开发环境进行编程,其版本为KeilμVision4。
KeilμVision4是2009年2月发布的最新版本,是针对Windows桌面平台所研发的一套完整的集成开发环境,具有可视化、灵活的Windows窗口管理。
该软件不仅给用户提供了丰富的库函数,而且提供了功能强大的开发测试工具;既支持C语言编程,也支持汇编语言编程;可以完成编辑、编译、连接、测试、仿真等整个开发流程;此外,在程序被编译之后,即可生成相应的汇编语言代码,使用户可以切身感觉到该款软件的生成目标的代码效率是相当高的,并且多数语句生成的汇编代码更为紧凑和容易理解,进而使得编程效率更为高效。
2.2主体程序设计
主程序采用查询方式,当按下T89S52单片机为核心的人体反应速度测试仪,主要控制测试灯的状态,通过测试按键的状态来间接计算人体反应速度。
正常情况下系统运行主程序一直处于空闲等待状态,知道测试者按下按键后,LED测试灯立即点亮。
AT89S52单片机在LED测试灯亮的同时开始计算一个随机时间,在一段随机时间结束后,AT89S52单片机把LED测试灯熄灭,并开始计时灯灭与测试者放开按键的时间差,此计时时间用于纪录被测试者的反应时间,并以毫秒为时间单位在4位数码管上显示。
如果在LED测试灯灭之前提前放开测试按键,则显示9999作为出错信息。
2.2.1设计流程
当整个系统上电时,进行一系列的初始化,初始化完毕后则通过查询的方式等待按键按下,当按键按下后LED测试灯立即点亮,同时单片机通过一个函数开始计算一个随机时间,在一段随机时间结束后,AT89S52单片机把LED测试灯熄灭,并开始计时灯灭与测试者放开按键的时间差,此计时时间用于纪录被测试者的反应时间,并以毫秒为时间单位在4位数码管上显示。
如果在LED测试灯灭之前提前放开测试按键,则显示9999作为出错信息。
2.2.2初始化编程
单片机上电后将首先进行的就是初始化,其中硬件初始化包括LED指示灯IO口的初始化、按键接口的初始化、LED数码管控制引脚的初始化;软件初始化包括中断的初始化、定时器的初始化等等。
2.2.2中断程序设计
定时器的定时时间是20ms,用作扫描数码管显示,在定时器开启时,定时器开始定时,此时主程序正常运行,当定时器的定时时间到时,主程序不在执行,开始进入中断程序,在中断程序中,若计时了1s就对时间进行处理且计数标志清零,赋值给相应的变量且second减1,若没有则计数标志count就进行加1,若倒计时的时间为零则重新赋值,中断程序执行完后返回主程序。
中断程序流程图如图2.2所示。
图2.2中断程序流程图
3系统测试
按照设计程序的分析,LED数码管的动态扫描的频率是1000HZ,在实际使用时完全没有闪烁。
在程序中,定时器20ms中断一次,变量 sec100自增,中断100次时,秒的显示自增,用定时器来定时,准确。
另外,用按键来开启定时器,按键具有暂停的功能。
当数码管上出现提示信息时,反应者按下按键,就可以测量出反应时间,并在数码管上显示出来。
按照正常的设计理念,整个系统是能够正常工作的。
3.1软件测试
软件调试是利用仿真工具进行在线仿真调试,除发现和解决程序错误外,也可发现硬件故障。
由于我的P0.0~P0.7接A0~A7在电路中接反了,故将数码管的码表进行修改,然后才成功的。
3.2硬件测试
硬件的调试主要是把电路各种参数调整到符合设计要求。
具体步骤如下:
(1)先排除硬件电路故障,包括设计性错误和工艺性故障,一般原则是先静态后动态。
(2)利用万用表或逻辑测试仪器,检查电路中的各器件以及引脚是否连接正确,是否有短路故障。
发现有些焊点连到了一起,造成了短路,然后进行了修改。
(3)先将单片机AT89S52芯片取下,对电路板进行通电检查,通过观察看是没有异常,然后用万用表测试各电源电压,这些都没有问题,接上仿真机进行联机调试观察到各接口线路均正常。
该系统由5V电源来驱动,上电后,整机工作电流为65mA,电流稳定无大的波动。
经过测试与分析,此系统稳定可用。
结论
本文研究与设计的人体反应测试仪采用了通用的电子元器件,利用AT89S52单片机及相关的外围器件实现人体反应测试仪,利用单片机的定时器以及外部中断的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示测试结果。
控制程序的单片机部分利用C语言编写。
设计时,首先通过在线编程,然后具体焊接硬件作品、仿真,完全实现了设计功能。
本设计中,利用常规的数码管扫描方法,通过硬件电路的具体应用和系统的仿真研究得出,本设计不仅安装简单、成本低,更重要的是工作性能稳定,是一个实用、创新型的工程设计。
通过这次的毕业设计,我能运用已学的知识解决我在设计中遇到的问题,使自己的动手能力和思考问题的能力得到了很大的提高。
在做设计的过程中我查阅了很多的资料,并认真的阅读这些与我的设计相关的资料,从而我的专业涵养得到了提高,知识的储备量也有所增加。
在做设计时,我复习了很多专业课的知识,这使得我的专业知识在离校之前得到了巩固。
我认为这是我在整个设计工程中得到的最好的回报。
整个设计通过了软件和硬件上的调试、仿真。
我想这对于自己以后的学习和工作都会有很大的帮助的。
在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
对于单片机设计,
其硬件电路是比较简单的,主要是解决程序设计中的问题。
而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。
它才是一个设计的灵魂所在。
因此在整个设计过程部分时间是用在程序上面的。
可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
但是,通过这次设计我也发现自己的很多不足之处。
在设计过程中我发现自己考虑问题很不全面,自己的专业知识掌握的很不牢固,所掌握的计算机应用软件还不够多,我希望自己的这些不足之处能在今后的工作和学习中得到改善。
而且,通过这次设计,我懂得了学习的重要性,学会了坚持和努力,这将为以后的学习做出了最好的榜样!
同时,该设计也有不足之处,缺少了答题计分等功能。
我将会在以后的学习中继续学习。
参考文献
[1]居义,尧,晓琴.单片机课程设计指导[M].:
清华大学,2009
[2]广弟,单片机基础(第3版)[M].:
航空航天大学,2007
[3]朝青,单片机原理及接口技术[M].:
航天航空大学出版色,2001
[4]家健,柏荣,汪志锋.单片机原理及应用技术[M].:
高等教育,2003
[5]潭浩强,C语言程序设计[M].:
清华大学,2005
[6]华,东.MCS51/98系列单片机原理与应用[M].:
机械工业,1997
附录A
整个系统电路原理图:
附录B
硬件实物图:
附录C
//描 述:
读取按键
byte bot(void) //读取按键,有按键被按下则返回0,否则返回1
{
if(key==0)return 0; else return 1;
}
//描 述:
将缓存区display[]中的整数译码后用数码管进行显示
void display(word ms) //数码管上的显示反应时间
{
byte posi=0x01,i,j,temp;
disp[3]=ms/1000; //1s
disp[2]=(ms%1000)/100; //100ms
disp[1]=(ms%100)/10; //10ms
disp[0]=ms%10; //1ms
for(i=0;i<4;i++) //数码管显示
{
temp=disp[i];
temp=table[temp];
for(j=0;j<200;j++) //延时
{
P2=posi; //显示xxxx秒形式
P0=temp;
}
posi*=2;
}
}
//描 述:
调用系统随机函数
unsigned long random(void) //生成随机数
{
word rt; byte k=0;
srand (50000); //种下随机数种子,围0-50000
rt=rand(); //生成随机熟
rt=rt*rand(); //使随机数足够大,能够延时足够时间
return rt;
}
//描述:
定时器初始化子程序
void INIT_TMR1(void)