⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.c

📁 人体反应速度测试仪(测按键反应速度) P2,P3分别接的数码管做为十位和个位。 P1.0与按键相接于GND. P1.1接发光二极管做为指示灯
💻 C
字号:
/*            反应速度测试仪

P2,P3分别接的数码管做为十位和个位。
P1.0与按键相接于GND.
P1.1接发光二极管做为指示灯,管脚低电平时亮
定时器0工作于方式2,自动重装,按键后取随机数
定时器1工作于方式1,计算反应时间,晶振为11.0592*/


#include <reg51.h>//51单片机头文件
#define uchar unsigned char//宏定义,用uchar 代表 usigned char(无符号字符型数据)
#define uint unsigned int
#define ulong unsigned long
sbit P10=P1^0;//用P10表示P1口第0个管脚
sbit P11=P1^1;
uchar count;//全局变量,标记定时器溢出多少次
uchar code LED[]={0x3f,0x06,0x5b,0x4f,0x66,
	    0x6d,0x7d,0x07,0x7f,0x6f,0x00};//这些数组放到数码管里就显示0-9,全灭全亮
 //LED[10]表示LED数组的第10个数。数码管为共阴极,管脚高电平对应数码管的一位亮起
		  


void delay(ulong n)//延时子程序
{	
	uint m;//定义m 为无符号整型变量
	for(m=0;m<30000;m++); //单片给m做加一运算,直到m<30000,其实就是延时去除
  		     	//按键抖动,因为此延时是检测到按键后立即执行,键其实依然被按着
	while(n--)//当n大于0时下面的语句循环
	{
		if(P10==0)//P10接的是一个按键,当P10==0时,说明键被按下
		{
			P2=LED[10];
			P3=LED[10];//说明用户在发光二极管未亮时按下键,数码管显示全灭
		}
	}
}



void main()//主函数
{
	uchar i,j,k;
	uint x;
	TMOD=0x12;//定时器1工作于方式1,//定时器0工作于方式2
	TH0=0;TL0=0;//定时器0计数初值,定时器0用于是产生随机数
	TH1=0xdc;TL1=0;//定时器1计数初值 
	TR0=0;//开启定时器0
	EA=1;//开启总中断
	ET1=1;//开启定时器1中断

while(1)//实际程序总是在这里循环
{
	TR1=0;//关闭定时器1
	TH1=0xdc;TL1=0;//重置定时器1计数初值
	while(1)//以下语v句循环
	{
		P2=LED[10];P3=LED[10];//P2,P3分别接的十位和个位,现在全灭
		if(P10==0)//如果键被按下
		{
			x=TL0;//取随机数
			P2=LED[0];P3=LED[0];//十位和个位显示00
			break;//跳出while循环,不仅仅是跳出if
		}
	}
	delay(3000*(30+50*x));//根据随机数来延时
	P11=0;//P11接的是一个发光二极管,低电平亮
	TR1=1;//开启定时器1,开始计算用户反应时间
	while(1)//循环
	{
	if(P10==0)break;//用户反应过来了。
	}
	k=count%100;//对count求100的余,赋值给k
	i=k/10%10;//十位
	j=k%10;//个位
	P2=LED[i];P3=LED[j];//显示十位和个位,即用户反应时间
	for(x=0;x<65000;x++);//让用户看一下他的反应时间
	P11=1;count=0;//灭灯,清0
}
}



void timer1() interrupt 3 //中断服务程序
{	
	TH1=0xdc;
	TL1=0;//重新赋值
	count++;//每10ms 溢出一次,count 加一
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -