反应测试仪华比Word文档格式.docx

上传人:b****5 文档编号:21648149 上传时间:2023-01-31 格式:DOCX 页数:17 大小:440.82KB
下载 相关 举报
反应测试仪华比Word文档格式.docx_第1页
第1页 / 共17页
反应测试仪华比Word文档格式.docx_第2页
第2页 / 共17页
反应测试仪华比Word文档格式.docx_第3页
第3页 / 共17页
反应测试仪华比Word文档格式.docx_第4页
第4页 / 共17页
反应测试仪华比Word文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

反应测试仪华比Word文档格式.docx

《反应测试仪华比Word文档格式.docx》由会员分享,可在线阅读,更多相关《反应测试仪华比Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

反应测试仪华比Word文档格式.docx

0.3

总成绩

教研室审核意见:

教研室主任签字:

教学系审核意见:

主任签字:

年月日

摘要

本设计介绍了一种简单反应测试仪的设计与制作,当单片机执行设定的程序,由定时器计时。

按下外中断0开启定时器,当人看到提示信号时,迅速反应并按下外中断1,该反应时间就能被测量出来,且由数码管显示。

关键词:

晶体振荡器;

数码管;

定时器;

中断

目录

基于AT89C52的反应测试仪设计1

1设计任务与要求1

2方案设计与论证1

3硬件单元电路设计与参数计算2

3.1复位电路2

3.2时钟电路3

3.3.数码管显示电路4

3.4.单片机定时器的使用5

4、软件设计与流程图5

4.1反应测试仪器主程序流程图5

4.2.定时器0的中断程序流程图7

5总电路及元器件清单8

5.1反映测试仪总原理图8

5.2整体电路仿真图以及仿真结果分析8

5.3元件清单10

5.4软件调试10

6性能测试与分析10

7总结与致谢11

参考文献12

附录:

程序清单13

基于AT89C52的反应测试仪设计

1设计任务与要求

利用单片机作为控制核心,完成快速反应时间的测试。

具体要求如下:

基本部分:

(1)能够测量出连续两次按键的间隔时间。

(2)要求能够在不清零的情况连续使用。

(3)由数码管进行显示。

测试部分:

第一次按键后,分别在10钞、1分钟进行按键测试,并能测试人的最快反应速度测试。

2方案设计与论证

近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。

反应测试仪能够定量的测试人的反映速度。

利用这种仪器,可以在人才的选拔中起到积极的作用。

例如选择少年体育运动员、舞蹈、杂技、魔术学员及其他要求机敏素质的培养对象时,可以提供科学的数据。

所以,反应测试仪的潜在实用价值极大。

当然,设计反应测试仪的方法很多,以下是两个设计方案。

方案一:

基于AT89C52单片机的LCD液晶显示模块1602显示的反应测试仪。

主要是以单片机来控制,用按键来启动和暂停测试仪,LCD1602液晶作为显示模块来显示测试时间。

方案二:

基于AT89C52单片机的数码管显示模块显示的倒计时器。

主要是以单片机来控制,用按键来启动和暂停测试仪。

此电路对于反应测试仪中的LED数码管示器来说,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。

方案比较:

通过以上两个方案,我们发现,方案二总体比方案一好。

首先方案一虽然硬件电路简单,但造价较高,且在编写程序实现所要求的功能时较难,而方案二所用的显示模块是比较熟悉的数码管,编写程序是相对容易,且电路造价不高,因此,综合考虑之后决定采用方案二。

3硬件单元电路设计与参数计算

LED数码管反应测试仪以AT89C52单片机为核心,起着控制作用,另外系统中使用8255A芯片作为扩展I/O作用。

系统包括四位数码管显示电路,按键电路,复位电路,时钟电路。

测试仪的总体框图如下图1所示:

图1测试仪的总体框图

3.1复位电路

复位是单片机的初始化操作,只需给AT89C52的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可得单片机复位,复位时,PC初始化为0000H,使单片机从OUT单元开始执行程序。

除了进入系统的正常初始化之外由于程序运行出错或操作错误而使系统处于死锁状态,为摆脱死锁状态,也需按复位键使得RST脚为高电平,使单片机重新启动。

在系统中,有时会出现显示不正常,也为了调试方便,我们需要设计一个复位电路,AT89S52单片机复位电路共有上电复位、按键电平复位和按键脉冲复位。

本系统是的复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。

复位电路可由简单的RC电路构成,也可使用其它的相对复杂,但功能更完善的电路。

本系统采用的电路如图2所示。

工作原理是:

上电瞬间,RC电路充电,RESET引脚端出现正脉冲,只要RESET保持10ms以上高电平,就能使单片机有效的复位。

当时钟频率选用12MHz时,C取10uF,R取10KΩ。

上电自动复位电路由上电瞬间C与R构成充电电路,RESET端的电位与电源Vcc相同,随着充电电流的减少,RESET的电位逐渐下降。

图中RC时间常数越大,上电时RESET端保持高电平的时间越长,图中这组参数足以保证复位操作。

若复位电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运行。

图中的按键S17的功能是按键复位,按下S17键时RST为高电平,只要保持10ms以上的高电平,就可以时单片机复位。

按键复位用在系统运行时的复位,使系统重新运行。

复位电路如下图2所示。

图2复位电路原理图

3.2时钟电路

时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。

因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统稳定性。

常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。

单片机必须在时钟的驱动下才能工作。

在单片机内部有一个时钟振荡电路,只要外界一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。

本系统使用的是内部时钟方式。

时钟电路如下图3所示。

图3 时钟电路原理图

一般选用石英晶体振荡器。

此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。

电路中两个电容C1、C2的作用有两个:

一是帮助振荡器起振;

二是对振荡器的频率进行微调。

本系统的C1、C2的值为30pf。

3.3.数码管显示电路

在这里我们使用的是8段数码管显示(包含小数点),通常在显示上我们采用的方法一般包括两种:

一种是静态显示,另一种是动态显示。

其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多,所耗得电能较大;

动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。

在本设计中,为了减少端口资源,降低电能消耗,采用的是动态显示方法。

该设计知数码管显示电路要用到4位数码管。

考虑到到数码管的段和位比较多,本系统用8255A作为扩展端口芯片。

数码管有段选和位选控制,在此电路中有4个位选,8个段选(每一个数码管的段选进行并联)。

分别用8255芯片的PA口和PB口进行四位数码管的控制,而用单片机的PB口来控制段。

电路中用了四个PNP来控制数码管的位选的开关,PNP在这起开关的作用。

电路如下图4所示。

图4 数码管显示电路原理图

3.4.单片机定时器的使用

本系统所用到的AT89C52有2个16位的定时器,而本系统只用到了定时器0,所使用的工作方式是定时器工作方式1,方式1时16位计数结构的工作方式,计数器由TH0或TH1的全部8位和TL0或TL1的全部8位构成。

使用工作方式1功能时,定时时间计算公式是:

(65536-计数初值)*机器周期机器周期=晶振周期*12

4、软件设计与流程图

4.1反应测试仪器主程序流程图

程序开始时先初始化定时器0、定时器1、外部中断0,给定时器装初值,定时时间都是是10ms,再初始化8255芯片。

进入while循环函数,显示时间等待开启定时器0。

若外部中断0有请求,则进入中断程序开启定时0,执行完中断再返回。

若定时器0有中断请求,进入中断进行时间处理,再返回。

若定时器1有中断请求,进行反应时间处理,然后显示反应时间,若SP1键按下,则跳出该中断程序,返回主程序。

图5测试仪主程序流程

4.2.定时器0的中断程序流程图,

定时器0的定时时间是10ms,用作扫描数码管显示,在定时器0开启时,定时器0开始定时,此时主程序正常运行,当定时器0的定时时间到时,主程序不在执行,开始进入中断程序,在中断程序中,若计时了1s就对时间进行处理且计数标志清零,赋值给相应的变量且second减1,若没有则计数标志count就进行加1,若倒计时的时间为零则重新赋值,中断程序执行完后返回主程序。

如图8所示。

图6定时器0的中断程序流程图

5总电路及元器件清单

5.1反映测试仪总原理图

测试仪原理图由一块AT89C52单片机器控制作用,还用一块8255A芯片来扩展I/O端口,单片机的P3^2到P3^3分别接的独立按键电路,即2个微动开关。

而8255A芯片的PB口与显示电路的数码管的段选相连,起到控制数码管的段选的的作用,PA口分别对应数码管的4个位选,起到对4个数码管的扫描作用,其中的4个三极管起着开关作用,对应数码管的选通。

如图10所示。

图7反映测试仪总原理图

5.2整体电路仿真图以及仿真结果分析

系统仿真用的是Proteus软件,可通过仿真显示出所设计系统的功能,对于程序的调试等有很大的帮助。

系统仿真时首先在使用KeilC译码器,把所写的程序进行编译,同时在仿真器里设置生成HEX文件,编译无错误进行Proteus仿真。

等所有的原件都连接完成后可以把KeilC编译生成的无错误文件加载到AT89C52中,方法是,右键点中器件然后再用左键点击,出来一个对话框在programfile后选择要添加的文件,文件要求必须是HEX文件。

然后可以点击运行观察现象,看与自己设置的是否符合,如果不相符再查找错误进行修改,一般的错误都是程序中的,所以要认真的读取程序的每一个部分。

系统的仿真图如下图8所示。

图8测试仪仿真图

启动Proteus软件的play按钮,出现如上图8所示,以上矩阵键盘设定倒计时初值和倒计时最大初值范围选择。

按下相应的键,数码管上显示相应的计数范围开始计时,当定时中断到时,数码管上的数值减1,也就是1S计时时间到了。

当全为0时,数码管上的数值自动加载为最大计数范围的值。

从仿真图可知,本系统的程序已达到要求。

在此电路系统的仿真中,应该注意的问题有数码管的MinimumTriggerTime项设定的值要合适,此电路中设定为1us。

还有就是在程序中数码管的扫描时间要合适。

以保证数码管显示稳定,不闪烁。

5.3元件清单

表1元器件清单

名称

参数和型号

数量

单片机

AT89C52

1块

PNP三极管

S8550

4个

电阻

1K

16个

数码管

共阳数码管器

瓷片电容

30PF

2个

晶振

12M

1个

电解电容

10uf

微动开关

18个

5.4软件调试

用到了KeilC软件,集成调试环境,集成了编辑器、译码器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。

树状结构显示,一目了然,支持ASM(汇编)、C语言多模块源程序混合调试,在直接修改、编译、调试源程序,错误指令定位。

功能很强大,用于对程序的调试和编辑。

本系统的程序的编写就是在KeilC软件中完成的,在程序中用到了两个定时器,为了使倒计时的时间准确,必须计算对定时器的初值,当程序完成之后,生成HEX文件。

再利用Proteus软件进行仿真。

经过仿真,程序符合题目的要求。

6性能测试与分析

按照设计程序的分析,LED数码管的动态扫描的频率是1000HZ,在实际使用时完全没有闪烁。

在程序中,定时器10ms中断一次,变量sec100自增,中断100次时,秒的显示自增,用定时器来定时,准确。

另外,用外中断0开启定时器,外中断0还具有暂停的功能。

当数码管上出现提示信息时,反应者按下按键,就可以测量出反应时间,并在数码管上显示出来。

该系统由5V电源来驱动,经过测试与分析,此系统稳定可用。

7总结与致谢

身为通信专业的学生,设计是我们将来必需具备的技能。

而这次课程设计恰恰给我们提供了一个应用自己所学知识去勇于创新和实践的平台。

从通过理论设计,到仿真软件仿真,再到确定具体方案,最后到调试电路、成型。

整个过程都需要我充分利用所学的知识进行思考、借鉴。

可以说,本次课程设计是针对前面所学的知识进行的一次比较综合的检验。

总的来说,这次课程设计虽然很累,但却是苦中有乐,非常充实。

在这次实习中,正确的思路是很重要的,只有你的设计思路是正确的,那你的设计才有可能成功。

因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础,所以跑图书馆和上网查资料成为了我每天的必修课。

本次课程设计不仅培养了我们的科学严谨的学习态度,使我们认识到不管做任何事都要付出一定的努力,才会有大的收获。

同时也让我们领略到电子技术科学知识领域的广袤。

相信这次课程设计过后,我们的理论水平和实践动手能力都会有一个质的飞跃,也为今后的实践课程及毕业设计打下了坚实的基础。

要做好本次的课程设计,熟练地掌握课本上的理论知识是前提。

这样才能对试验中出现的问题进行一定的分析和解决。

当然能完成本次设计,更离不开老师辛勤地指导,老师能在百忙中来指导我,每当我遇到了棘手的问题,老师总能给我最好的建议,教我改进得方法,不厌其烦地指出我在设计中存在的问题和错误,使我能更好地完成设计。

正是老师不厌其烦的指导和每天下午的讲解,让我的设计思路越发清晰,明朗,清除了应该从哪些方面着手,工作。

同时还要感谢在这样课程设计中给我提供的帮助的同学,是你们让我能更好的完成这次设计。

这次课程设计对我来说有着深远的意义,让我对未来的路又看得清楚了些。

在此我要深深的感谢那些传授我知识的老师们,是你们无私的奉献,才会有如今掌握一定知识的我们;

要感谢父母一直给我的支持,感谢他们的关怀;

还要感谢同学对我的鼓励,感谢搭档对我的认可,让我能尽情的发挥我的能力,激扬去验证自己的想法。

参考文献

[1]朱定华,戴汝平.单片微机原理与应用.(M)北京:

清华大学出版社,2003

[2]楼然苗,李光飞.单片机课程设计指导.(B).北京航空航天大学出版社,2007

[3]李凤霞,刘桂山,薛庆.C语言程序设计(第二版).北京理工大学出版社,2008

[4]张鑫,华臻,陈书谦.单片机原理及应用(A).北京电子工业出版社,2005

程序清单

#include<

reg52.h>

absacc.h>

#definea8255AXBYTE[0xd1ff]

#definea8255BXBYTE[0xd2ff]

#definea8255CONXBYTE[0xd6ff]

unsignedcharDis_qianwei;

unsignedcharDis_baiwei;

unsignedcharDis_shiwei;

unsignedcharDis_gewei;

codeunsignedchartab[]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,

0x24,0xBA,0x20,0x28,};

//共阳数码管0-9

unsignedcharDis_fenShiwei=0xa0;

//定义分十位

unsignedcharDis_fenGewei=0xa0;

//定义个位

unsignedcharDis_miaoShiwei=0xa0;

//定义秒十位

unsignedcharDis_miaoGewei=0xa0;

//定义秒个位

unsignedcharsecond=0,fen=0,count;

//定义全局变量

unsignedintsecond1=0;

sbitSP1=P3^2;

voiddelay(unsignedintcnt)//数码管动态扫描延时子程序

{

while(--cnt);

}

voidfenshiwei()//显示分十位

a8255B=Dis_fenShiwei;

a8255A=0xfe;

//打开第一数码管

delay(300);

//短暂延时

voidfengewei()//显示分个位

a8255B=Dis_fenGewei;

a8255A=0xfd;

//打开第二数码管

//短暂延时

voidjiange()//显示分钟与秒钟之间的间隔'

-'

a8255B=0x7f;

a8255A=0xfb;

//打开第三数码管

voidmiaoshiwei()//显示秒十位

a8255B=Dis_miaoShiwei;

a8255A=0xf7;

//打开第四个数码管

voidmiaogenwei()//显示秒个位

a8255B=Dis_miaoGewei;

a8255A=0x2f;

//打开第五数码管

main()

TMOD|=0x01;

//定时器设置10msin12Mcrystal,工作在模式1,16位定时

TH0=0xd8;

TL0=0xf0;

IE=0x8f;

//打开中断

IT0=1;

//外部中断为电平跳变中断

IT1=1;

TR0=0;

a8255CON=0x81;

//8255控制字

while

(1)

{

fenshiwei();

//调用显示分钟十位子程序

fengewei();

//调用显示分钟个位子程序

jiange();

//调用显示中间间隔子程序

miaoshiwei();

//调用显示秒钟十位子程序

miaogenwei();

}}

/*定时器中断函数*/

voidint0(void)interrupt0using1//外部中断0子程序,用于暂停和启动定时器0

TR0=~TR0;

voidint1(void)interrupt2using1//外部中断1,用来测反应速度

second1=count*10;

//计算反应的时间,count为定时器0中的标志变量

Dis_gewei=tab[second1%10];

//个位显示值处理

Dis_shiwei=tab[(second1/10)%10];

//十位显示处理

Dis_baiwei=tab[(second1/100)%10];

//百位显示处理

Dis_qianwei=tab[second1/1000];

//千位显示处理

a8255B=Dis_qianwei;

//显示千位

a8255B=Dis_baiwei;

//显示百位

a8255B=Dis_shiwei;

//显示十位

a8255B=Dis_gewei;

//显示个位

if(SP1==0)//按下sp1键跳出反应时间显示程序,进入开始的时间显示

{

break;

}

}

voidtim0(void)interrupt1using1//定时器0,用来显示正常的时间

//重新赋值

count++;

//计数标志变量,加到100就是延时1s

if(count==100)

{

count=0;

second++;

//秒加1

if(second==60)

{

second=0;

fen++;

//分加1

Dis_miaoShiwei=tab[second/10];

//秒十位显示值处理

Dis_miaoGewei=tab[second%10];

//个位显示处理

Dis_fenShiwei=tab[fen/10];

//分十位显示值处理

Dis_fenGewei=tab[fen%10];

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1