《[毕业设计]基于微机键盘应用的人体反应系统设计.doc》由会员分享,可在线阅读,更多相关《[毕业设计]基于微机键盘应用的人体反应系统设计.doc(27页珍藏版)》请在三一办公上搜索。
1、目 录1 前言12 系统总体方案设计22.1方案比较22.2 方案论证与选择33 软件设计43.1程序流程图43.2主程序43.3菜单程序63.4测试程序83.5计时程序113.6系统介绍程序123.7结果显示程序134 系统调试145 系统功能和指标参数156 总结与体会187 参考文献19附录:Turbo C 2.0201 前言速度素质是指人体进行快速运动的能力,即在单位时问内迅速完成某一动作或通过某一距离的能力。它包括反应速度、动作速度和周期性运动的位移速度。反应速度是速度素质中的一个重要的部分。 反应速度是指人体对刺激发生反应的快慢。从生理机制分析,反应快慢取决于“反射弧”的五个环节:
2、感受器传人神经中枢延搁传出神经效应器。反应速度通常用“从刺激到开始发生反应的时间”,即反应时来衡量。 目前.国内外常用反应时指标研究运动员的机能状态及心理活动过程。反应速度是人类的基本生理素质之一。反应测试系统这个题目的提出是建立在学习接口技术课程的基础上。通过课程的学习,对计算机接口技术中各个重要的接口芯片内部原理、实现功能有了一定程度的掌握。在此之上,提出在接口技术范畴内一些较为复杂的仪器设计,主要复杂在进行多个芯片、功能的组合以实现更为高级实用的功能。反应测试仪能够定量的测试人的反映速度。利用这种仪器,可以在人才的选拔中起到积极的作用。例如选择少年体育运动员、舞蹈、杂技、魔术学员及其他要
3、求机敏素质的培养对象时,可以提供科学的数据。所以,反应测试仪的潜在实用价值极大。并且,在计算机专业中,反应测试仪的提出,主要对计算机接口芯片的控制和计算功能提出更高的要求。从各种文献资料中我们可以发现,现有的对此项目的研究是深入而广泛的。如机动车驾驶员反应测试仪、药物药理反应测试仪、听觉稳态诱发测试仪等等各个方面的课题研究层出不穷。而在技术上主要集中在单片机控制和由系统集成接口芯片进行功能组合等方向。并且在测试范围上也是种类众多。单从刚刚提到的反应测试仪器就可看到有对神经反应速度、身体反应速度等不同方面进行测试的。由于本人水平有限,无法全面把握计算机接口技术知识的互相衔接,在本项目中,仅对几个
4、功能原理比较简便的芯片进行实验,并且对其功能组合也并不复杂,以求在自身水平范围内,选择最少、最简洁、最低廉的功能组合实现题目所提要求。即设计一个能测试人的反应(响应)时间的仪器。按启动钮,测试开始,一旦看到灯亮,立即按测试钮,八段码显示反应时间xx.xx秒。在知识范围和时间范围以内,在完成题目基本要求的基础之上,对本仪器功能进行力所能及的扩充。如:在反应时间测试精度上、仪器操作的简便性上、被测试者的易测试性等方面。2 系统总体方案设计2.1方案比较方案一:这里介绍的人体反应速度测试器由数字电路芯片和LED发光二极管等组成,可以测出你对信号的反应能力,并将反应能力分为段,段数越高反应速度越快,经
5、常进行反应测试训练,可以逐步提高你的反应速度。反应测试器由开机延时、测试信号灯、时钟脉冲、减法计数、启动显示、停止控制等部分组成。 电路由3种共4只CMOS数字集成电路构成。其中IC1是双4位静态移位寄存器4015,其内部含有2组独立的4位串入并出移位寄存器,在本电路中将两组级联使用。 IC2是四2输入端或非门电路4001,IC3、IC4是6反相器4069,每个芯片内含有6个独立的反相器,具有较大的驱动电流能力,可以直接驱动发光二极管。 电源开关闭合后,LED10电源指示发光管点亮,之后延迟数秒,测试信号灯LED1点亮,减法计数器电路在时钟脉冲的作用下开始递减,由LED2LED9组成的测试显示
6、发光管依次熄灭,在这过程中,当被测试人按下停止按钮K2时,则时钟脉冲停振,减法计数器处于保持状态,LED2LED9的熄灭个数将记录为被测试者的反应速度。按键LED移位寄存器图2.1 方案一框图方案二:本次设计,是在已经学习的接口技术课程及所做实验基础上,加深对计算机内部的几个重要的接口芯片的技术功能的熟练掌握。并且积累一些进行计算机硬件设计、线路排布以及硬件程序编写的经验。对计算机接口芯片技术的原理在实验过程中加深理解,并且开拓自己在计算机硬件设计中的思路。在本次设计过程中,我们主要是在PC机上进行,用C语言编写程序,主要运用软件来实现,硬件方面不用花多大的功夫,就利用我们常用的键盘和PC机显
7、示就行了。键盘PC机显示图2.2 方案二框图2.2 方案论证与选择从原理框图来看,显然方案二要简单一些。方案一用的是移位寄存器来完成计时,而方案二是在PC机上直接利用软件来实现;从显示来看,方案一是用LED来显示,方案二则是利用PC机的显示器来显示。从整体来看,方案一需设计硬件电路,而方案二就直接用我们常用的电脑就可以完成了,无论从经济还是设计的工作量考虑,显然方案二都要优越于方案一,因此我选择方案二来完成这次的设计。3 软件设计3.1程序流程图NY开始结束菜单系统介绍退出开始测试显示结果是否按错图4.1 程序流程图3.2主程序/*FileName:*Author :*Vertion :0.1
8、*Modified:12-10*/#include #include #include #include #include #include #define N 5void Test(void);void Init(void);void Count(void);void Instruct(void); void DrawFace(int x,int y,int z);int main(void) clrscr();while(1)switch(menu_select()case 0:Test();break;case 1:Instruct();break; case 2:exit(0);ret
9、urn 0;3.3菜单程序/*/int menu_select(void) char *f= /*定义菜单字符串数组*/ *MENU*, /*菜单的标题行*/ 1. Start, 2. Instruction, 3. Quit, Press direction key to choose ; /*退出*/ char s80; int i; int key=0; /*记录所压键值*/ int c=0; textcolor(YELLOW); /*设置文本颜色为黄色*/ textbackground(BLUE); /*设置背景颜色为兰色*/ gotoxy(10,2); putch(0xda); /*
10、输出左上角边框*/ for(i=1;i44;i+) putch(0xc4); /*输出上边框水平线*/ putch(0xbf); /*输出右上角边框 */ for(i=3;i22;i+)/*输出左右两边的垂直线*/ gotoxy(10,i);putch(0xb3); gotoxy(54,i);putch(0xb3); gotoxy(10,22);putch(0xc0); /*输出左上角边框*/ for(i=1;i44;i+) putch(0xc4); /*输出下边框水平线*/ putch(0xd9); /*输出右下角边框*/ window(11,3,53,21); /* 制作显示菜单的窗口,大
11、小根据菜单条数设计*/ clrscr(); /*清屏*/ for(i=0;i8; /*对所压的键进行判断*/ gotoxy(10,i+1); textbackground(BLUE);/*设置背景颜色为蓝色*/ cprintf(%s,fi); /*输出菜单项*/ if(key=72) i=i=1?3:i-1; /*如压向上光标键,i减1,如已到第一行再上移,则到最后一行*/ if(key=80)i=i=3?1:i+1; /*如压向下光标键,i加1,如已到最后一行再下移,则到第一行*/ gotoxy(10,i+1); /*光标移动i的下一项*/ textbackground(LIGHTGREEN
12、); /*将背景颜色设为浅绿*/ cprintf(%s,fi); /*输出菜单项*/ c=i-1; /*给代表菜单选项的整数赋值*/ textbackground(BLACK); /*设置背景颜色为黑色*/ window(1,1,80,25); /*恢复原窗口大小*/ return c; /*返回代表菜单选项的整数值*/3.4测试程序/*/void Test(void) int i=0,k=0;int x,y,x1;static int n; float val5,mid;char ch3;char str8;clock_t start,end; clrscr();Init(); srand(
13、time(NULL);Count(); do k=(rand()%100); if(k=65 & k=90) x=rand()%100+200; y=rand()%100+150; setfillstyle(SOLID_FILL,YELLOW); bar(x,y,x+50,y+50); setcolor(RED); settextstyle(0,0,2); sprintf(ch,%c,k); outtextxy(x+10,y+10,ch); start=clock(); if(getch()=k+32) end=clock(); vali=(end-start)/CLK_TCK; else n
14、=n+1; setfillstyle(SOLID_FILL,YELLOW); bar(200,400,500,420); setcolor(RED); settextstyle(0,0,2); outtextxy(200,400,Sorry,you miss it!); vali=0.00000; sleep(1); i+; setfillstyle(SOLID_FILL,BLACK); bar(100,100,500,450); while(iN); setfillstyle(SOLID_FILL,YELLOW);bar(190,100,500,400); setcolor(RED);set
15、textstyle(0,0,2); outtextxy(200,100,The time used:); for(i=0,x=140;iN;i+,x+=20) sprintf(str,%d,i+1); outtextxy(200,x,str); outtextxy(220,x,:); sprintf(str,%f,vali); outtextxy(240,x,str); outtextxy(370,x,S); if(n=5) outtextxy(200,250,U lost all!); else mid=(float)(val0+val1+val2+val3+val4)/(N-n); out
16、textxy(200,250,You lost:); sprintf(ch,%d,n); outtextxy(350,250,ch); sprintf(str,%f,mid); outtextxy(200,270,The equal time is:); outtextxy(250,290,str); outtextxy(380,290,S); if(mid1.000000 & mid =0); setfillstyle(SOLID_FILL,BLACK); bar(100,100,450,120); /*/void Init(void)int gd=DETECT,gm,errorcode;
17、initgraph(&gd,&gm,);errorcode=graphresult(); if(errorcode!=grOk)printf(Graphics error:%sn,grapherrormsg(errorcode); printf(Press any key to exit!n);getch();exit(1);3.6系统介绍程序/*/ void Instruct(void)clrscr();Init(); setcolor(RED);settextstyle(0,0,3); outtextxy(100,50,WELCOME TO THE SYSTEM ); setcolor(W
18、HITE);settextstyle(0,0,1); outtextxy(50,100,This system is desiged to test the reaction of the pepole.The system );outtextxy(20,120,will dispaly a char on the screnn,when you see what it is.You must print);outtextxy(20,140,the same one as soon as possible.If you match it.The system will record); out
19、textxy(20,160,the time and calculate the score of you.If you cant match it.I am sorry);outtextxy(20,180,you lost it.Good luck next time! We will test five char every loop.);outtextxy(50,250,Press any key to continue.); DrawFace(350,350,50);getch(); closegraph(); 3.7结果显示程序/*/void DrawFace(int x,int y
20、,int z)setfillstyle(SOLID_FILL,YELLOW);fillellipse(x,y,z-10,z-10);setcolor(RED);line(x-20,y-20,x-10,y-20);line(x+10,y-20,x+20,y-20);line(x,y+20,x-10,y+10);line(x,y+20,x+10,y+10);fillellipse(x+10+z,y-10,5,5);fillellipse(x+50+z,y-30,40,20);outtextxy(x+20+z,y-40,come on!);/*/4 系统调试由于本设计所用到的硬件就是我们的电脑,这是
21、不需要我们去设计的,也就不需要调试了,所以本次设计的调试就主要是软件调试了。软件的调试和硬件也差不多,首先是通过观察,看有没有大的低级错误,观察无误后就将程序分成几个部分,比如说各个子程序都分别分成各个部分进行调试,如各个子程序都运行正常后,还得看他们是否能实现我们设计的功能,都能达到我们设计的功能后。再将各个子程序以及主程序放一起,并进行链接,看编译能否通过,如果没问题就可以运行了。能正常运行后,再看看其是否能达到设计的功能以及指标。从整个来看的话,软件的调试要简单易行一些,而且一般不会象硬件调试那样,如果不小心就会很容易造成硬件的顺坏,相反,软件调试一般是不会造成硬件的顺坏的。还有软件的调
22、试不会象硬件调试那么盲目,一般来说,软件调试的过程中都会有一些提示的。5 系统功能和指标参数1) 进入菜单时界面如下,有三个选项:1、Start(开始);2、Instruction(人体反应测试介绍);3、Quit(退出)。 图5.1 主菜单图2)选择Start(开始)选项,进入人体反应测试界面,如下图所示,界面上随机显示字母,测试根据显示的字母按下键盘上相应的按键。图5.2 测试字母显示界面如果按下的不是以上界面显示的字母,则出现出错提示,如下图所示。图5.2 出错提示界面3)按完五个键后,显示出测试结果,如下图所示。分别显示出了每次按键反应的时间图5.3 结果显示界面4)选择Instruc
23、tion(人体反应测试介绍)选项则进入人体反应测试系统的简要介绍,其界面如下。图5.4 人体反应测试系统介绍界面6 总结与体会 身为测控专业的学生,设计是我们将来必需具备的技能。而这次课程设计恰恰给我们提供了一个应用自己所学知识去勇于创新和实践的平台。从通过理论设计,到仿真软件仿真,再到确定具体方案,再到安装实际电路,最后到调试电路、成型。整个过程都需要我充分利用所学的知识进行思考、借鉴。可以说,本次课程设计是针对前面所学的知识进行的一次比较综合的检验。总的来说,这次课程设计虽然很累,但却是苦中有乐,非常充实。在这次实习中,正确的思路是很重要的,只有你的设计思路是正确的,那你的设计才有可能成功
24、。 因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础,所以跑图书馆和上网查资料成为了我每天的必修课。 本次课程设计不仅培养了我们的科学严谨的学习态度,使我们认识到不管做任何事都要付出一定的努力,才会有大的收获。同时也让我们领略到电子技术科学知识领域的广袤。相信这次课程设计过后,我们的理论水平和实践动手能力都会有一个质的飞跃,也为今后的实践课程及毕业设计打下了坚实的基础。要做好本次的课程设计,熟练地掌握课本上的理论知识是前提。这样才能对试验中出现的问题进行一定的分析和解决。当然能完成本次设计,更离不开老师辛勤地指导,老师能在百忙中来指导我,每当我遇到了棘手的
25、问题,老师总能给我最好的建议,教我改进得方法,不厌其烦地指出我在设计中存在的问题和错误,使我能更好地完成设计。正是老师不厌其烦的指导和每天下午的讲解,让我的设计思路越发清晰,明朗,清除了应该从哪些方面着手,工作。终于有了这次课程设计作品的诞生,这是我上大学以来第一次把所学的电子电工知识运用到实践当中,兴奋之余也开始对今后的学习奋斗目标有了比较明确的规划,感谢老师让我顺利完成了这次的课程设计,虽然整个过程很辛苦,却是苦中有乐!7 参考文献1 刘乐善,等.微型计算机接口技术及应用M.武汉:华中科技大学出版社,2000.42 于英明,等.计算机接口技术M.北京:电子工业出版社,2004.73 王力虎
26、,等.PC控制及接口程序设计实例M.北京:科学出版社,2004.44 罗耀华,孟繁荣,姚绪梁等.单片机原理及应用技术M.哈尔滨:哈尔滨工程大学出版社,20055 刘天旺主编.ProtelSE电路设计应用教程M.北京:电子工业出版社,2007.96 刘鲲,孙春亮编著.单片机C语言入门. 北京:人民邮电出版社,2008,47 龚运新编著.单片机C语言开发技术. 北京:清华大学出版社,2006.98 康华光.电子技术基础:模拟部分(第四版)M北京:高等教育出版社,19999 康华光.电子技术基础:数字部分(第四版)M北京:高等教育出版社,200010 门宏.精选电子制作图解66例M北京:人民邮电出版
27、社,200111 沈红卫.基于单片机的智能系统设计与实现M.北京:电子工业出版社,2005.112 吴慎山主编.电子线路设计与实践M.北京:电子工业出版社,2005.913 陈晓文主编.电子线路课程设计M.北京:电子工业出版社,2004附录:Turbo C 2.01、Turbo C 的产生与发展Turbo C 是美国Borland 公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套 Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 这些软件很受用户欢迎。该公司在1987年首次推出Turbo C 1.0
28、 产品, 其中使用了全然一新的集成开发环境, 即使用了一系列下拉式菜单,将文本编辑、程序编译、连接以及程序运行一体化, 大大方便了程序的开发。1988年, Borland 公司又推出Turbo C1.5版本, 增加了图形库和文本窗口函数库等, 而Turbo C 2.0 则是该公司1989年出版的。Turbo C2.0在原来集成开发环境的基础上增加了查错功能, 并可以在Tiny模式下直接生成.COM (数据、代码、堆栈处在同一64K 内存中) 文件。还可对数学协处理器 (支持8087/80287/80387等)进行仿真。 Borland 公司后来又推出了面向对象的程序软件包Turbo C+,它继
29、承发展 Turbo C 2.0 的集成开发环境, 并包含了面向对象的基本思想和设计方法。1991年为了适用Microsoft 公司的Windows 3.0 版本, Borland 公司又将Turbo C+ 作了更新, 即Turbo C 的新一代产品Borlandc C+也已经问世了。 2、Turbo C 2.0集成开发环境的使用 进入Turbo C 2.0集成开发环境中后, 屏幕上显示: File Edit Run Compile Project Options Debug Break/watch Edit Line 1 Col 1 Insert Indent Tab File Uninden
30、t c:NONAME.C Message F1-Help F5-Zoom F6-Switch F7-Trace F8-Step F9-Make F10-Menu 其中顶上一行为Turbo C 2.0 主菜单, 中间窗口为编辑区, 接下来是信息窗口, 最底下一行为参考行。这四个窗口构成了Turbo C 2.0的主屏幕, 以后的编程、编译、调试以及运行都将在这个主屏幕中进行。下面详细介绍主菜单的内容。1)主菜单 主菜单 在Turbo C 2.0主屏幕顶上一行, 显示下列内容: File Edit Run Compile Project Options Debug Break/watch 除Edit
31、外, 其它各项均有子菜单, 只要用Alt加上某项中第一个字母(即大写字母), 就可进入该项的子菜单中。 一、File(文件)菜单 按Alt+F可进入File菜单, 该菜单包括以下内容: .Load(加载) 装入一个文件, 可用类似DOS的通配符(如*.C)来进行列表选择。也可装入其它扩展名的文件, 只要给出文件名(或只给路径)即可。该项的热键为F3, 即只要在主 菜单中按F3即可进入该项, 而不需要先进入File菜单再选此项。 .Pick(选择) 将最近装入编辑窗口的8个文件列成一个表让用户选择, 选择后将该程序装入编辑区, 并将光标置在上次修改过的地方。其热健为Alt-F3。.New(新文件
32、)说明文件是新的, 缺省文件名为NONAME.C, 存盘时可改名。 .Save(存盘) 将编辑区中的文件存盘, 若文件名是NONAME.C时, 将询问是否更改文件名, 其热键为F2。 .Write to(存盘) 可由用户给出文件名将编辑区中的文件存盘, 若该文件已存在, 则询问要不要覆盖。 .Directory(目录) 显示目录及目录中的文件, 并可由用户选择。 .Change dir(改变目录) 显示当前目录, 用户可以改变显示的目录。 .Os shell(暂时退出) 暂时退出Turbo C 2.0到DOS提示符下, 此时可以运行DOS 命令, 若想回到 Turbo C 2.0中, 只要在D
33、OS状态下键入EXIT即可。 .Quit(退出) 退出Turbo C 2.0, 返回到DOS操作系统中, 其热键为Alt+X。 说明: 以上各项可用光标键移动色棒进行选择, 回车则执行。也可用每一项的第一个大写字母直接选择。若要退到主菜单或从它的下一级菜单列表框退回均可用Esc键, Turbo C 2.0所有菜单均采用这种方法进行操作, 以下不再说明。 二、Edit(编辑)菜单 按Alt+E可进入编辑菜单, 若再回车, 则光标出现在编辑窗口, 此时用户可以 进行文本编辑。编辑方法基本与wordstar相同, 可用F1键获得有关编辑方法的帮助信息。与编辑有关的功能键如下: F1 获得Turbo
34、C 2.0编辑命令的帮助信息 F5 扩大编辑窗口到整个屏幕 F6 在编辑窗口与信息窗口之间进行切换 F10 从编辑窗口转到主菜单 编辑命令简介: PageUp 向前翻页 PageDn 向后翻页 Home 将光标移到所在行的开始 End 将光标移到所在行的结尾 Ctrl+Y 删除光标所在的一行 Ctrl+T 删除光标所在处的一个词 Ctrl+KB 设置块开始 Ctrl+KK 设置块结尾 Ctrl+KV 块移动 Ctrl+KC 块拷贝 Ctrl+KY 块删除 Ctrl+KR 读文件 Ctrl+KW 存文件 Ctrl+KP 块文件打印 Ctrl+F1 如果光标所在处为Turbo C 2.0库函数,
35、则获得有关该函数的帮助信息 Ctrl+Q 查找Turbo C 2.0双界符的后匹配符 Ctrl+Q 查找Turbo C 2.0双界符的前匹配符 说明: 1. Turbo C 2.0的双界符包括以下几种符号: 花括符 和 尖括符 圆括符 (和) 方括符 和 注释符 /*和*/ 双引号 单引号 2. Turbo C 2.0在编辑文件时还有一种功能, 就是能够自动缩进, 即光标定位和上一个非空字符对齐。在编辑窗口中, Ctrl+OL为自动缩进开关的控制键。 三、Run(运行)菜单 按Alt+R可进入Run菜单, 该菜单有以下各项: .Run(运行程序) 运行由Project/Project name
36、项指定的文件名或当前编辑区的文件。如果对上次编译后的源代码未做过修改, 则直接运行到下一个断点(没有断点则运行到结束)。否则先进行编译、连接后才运行, 其热键为Ctrl+F9。 .Program reset(程序重启) 中止当前的调试, 释放分给程序的空间, 其热键为Ctrl+F2。 .Go to cursor(运行到光标处) 调试程序时使用, 选择该项可使程序运行到光标所在行。光标所在行必须为一条可执行语句, 否则提示错误。其热键为F4。 .Trace into(跟踪进入) 在执行一条调用其它用户定义的子函数时, 若用Trace into项, 则执行长条将跟踪到该子函数内部去执行, 其热键为
37、F7。 .Step over(单步执行) 执行当前函数的下一条语句, 即使用户函数调用, 执行长条也不会跟踪进函数内部, 其热键为F8。 .User screen(用户屏幕) 显示程序运行时在屏幕上显示的结果。其热键为Alt+F5。 四、Compile(编译)菜单 按Alt+C可进入Compile菜单, 该菜单有以下几个内容: .Compile to OBJ(编译生成目标码) 将一个C源文件编译生成.OBJ目标文件, 同时显示生成的文件名。其热键为Alt+F9。 .Make EXE file(生成执行文件) 此命令生成一个.EXE的文件, 并显示生成的.EXE文件名。其中.EXE文件名是下面几
38、项之一。 1. 由Project/Project name说明的项目文件名。 2. 若没有项目文件名, 则由Primary C file说明的源文件。 3. 若以上两项都没有文件名, 则为当前窗口的文件名。 .Link EXE file(连接生成执行文件) 把当前.OBJ文件及库文件连接在一起生成.EXE文件。 .Build all(建立所有文件) 重新编译项目里的所有文件, 并进行装配生成.EXE文件。该命令不作过时检查(上面的几条命令要作过时检查, 即如果目前项目里源文件的日期和时间与目标文件相同或更早, 则拒绝对源文件进行编译)。 .Primary C file(主C文件) 当在该项中指定了主文件后, 在以后的编译中, 如没有项目文件名则编译此项中规定的主C文件, 如果编译中有错误, 则将此文件调入