📄 text1.lst
字号:
C51 COMPILER V6.23a TEXT1 11/06/2008 23:43:19 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /* 反应速度测试仪
2
3 P2,P3分别接的数码管做为十位和个位。
4 P1.0与按键相接于GND.
5 P1.1接发光二极管做为指示灯,管脚低电平时亮
6 定时器0工作于方式2,自动重装,按键后取随机数
7 定时器1工作于方式1,计算反应时间,晶振为11.0592*/
8
9
10 #include <reg51.h>//51单片机头文件
11 #define uchar unsigned char//宏定义,用uchar 代表 usigned char(无符号字符型数据)
12 #define uint unsigned int
13 #define ulong unsigned long
14 sbit P10=P1^0;//用P10表示P1口第0个管脚
15 sbit P11=P1^1;
16 uchar count;//全局变量,标记定时器溢出多少次
17 uchar code LED[]={0x3f,0x06,0x5b,0x4f,0x66,
18 0x6d,0x7d,0x07,0x7f,0x6f,0x00};//这些数组放到数码管里就显示0-9,全灭全亮
19 //LED[10]表示LED数组的第10个数。数码管为共阴极,管脚高电平对应数码管的一位亮起
20
21
22
23 void delay(ulong n)//延时子程序
24 {
25 1 uint m;//定义m 为无符号整型变量
26 1 for(m=0;m<30000;m++); //单片给m做加一运算,直到m<30000,其实就是延时去除
27 1 //按键抖动,因为此延时是检测到按键后立即执行,键其实依然被按着
28 1 while(n--)//当n大于0时下面的语句循环
29 1 {
30 2 if(P10==0)//P10接的是一个按键,当P10==0时,说明键被按下
31 2 {
32 3 P2=LED[10];
33 3 P3=LED[10];//说明用户在发光二极管未亮时按下键,数码管显示全灭
34 3 }
35 2 }
36 1 }
37
38
39
40 void main()//主函数
41 {
42 1 uchar i,j,k;
43 1 uint x;
44 1 TMOD=0x12;//定时器1工作于方式1,//定时器0工作于方式2
45 1 TH0=0;TL0=0;//定时器0计数初值,定时器0用于是产生随机数
46 1 TH1=0xdc;TL1=0;//定时器1计数初值
47 1 TR0=0;//开启定时器0
48 1 EA=1;//开启总中断
49 1 ET1=1;//开启定时器1中断
50 1
51 1 while(1)//实际程序总是在这里循环
52 1 {
53 2 TR1=0;//关闭定时器1
54 2 TH1=0xdc;TL1=0;//重置定时器1计数初值
55 2 while(1)//以下语v句循环
C51 COMPILER V6.23a TEXT1 11/06/2008 23:43:19 PAGE 2
56 2 {
57 3 P2=LED[10];P3=LED[10];//P2,P3分别接的十位和个位,现在全灭
58 3 if(P10==0)//如果键被按下
59 3 {
60 4 x=TL0;//取随机数
61 4 P2=LED[0];P3=LED[0];//十位和个位显示00
62 4 break;//跳出while循环,不仅仅是跳出if
63 4 }
64 3 }
65 2 delay(3000*(30+50*x));//根据随机数来延时
66 2 P11=0;//P11接的是一个发光二极管,低电平亮
67 2 TR1=1;//开启定时器1,开始计算用户反应时间
68 2 while(1)//循环
69 2 {
70 3 if(P10==0)break;//用户反应过来了。
71 3 }
72 2 k=count%100;//对count求100的余,赋值给k
73 2 i=k/10%10;//十位
74 2 j=k%10;//个位
75 2 P2=LED[i];P3=LED[j];//显示十位和个位,即用户反应时间
76 2 for(x=0;x<65000;x++);//让用户看一下他的反应时间
77 2 P11=1;count=0;//灭灯,清0
78 2 }
79 1 }
80
81
82
83 void timer1() interrupt 3 //中断服务程序
84 {
85 1 TH1=0xdc;
86 1 TL1=0;//重新赋值
87 1 count++;//每10ms 溢出一次,count 加一
88 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 234 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -