1、课 程 设 计 报 告课程名称: 单片机原理及应用课程设计设计题目:反应测试仪 系别: 通信与控制工程系 专业:电子信息工程班级:学生姓名:学号:起止日期:指导教师:教研室主任:指导教师评语:指导教师签名:年月日成绩项目 权重1、设计过程中出勤、学习态度等方面 0.22、课程设计质量与答辩 0.53、设计报告书写及图纸规范程度 0.3成绩评定总成绩教研室审核意见:教研室主任签字:年月日教学系审核意见:主任签字:年月日摘 要反应测试仪能够定量的测试人的反映速度。利用这种仪器,可以在人才的选拔中起到积极的作用。本设计以数字集成电路技术为基础,单片机技术为核心,介绍了一种简单反应测试仪的设计与制作,
2、以 STC89C52 单片机的外中断 0 外接开关作为按键,程序运行后会在数码管上显示,然后计时,当数码管显示提示信号,提示实验者立即按键,如果实验者在看到提示信号时立即按下键,则数码管会动态显示实验者的反应时间。本设计能在不清零的情况连续使用,并且能比较两次测试中反应时间短的,由数码管进行显示。关键词:晶体振荡器;数码管;定时器;中断目 录1 设计任务与要求 12 方案设计与论证 13 硬件单元电路设计与参数计算 23.1 复位电路 23.2 时钟电路 33.3 数码管显示电路 43.4 单片机定时器的使用 54、软件设计与流程图 54.1 反应测试仪器主程序流程图 54.2.定时器 0 的
3、中断程序流程图 75 总电路及元器件清单 75.1 整体电路仿真图以及仿真结果分析 75.2 元件清单 95.3 软件调试 96 性能测试与分析 97 总结与致谢 10参考文献 11附录:程序清单 121基于 STC89C52的反应测试仪设计1 设计任务与要求利用单片机作为控制核心,完成快速反应时间的测试。具体要求如下:基本部分:(1)能够测量出连续两次按键的间隔时间。(2) 要求能够在不清零的情况连续使用。(3) 由数码管进行显示 。测试部分:第一次按键后,分别在 10 秒、1 分钟进行按键测试,并能测试人的最快反应速度测试。2 方案设计与论证近年来随着计算机在社会领域的渗透,单片机的应用正
4、在不断地走向深入,同时带动传统控制检测日新月益更新。反应测试仪能够定量的测试人的反映速度。利用这种仪器,可以在人才的选拔中起到积极的作用。例如选择少年体育运动员、舞蹈、杂技、魔术学员及其他要求机敏素质的培养对象时,可以提供科学的数据。所以,反应测试仪的潜在实用价值极大。当然,设计反应测试仪的方法很多,以下是两个设计方案。方案一:基于 STC89C52 单片机的 LCD 液晶显示模块 1602 显示的反应测试仪。主要是以单片机来控制,用按键来启动和暂停测试仪,LCD1602 液晶作为显示模块来显示测试时间。方案二:基于 STC89C52 单片机的数码管显示模块显示的倒计时器。主要是以单片机来控制
5、,用按键来启动和暂停测试仪。此电路对于反应测试仪中的 LED 数码管示器来说,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。方案比较:通过以上两个方案,我们发现,方案二总体比方案一好。首先方案一虽然硬件电路简单,但造价较高,且在编写程序实现所要求的功能时较难,而方案二所用的显示模块是比较熟悉的数码管,编写程序是相对容易,且电路造价不高,因此,2综合考虑之后决定采用方案二。3 硬件单元电路设计与参数计算LED 数码管反应测试仪以 STC89C52 单片机为核心,起着控制作用,另外系统中使用 8255A 芯片作为扩展 I/O 作用。系统包括四位数码管显示电路,按键电路
6、,复位电路,时钟电路。测试仪的总体框图如下图 1 所示:图 1 测试仪的总体框图3.1 复位电路复位是单片机的初始化操作,只需给 STC89C52 的复位引脚 RST 加上大于 2 个机器周期(即 24 个时钟振荡周期)的高电平就可得单片机复位,复位时,PC 初始化为0000H,使单片机从 OUT 单元开始执行程序。除了进入系统的正常初始化之外由于程序运行出错或操作错误而使系统处于死锁状态,为摆脱死锁状态,也需按复位键使得 RST脚为高电平,使单片机重新启动。在系统中,有时会出现显示不正常,也为了调试方便,我们需要设计一个复位电路,STC89S52 单片机复位电路共有上电复位、按键电平复位和按
7、键脉冲复位。本系统是的复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。复位电路可由简单的 RC 电路构成,也可使用其它的相对复杂,但功能更完善的电路。本系统采用的电路如图 2 所示。工作原理是:上电瞬间,RC 电路充电,RESET 引脚端出现正脉冲,只要 RESET 保持 10ms 以上高电平,就能使单片机有效的复位。当时钟频率选用 12MHz 时,C 取10uF,R 取 10K。上电自动复位电路由上电瞬间 C 与 R 构成充电电路,RESET 端的电位与电源 Vcc 相同,随着充电电流的减少,RESET 的电位逐渐下降。图中 RC 时间常数越大,上电时 RESET 端保持高电
8、平的时间越长,图中这组参数足以保证复位操作。若复位电路 复 位 电路 按键电路模块STC89C52 8255A数码管显示3复位电路失效,加电后 CPU 从一个随机的状态开始工作,系统就不能正常运行。图中的按键 S17 的功能是按键复位,按下 S17 键时 RST 为高电平,只要保持 10ms 以上的高电平,就可以时单片机复位。按键复位用在系统运行时的复位,使系统重新运行。复位电路如下图 2 所示。9C31nFVCC R110kGND图 2 复位电路原理图3.2 时钟电路在 MCS-51 单片机应用系统中,往往需要走时准确的实时时钟为多通道数据采集及实时控制提供精确的时间基准和同步信号。软件时钟
9、具有硬件开销小,成本低,外围电路简单等优点,但由于时钟是依靠软件延时实现的,在运行过程中不仅要占用大量的 CPU 时间,而且计时精度低,走时误差较大,因此,在电路设计过程中,时钟电路有一定的要求。时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统稳定性。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。单片机必须在时钟的驱动下才能工作。在单片机内部有一个时钟振荡电路,只要外界一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。本系统使用的是
10、内部时钟方式。时钟电路如下图 3 所示。一般选用石英晶体振荡器。此电路在加电大约延迟 10ms 后振荡器起振,在 XTAL2引脚产生幅度为 3V 左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。4电路中两个电容 C1、C2 的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。本系统的 C1、C2 的值为 30pf。图 3 时钟电路原理图3.3 数码管显示电路本系统采用六位七段共阳数码显示管,由 8255 芯片的 PA 口控制数码管的位选,PB 口输出数据给数码管 5。其数码管段值控制如下表 1 所示:表 1 数码管段值控制段值 g c dp d e b f aPB 控制位
11、PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0在这里我们使用的是 8 段数码管显示(包含小数点) ,通常在显示上我们采用的方法一般包括两种:一种是静态显示,另一种是动态显示。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多,所耗得电能较大;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。在本设计中,为了减少端口资源,降低电能消耗,采用的是动态显示方法。该设计知数码管显示电路要用到 4 位数码管。考虑到到数码管的段和位比较多,本系统用 8255A 作为扩展端口芯片。数码管有段选和位选控制,在此电路中有 4 个位选,8 个段选
12、(每一个数码管的段选进行并联) 。分别用 8255 芯片的 PA 口和 PB 口进行5四位数码管的控制,而用单片机的 PB 口来控制段。电路中用了四个 PNP 来控制数码管的位选的开关,PNP 在这起开关的作用。电路如下图 4 所示。 ABCDEFGDPFDPA5BDB4EGCA4AB6A3B5B4B2B3B2A2B1 B3 B5 B6A6A1A2A3A4A5A6A1PB7PB6PB5PB4PB3PB2PB1PB0PA5PA4PA3PA2PA1PA0R21k31kR41k51kR61k71kR81k91kQ1PNPQ2PNPQ3PNPQ4PNPQ5PNPQ6PNPR101k11kR121k13
13、1kR141k151kVD图 4 数码管显示电路原理图3.4 单片机定时器的使用本系统所用到的 STC89C52 有 2 个 16 位的定时器,而本系统只用到了定时器 0,所使用的工作方式是定时器工作方式 1,方式 1 时 16 位计数结构的工作方式,计数器由TH0 或 TH1 的全部 8 位和 TL0 或 TL1 的全部 8 位构成。使用工作方式 1 功能时,定时时间计算公式是:(65536-计数初值)*机器周期 机器周期=晶振周期*124、软件设计与流程图4.1反应测试仪器主程序流程图程序开始时先初始化定时器 0、定时器 1、外部中断 0,给定时器装初值,定 时时间都是是 10ms,再初始
14、化 8255 芯片。进入 while 循环函数,显示时间等待开启定时器0。若外部中断 0 有请求,则进入中断程序开启定时 0,执行完中断再返回。若定时器60 有中断请求,进入中断进行时间处理,再返回。若定时器 1 有中断请求,进行反应时间处理,然后显示反应时间,若 SP1 键按下,则跳出该中断程序,返回主程序,图 5所示。YYN设定时器 0,1 工作方式,且打开外中断 0与 1给定时器 0 设初值初始化 8255 芯片进入 while 循环显示初始时间等待中断开始结束关闭定时器 0,转到 测反应速度程序有键 INT0 按下?启动定时器 0有键 INT1 按下?若定义的 SP1 按下跳出中断计时
15、N7图 5 测试仪主程序流程4.2定时器 0的中断程序流程图定时器 0 的定时时间是 10ms,用作扫描数码管显示,在定时器 0 开启时,定时器0 开始定时,此时主程序正常运行,当定时器 0 的定时时间到时,主程序不在执行,开始进入中断程序,在中断程序中,若计时了 1s 就对时间进行处理且计数标志清零,赋值给相应的变量且 second 减 1,若没有则计数标志 count 就进行加 1,若倒计时的时间为零则重新赋值,中断程序执行完后返回主程序。如图 6 所示。图 6 定时器 0 的中断程序流程图5 总电路及元器件清单5.1整体电路仿真图以及仿真结果分析8系统仿真用的是 Proteus 软件,可
16、通过仿真显示出所设计系统的功能,对于程序的调试等有很大的帮助。系统仿真时首先在使用 Keil C 译码器,把所写的程序进行编译,同时在仿真器里设置生成 HEX 文件,编译无错误进行 Proteus 仿真。等所有的原件都连接完成后可以把 Keil C 编译生成的无错误文件加载到 AT89C52 中,方法是,右键点中器件然后再用左键点击,出来一个对话框在 program file 后选择要添加的文件,文件要求必须是HEX 文件。然后可以点击运行观察现象,看与自己设置的是否符合,如果不相符再查找错误进行修改,一般的错误都是程序中的,所以要认真的读取程序的每一个部分。系统的仿真图如下图 7 所示。AB
17、CDEFGDPFDPA5BD B4EGC A4AB6A3B5B4B2B3B2A2B1B3B5B6A6A1A2A3A4A5A6 A1XTAL218XTAL119ALE30EA31PSEN29RST9P0./AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD63P0.7/AD732P1.0/T21P1./T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD1P3.2/INT012P3./INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P
18、2.7/A1528P2.0/A821P2.1/A92P2./A1023P2.3/A1 24P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52D034D13 D232D331D430D529D628D727RD5WR36A09A18RESET35CS6PA04PA13PA22PA31PA440PA539PA638PA737PB018PB119PB220PB321PB42PB523PB624PB725PC014PC115PC216PC317PC413PC512PC61PC710U2825AC130pF XCRYSTALC230pFGNDC31nFVC R110kGNDR
19、2 1k3 1kR4 1k5 1kR61k7 1kR8 1k9 1kQ1PNPQ2PNPQ3PNPQ4PNPQ5PNPQ6PNPR10 1k1 1kR12 1k13 1kR141k15 1kGNDR1610k VCVD图 7 测试仪仿真图启动 Proteus 软件的 play 按钮,出现如上图 8 所示,以上矩阵键盘设定倒计时初值和倒计时最大初值范围选择。按下相应的键,数码管上显示相应的计数范围开始计时,当定时中断到时,数码管上的数值减 1,也就是 1S 计时时间到了。9当全为 0 时,数码管上的数值自动加载为最大计数范围的值。从仿真图可知,本系统的程序已达到要求。在此电路系统的仿真中,应该注
20、意的问题有数码管的 Minimum Trigger Time 项设定的值要合适,此电路中设定为 1us。还有就是在程序中数码管的扫描时间要合适。以保证数码管显示稳定,不闪烁。5.2元件清单表 2 元器件清单名称 参数和型号 数量单片机 STC89C52 1 块PNP 三极管 S8550 4 个电阻 1K 16 个数码管 共阳数码管器 4 个瓷片电容 30PF 2 个晶振 12M 1 个电解电容 10uf 1 个微动开关 18 个5.3软件调试用到了 Keil C 软件,集成调试环境,集成了编辑器、译码器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一
21、目了然,支持 ASM(汇编) 、C 语言多模块源程序混合调试,在直接修改、编译、调试源程序,错误指令定位。功能很强大,用于对程序的调试和编辑。本系统的程序的编写就是在 Keil C 软件中完成的,在程序中用到了两个定时器,为了使倒计时的时间准确,必须计算对定时器的初值,当程序完成之后,生成 HEX 文件。再利用 Proteus 软件进行仿真。经过仿真,程序符合题目的要求。6 性能测试与分析按照设计程序的分析,LED 数码管的动态扫描的频率是 1000HZ,在实际使用时完全没有闪烁。在程序中,定时器 10ms 中断一次,变量 sec100 自增,中断 100 次时,秒的显示自增,用定时器来定时,
22、准确。另外,用外中断 0 开启定时器,外中断 0 还具有暂停的功能。当数码管上出现提示信息时,反应者按下按键,就可以测量出反应10时间,并在数码管上显示出来。该系统由 5V 电源来驱动,经过测试与分析,此系统稳定可用。7总结与致谢身为电子专业的学生,设计是我们将来必需具备的技能。而这次课程设计恰恰给我们提供了一个应用自己所学知识去勇于创新和实践的平台。从通过理论设计,到仿真软件仿真,再到确定具体方案,最后到调试电路、成型。整个过程都需要我充分利用所学的知识进行思考、借鉴。可以说,本次课程设计是针对前面所学的知识进行的一次比较综合的检验。总的来说,这次课程设计虽然很累,但却是苦中有乐,非常充实。
23、在这次实习中,正确的思路是很重要的,只有你的设计思路是正确的,那你的设计才有可能成功。因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础,所以跑图书馆和上网查资料成为了我每天的必修课。本次课程设计不仅培养了我们的科学严谨的学习态度,使我们认识到不管做任何事都要付出一定的努力,才会有大的收获。同时也让我们领略到电子技术科学知识领域的广袤。相信这次课程设计过后,我们的理论水平和实践动手能力都会有一个质的飞跃,也为今后的实践课程及毕业设计打下了坚实的基础。要做好本次的课程设计,熟练地掌握课本上的理论知识是前提。这样才能对试验中出现的问题进行一定的分析和解决。当然能
24、完成本次设计,更离不开老师辛勤地指导,老师能在百忙中来指导我,每当我遇到了棘手的问题,老师总能给我最好的建议,教我改进得方法,不厌其烦地指出我在设计中存在的问题和错误,使我能更好地完成设计。正是老师不厌其烦的指导和每天下午的讲解,让我的设计思路越发清晰,明朗,清除了应该从哪些方面着手,工作。同时还要感谢在这样课程设计中给我提供的帮助的同学,是你们让我能更好的完成这次设计。这次课程设计对我来说有着深远的意义,让我对未来的路又看得清楚了些。在此我要深深的感谢那些传授我知识的老师们,是你们无私的奉献,才会有如今掌握一定知识的我们;要感谢父母一直给我的支持,感谢他们的关怀;还要感谢同学对我的鼓励,感谢
25、搭档对我的认可,让我能尽情的发挥我的能力,激扬去验证自己的想法。11参考文献1 朱定华,戴汝平.单片微机原理与应用.(M) 北京:清华大学出版社,20032 楼然苗,李光飞.单片机课程设计指导.(B).北京航空航天大学出版社,20073 李凤霞,刘桂山, 薛庆.C 语言程序设计(第二版).北京理工大学出版社,20084 张鑫,华臻,陈书谦.单片机原理及应用(A). 北京电子工业出版社,20055 韩存梅.反应测试仪的原理及设计J.中央民族大学学报(自然科学版),200912附录:程序清单#include#include#define a8255A XBYTE0xd1ff#define a825
26、5B XBYTE0xd2ff#define a8255CON XBYTE0xd6ff unsigned char Dis_qianwei;unsigned char Dis_baiwei;unsigned char Dis_shiwei;unsigned char Dis_gewei;code unsigned char tab=0xA0,0xBB,0x62,0x2A,0x39,0x2C, 0x24,0xBA,0x20,0x28,; /共阳数码管 0-9 unsigned char Dis_fenShiwei=0xa0;/定义分十位unsigned char Dis_fenGewei=0xa0
27、; /定义个位unsigned char Dis_miaoShiwei=0xa0;/定义秒十位unsigned char Dis_miaoGewei=0xa0; /定义秒个位unsigned char second=0,fen=0,count; /定义全局变量unsigned int second1=0;sbit SP1=P32;void delay(unsigned int cnt) /数码管动态扫描延时子程序while(-cnt);void fenshiwei() /显示分十位a8255B=Dis_fenShiwei;a8255A=0xfe; /打开第一数码管delay(300); /短暂
28、延时void fengewei() /显示分个位a8255B=Dis_fenGewei;a8255A=0xfd; /打开第二数码管delay(300); /短暂延时void jiange() /显示分钟与秒钟之间的间隔-13a8255B=0x7f;a8255A=0xfb; /打开第三数码管delay(300); /短暂延时void miaoshiwei()/显示秒十位a8255B=Dis_miaoShiwei;a8255A=0xf7; /打开第四个数码管delay(300); /短暂延时void miaogenwei() /显示秒个位a8255B=Dis_miaoGewei; a8255A=0
29、x2f; /打开第五数码管delay(300);main()TMOD |=0x01;/定时器设置 10ms in 12M crystal,工作在模式 1,16 位定时TH0=0xd8;TL0=0xf0;IE= 0x8f; /打开中断IT0=1; /外部中断为电平跳变中断IT1=1;TR0=0;a8255CON=0x81; /8255 控制字while(1) fenshiwei(); /调用显示分钟十位子程序fengewei(); /调用显示分钟个位子程序jiange(); /调用显示中间间隔子程序miaoshiwei(); /调用显示秒钟十位子程序miaogenwei(); /调用显示秒钟十位
30、子程序 /* 定时器中断函数 */void int0(void) interrupt 0 using 1 /外部中断 0 子程序,用于暂停和启动定时器 0TR0=TR0;void int1(void) interrupt 2 using 1 /外部中断 1,用来测反应速度14TR0=0; second1=count*10; /计算反应的时间,count 为定时器 0 中的标志变量Dis_gewei=tabsecond1%10;/个位显示值处理Dis_shiwei=tab(second1/10)%10; /十位显示处理Dis_baiwei=tab(second1/100)%10; /百位显示处理
31、Dis_qianwei=tabsecond1/1000; /千位显示处理while(1)a8255B=Dis_qianwei;/显示千位a8255A=0xfe;delay(300); /短暂延时a8255B=Dis_baiwei;/显示百位a8255A=0xfd;delay(300); /短暂延时a8255B=Dis_shiwei;/显示十位a8255A=0xfb;delay(300); /短暂延时a8255B=Dis_gewei; /显示个位a8255A=0xf7;delay(300);if(SP1=0) /按下 sp1 键跳出反应时间显示程序,进入开始的时间显示 break; void t
32、im0(void) interrupt 1 using 1 /定时器 0,用来显示正常的时间TH0=0xd8; /重新赋值TL0=0xf0;count+; /计数标志变量,加到 100 就是延时 1sif (count=100)count=0;second+;/秒加 1if(second=60) second=0; fen+; /分加 1Dis_miaoShiwei=tabsecond/10;/秒十位显示值处理Dis_miaoGewei=tabsecond%10; /个位显示处理Dis_fenShiwei=tabfen/10;/分十位显示值处理Dis_fenGewei=tabfen%10; /个位显示处理15