📄 time.lst
字号:
C51 COMPILER V7.50 TIME 07/13/2007 16:59:01 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE time.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2
3 #define scr1 P1 //个位显示屏(右),P1~P7
4 #define scr10 P2 //十位显示屏(左),P2~p7
5 //晶振频率20MHZ,最小计时时间0.6us,此程序选用计时方式2,预置数设为-167,溢出一次为0.100ms
6
7 sbit keystart = P3 ^ 5; //开始键(k3)
8 sbit key1 = P1 ^ 7; //个位调整键(k1)
9 sbit key10 = P3 ^ 4; //十位调整键(k2)
10 signed char s1 = 0; //记录个位的值
11 signed char s10 = 0; //记录十位的值
12
13 void main(void)
14 {
15 1 bit k1; //记录key1键的状态,0松开,1按下
16 1 bit k10; //记录key10键的状态,0松开,1按下
17 1 bit ks; //记录keystart键的状态,0松开,1按下
18 1 unsigned int t1; //延时1秒
19 1 unsigned char num[10] =
20 1 //0 1 2 3 4 5 6 7 8 9
21 1 {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极
22 1 unsigned char zt; //zt =
23 1 // 0 起始状态,等待输入,显示器显示00
24 1 // 1 等待启动状态,此时十位和个位不同时为0
25 1 // 2 倒计时状态
26 1 // 3 暂停状态
27 1 TMOD = (TMOD&0xf0) | 0x0a; //设置计时方式2
28 1 TL0 = -167;
29 1 TH0 = -167;
30 1 while(1)
31 1 {
32 2 if(zt == 0)
33 2 {
34 3 s1 = 0;
35 3 s10 = 0;
36 3 }
37 2 scr1 = num[s1];
38 2 scr10 = num[s10];
39 2 //key1键检测
40 2 if(k1 == 0 && zt != 2 && zt != 3)
41 2 {
42 3 if(key1 == 0) //检测到个位键按下
43 3 {
44 4 k1 = 1;
45 4 if(++s1 > 9)
46 4 {
47 5 s1 = 0;
48 5 if(++s10 > 9)s10 = 0; //向十位进位
49 5 }
50 4 if(s1 != 0 || s10 != 0)zt = 1;
51 4 else zt = 0;
52 4 }
53 3 }
54 2 if(k1 == 1 && key1 == 1)k1 = 0; //松开个位键
55 2 //key10键检测
C51 COMPILER V7.50 TIME 07/13/2007 16:59:01 PAGE 2
56 2 if(k10 == 0 && zt != 2 && zt != 3)
57 2 {
58 3 if(key10 == 0) //检测到个位键按下
59 3 {
60 4 k10 = 1;
61 4 if(++s10 > 9)
62 4 {
63 5 s10 = 0;
64 5 }
65 4 if(s1 != 0 || s10 != 0)zt = 1;
66 4 else zt = 0;
67 4 }
68 3 }
69 2 if(k10 == 1 && key10 == 1)k10 = 0; //松开个位键
70 2
71 2 //状态辨别
72 2 if(s1 == 0 && s10 == 0)zt = 0;
73 2 //keystart键检测
74 2 if(ks == 0 && zt != 0)
75 2 {
76 3 if(keystart == 0) //检测到start键按下
77 3 {
78 4 ks = 1;
79 4 if(zt == 1)
80 4 {
81 5 zt = 2;
82 5 TR0 = 1;
83 5 }
84 4 else if(zt == 2)
85 4 {
86 5 zt = 3;
87 5 TR0 = 0;
88 5 }
89 4 else if(zt == 3)zt = 0;
90 4 }
91 3 }
92 2 if(ks == 1 && keystart == 1)ks = 0; //松开start键
93 2 if(zt == 2)
94 2 {
95 3 if(TF0 == 1)
96 3 {
97 4 TF0 = 0;
98 4 if(++t1 >= 10000)
99 4 {
100 5 t1 = 0;
101 5 if(--s1 < 0)
102 5 {
103 6 s1 = 9;
104 6 if(--s10 < 0)
105 6 {
106 7 TR0 = 0;
107 7 zt = 0;
108 7 }
109 6 }
110 5 }
111 4 }
112 3 }
113 2 }
114 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.50 TIME 07/13/2007 16:59:01 PAGE 3
CODE SIZE = 327 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 13
IDATA SIZE = ---- ----
BIT SIZE = ---- 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -