?? main.lst
字號:
C51 COMPILER V8.08 MAIN 05/24/2007 12:12:32 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\keil c51\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********************************
2 **公司名稱:esa.hicc **
3 **模 塊 名:計時秒表 **
4 **創 建 者:esa **
5 **修 改 者:esa **
6 **功能描述:精確到1/100S計時 **
7 **其他說明: **
8 **版 本:v1.0 **
9 *********************************/
10
11 #include <reg51.h>
12 #define uchar unsigned char
13 #define uint unsigned int
14
15 sbit P1_0 =P1^0;
16 sbit P1_1 =P1^1;
17 sbit P1_2 =P1^2;
18 sbit P1_3 =P1^3;
19
20 typedef struct
21 { uchar minute;
22 uchar second;
23 uchar second_1;
24 }time;
25
26 time now={0,0,0};
27 time now_1[10];
28
29 uchar code num_tab1[]={0x80,0x40,0x20,0x10,0x08,0x04};
30 uchar code num_tab2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽極顯示
31 uchar a=0;
32 uchar state=0;
33 uchar fy=0; //開始0和暫停1的復用標志
34
35
36 void delay(uint time1) //延時子程序
37 {
38 1 int i;
39 1 int k;
40 1 for(i=0;i<time1;i++)
41 1 for(k=0;k<100;k++);
42 1 }
43
44 void display(time disnum) //顯示子程序
45 {
46 1 int min_shi,min_ge,sec_shi,sec_ge,sec_1_shi,sec_1_ge,i;
47 1 int num[6]={0,0,0,0,0,0};
48 1 min_shi=disnum.minute/10;
49 1 min_ge=disnum.minute%10;
50 1 sec_shi=disnum.second/10;
51 1 sec_ge=disnum.second%10;
52 1 sec_1_shi=disnum.second_1/10;
53 1 sec_1_ge=disnum.second_1%10;
54 1 num[0]=min_shi;
55 1 num[1]=min_ge;
C51 COMPILER V8.08 MAIN 05/24/2007 12:12:32 PAGE 2
56 1 num[2]=sec_shi;
57 1 num[3]=sec_ge;
58 1 num[4]=sec_1_shi;
59 1 num[5]=sec_1_ge;
60 1 if(min_shi==0)
61 1 {
62 2 for(i=0;i<5;i++)
63 2 {
64 3 P2=num_tab1[i+1]; //先送位碼
65 3 P0=num_tab2[num[i+1]]; //再送段碼
66 3 delay(1);
67 3 }
68 2 }
69 1 else
70 1 {
71 2 for(i=0;i<6;i++)
72 2 {
73 3 P2=num_tab1[i];
74 3 P0=num_tab2[num[i]];
75 3 delay(1);
76 3 }
77 2 }
78 1 }
79
80 void interrupt_init(void)
81 {
82 1 EA=0;
83 1 TMOD=0x01;
84 1 TH0=0xd8;
85 1 TL0=0xf0;
86 1 IT0=1;
87 1 ET0=1;
88 1 EX0=1;
89 1 EA=1;
90 1 }
91
92 void interrup0(void) interrupt 0 using 3
93 { uchar i;
94 1 delay(1);
95 1 if(P1_0==0)
96 1 {
97 2 if(fy==0) //開始計時
98 2 {
99 3 TR0=1;
100 3 state=0;
101 3 fy=1;
102 3 }
103 2 else //暫停
104 2 {
105 3 TR0=0;
106 3 fy=0;
107 3 }
108 2
109 2 }
110 1 if(P1_1==0) //記時
111 1 {
112 2 if(a<10)
113 2 {
114 3 now_1[a]=now;
115 3 a++;
116 3 }
117 2
C51 COMPILER V8.08 MAIN 05/24/2007 12:12:32 PAGE 3
118 2 }
119 1 if(P1_2==0) //顯示記時
120 1 {
121 2 if(state<=a)
122 2 state++;
123 2 }
124 1 if(P1_3==0) //系統清零
125 1 {
126 2 TR0=0;
127 2 fy=0;
128 2 a=0;
129 2 now.minute=0;
130 2 now.second=0;
131 2 now.second_1=0;
132 2 for(i=0;i<10;i++)
133 2 {
134 3 now_1[i].minute=0;
135 3 now_1[i].second=0;
136 3 now_1[i].second_1=0;
137 3 }
138 2 }
139 1
140 1
141 1 }
142
143 void interrup1(void) interrupt 1 using 3
144 {
145 1 TR0=0;
146 1 TH0=0xd8;
147 1 TL0=0xf0;
148 1 TR0=1;
149 1 now.second_1++;
150 1 if(now.second_1==100)
151 1 {
152 2 now.second++;
153 2 now.second_1=0;
154 2 if(now.second==60)
155 2 {
156 3 now.minute++;
157 3 now.second=0;
158 3 if(now.minute==60)
159 3 {now.minute=0;}
160 3 }
161 2 }
162 1 }
163
164 void main(void)
165 { uchar j;
166 1 for(j=0;j<10;j++)
167 1 {
168 2 now_1[j].minute=0;
169 2 now_1[j].second=0;
170 2 now_1[j].second_1=0;
171 2 }
172 1 interrupt_init(); //中斷初始化
173 1 // TR0=1;
174 1 while(1)
175 1 {
176 2 switch(state)
177 2 {
178 3 case 0: display(now);break;
179 3 case 1: display(now_1[state-1]);break;
C51 COMPILER V8.08 MAIN 05/24/2007 12:12:32 PAGE 4
180 3 case 2: display(now_1[state-1]);break;
181 3 case 3: display(now_1[state-1]);break;
182 3 case 4: display(now_1[state-1]);break;
183 3 case 5: display(now_1[state-1]);break;
184 3 case 6: display(now_1[state-1]);break;
185 3 case 7: display(now_1[state-1]);break;
186 3 case 8: display(now_1[state-1]);break;
187 3 case 9: display(now_1[state-1]);break;
188 3 case 10:display(now_1[state-1]);break;
189 3 }
190 2
191 2 }
192 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 813 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 23
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 + -