ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:18.50KB ,
资源ID:30019328      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30019328.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机原理与接口技术人体反应速度测试仪设计大学论文.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机原理与接口技术人体反应速度测试仪设计大学论文.docx

1、单片机原理与接口技术人体反应速度测试仪设计大学论文 学号 14132201413 序号 6 单片机原理与接口技术 实验报告实验项目序号 4 实验项目名称 人体反应速度测试 姓 名 莫 旭 涛 专 业 电子信息工程 班 级 电信13-4BF 完成时间 2014年月10月16日 一调试心得这是我们第一个用C语言编写的项目实例,刚刚开始的时候,对C是有些陌生的,但是经过这么一个案例的编写,明显对C语言的操作变得熟练了。相比起汇编来,C语言人性化许多,修改错误也比较让人习惯。在这程序的编写中,同样遇到了许多的问题,但是只要花时间,就没有解决不了了问题。在编写这个程序的时候,首先要解决的问题是矩阵键盘和

2、数码管的显示,这两个模块我们用得非常多,在以后对单片机的操作中也会经常用到,所以,我们最好写成模块的形式,方便以后调用。再次遇到要使用矩阵键盘和数码管的时候,就可以直接把代码复制粘贴过来使用。编写这个程序遇到的第一个疑难杂症就是游戏次数的设置,因为书上的代码是在一个while循环中进行的,所以没有游戏次数可言。每次反应速度的测试显示一个相应的值,但是我们自己写的代码中明显是要设置游戏次数的,这样才能取出平均值,让我们测量的反应时间变得更加精确。所以我们while循环中要设置一个调出循环的次数,这个次数就是我们游戏次数,在这里,要注意初值和减一所放的位置。第二个疑难是随机数的生成,因为在51单片

3、机中是不支持对系统时间的调用,所以没有 也不能使用时间函数,而我们所有的算法算出来的数都会是一个有一定规律顺序的数。再次,如果用另外一个定时器来生成随机数,就可以做到代替时间函数,生成真正的随机数。二程序代码功能简介:第一部分的代码:第八个数码管显示要按下的键,第6个数码管显示实际按下的键值。若按对,录入反应时间;若按错,置反应时间为9999ms。1-4个数码管显示几次按键的平均反应时间。第二部分代码:实现书上测试反应速度的程序。程序开始后,按下按键,led灯一直亮着,直到一个随机的时间,led灯熄灭。此时可以松手,记灯熄灭到松手的时间差为反应时间。代码如下:矩阵键盘模块:#include p

4、roject18s.h#include uchar key_value=0x10;uchar temp,a;uchar keyboard() uchar i,t=4; P2=0xFF; /P2口写1 a=0x7F; /p_value赋初始值 i=1; while(t-) a=_crol_(a,1);/循环左移一位,检测下一行 key_scan(); i+; if(i=5) i=1; a=0x7f; return key_value;void key_scan() P2=a; /P2.0置零 temp=P2; /读P2口的值 temp=temp&0xF0; /取高四位,都得用temp,即temp

5、=p2,temp=temp&0xf0; while(temp!=0xF0) /如果高四位不全为0,则有键下 delay(5); /延时消抖 while(temp!=0xF0) /再读一次,如果高四位还是不全为0,真的有键按下了 temp=P2; /读P2口的值给temp switch(temp) case 0xEE:key_value=0; break; case 0xDE:key_value=1; break; case 0xBE:key_value=2; break; case 0x7E:key_value=3; break; case 0xED:key_value=4; break; c

6、ase 0xDD:key_value=5; break; case 0xBD:key_value=6; break; case 0x7D:key_value=7; break; case 0xEB:key_value=8; break; case 0xDB:key_value=9; break; case 0xBB:key_value=10; break; case 0x7B:key_value=11; break; case 0xE7:key_value=12; break; case 0xD7:key_value=13; break; case 0xB7:key_value=14; bre

7、ak; case 0x77:key_value=15; break; while(temp!=0xf0) /松手检测 temp=P2; temp=temp&0xf0; seed+=times; key_hit=1; times-; void delay(uint z) uint m,n; for(m=z;m0;m-) for(n=78;n0;n-);数码管显示模块:#include project18s.hsbit seg_oe=P13; /数码管显示使能端,低电平有效sbit duanxuan=P14; /数码管的段选端sbit weixuan=P15; /数码管的位选端uchar code

8、 smg_duan17=0x3F,0x06,0x5B,0x4F, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x76; /数码管段选码表,我们的数码管是共阴极数码管uchar code smg_wei8=0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe;/选择亮哪一个数码管void seg_disp(uchar wei,uchar duan) /单个数码管的显示 weixuan=1; P0=smg_weiwei; weixuan=0; duanxuan=1; P0=smg_duan

9、duan; duanxuan=0; seg_oe=0; delay10ms(); seg_oe=1;void delay10ms() uchar i,j; for(i=1;i40;i+) for(j=1;j40;j-);头文件:#ifndef Pro_H#define Pro_H#include #define uchar unsigned char#define uint unsigned int#define game_times 2 /游戏次数extern uchar key_hit;extern int seed;extern int times;void seg_disp(uchar

10、,uchar);void delay10ms();uchar keyboard();void key_scan();void delay(uint);#endif主程序代码:/*项目18单片机人体反应速度测试仪的设计*包含模块:矩阵键盘,数码管,定时器*/#include project18s.h#include #include uchar key_hit=0;int seed=12;int times=game_times;uchar disp5;int mstime=0;void display(uint ms) /显示反应时间 uchar i; disp3=ms/1000; disp2

11、=(ms%1000)/100; disp1=(ms%100)/10; disp0=ms%10; for(i=0;i4;i+) seg_disp(i,dispi); unsigned long random(uchar k) /生成随机数 uint rt; srand(k); rt=rand(); rt=rt*rand(); return rt;int average(int time) /求反应时间的平均值 int i,sum=0; for(i=0;igame_times-1;i+) sum+=timei; return(sum/game_times);void main() int time

12、game_times=0; uchar disp_num,hit_num; uchar disp_ms; TMOD=0x11; TH0=0xfc; TL0=0x17; TR0=1; ET0=1; EA=1; while(1) while(times) while(1) disp_num=random(seed)%16; hit_num=keyboard(); seg_disp(5,hit_num); seg_disp(7,disp_num); if(!key_hit) if(TF0=1) TR0=1; TF0=0; if(key_hit) TR0=0; key_hit=0; disp_ms=m

13、stime; break; if(disp_num=hit_num) display(disp_ms); timetimes=disp_ms; else display(9999); timetimes=9999; mstime=0; TR0=1; seg_disp(5,hit_num); seg_disp(7,disp_num); display(average(time); void Int_T0(void) interrupt 1 +mstime; TH0=0xfc; /(65535-1000)/256=252=0xfc 定时时间1ms TL0=0x17; /(65535-1000)%2

14、56=23=0x17书上的代码经调试可用,如下:主程序代码:#include project18.h#include #include #include sbit key=P20;sbit led=P10;typedef unsigned char byte;typedef unsigned int word;static byte disp5;code byte table11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;byte bot(void) if(key=0) return 0; else return 1;void disp

15、lay(word ms) uchar i; disp3=ms/1000; disp2=(ms%1000)/100; disp1=(ms%100)/10; disp0=ms%10; for(i=0;i0;-j) delay1ms(); k=bot(); if(k=1) mstime=9999; goto loop; led=1; INIT_TMR1(); while(1) if(TF1=1) TH1=0xfc; TL1=0x18; TR1=1; TF1=0; +mstime; if(k=bot() break; loop:led=1; while(1) if(k=1) k=bot(); disp

16、lay(mstime); else mstime=0; P2=0xff; break; 头文件代码:#ifndef Pro_H#define Pro_H#include #define uchar unsigned char#define uint unsigned intvoid seg_disp(uchar,uchar);void delay10ms();#endif数码管模块:#include project18.hsbit seg_oe=P13; /数码管显示使能端,低电平有效sbit duanxuan=P14; /数码管的段选端sbit weixuan=P15; /数码管的位选端uc

17、har code smg_duan16=0x3F,0x06,0x5B,0x4F, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; /数码管段选码表,我们的数码管是共阴极数码管uchar code smg_wei8=0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe;/选择亮哪一个数码管void seg_disp(uchar wei,uchar duan) uchar i,j; for(i=0;i8;i+) weixuan=1; P0=smg_weiwei; weixuan=0; duanxuan=1; P0=smg_duanduan; duanxuan=0; seg_oe=0; delay10ms(); seg_oe=1; void delay10ms() uchar i,j; for(i=1;i0;j-);

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

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