📄 18.lst
字号:
C51 COMPILER V7.09 18 04/15/2008 09:47:15 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 18
OBJECT MODULE PLACED IN 18.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 *********************************************************************************************************
3 *
4 * 倒计时牌源代码
5 *
6 * CPU :AT89C2051
7 *
8 * FILE : 18.C
9 * By : CC
10 * DATE : 2008-04-05
11 * VERSION : 1.0
12 * 修改记录 :
13 *********************************************************************************************************
14 */
15
16
17 #include<REG2051.H>
18 #include<X5045.H>
19
20 #define uchr unsigned char
21 #define uint unsigned int
22
23 #define T100MS 90//100ms
24 #define T500MS 420//500ms
25 #define T1S 1000//1000ms
26 #define TMAX 20000//20s
27 #define DISP_0 0xFC
28 #define DISP_1 0x0C
29 #define DISP_2 0xDA
30 #define DISP_3 0xF2
31 #define DISP_4 0x66
32 #define DISP_5 0xB6
33 #define DISP_6 0xBE
34 #define DISP_7 0xE0
35 #define DISP_8 0xFE
36 #define DISP_9 0xF6
37 #define DISP_10 0x01
38
39 sbit LE = P3^7;
40 sbit p17 = P1^7;
41
42 bit freset = 0;//复位标志
43 bit frcntdstart = 0;//红倒计时开始标志
44 bit fgcntdstart = 0;//绿倒计时开始标志
45 bit frpulsechk = 0;//红脉宽检查开始标志
46 bit fgpulsechk = 0;//绿脉宽检查开始标志
47 bit frcntdend = 0;//红倒计时结束标志
48 bit fgcntdend = 0;//绿倒计时开始标志
49 bit frcomp = 0;//红倒计时比较标志
50 bit fgcomp = 0;//绿倒计时比较标志
51 bit frdisp = 0;//红倒计时显示标志
52 bit fgdisp = 0;//绿倒计时显示标志
53
54
55 uchr rcountdn[20] = 0;//红倒计时
C51 COMPILER V7.09 18 04/15/2008 09:47:15 PAGE 2
56 uchr gcountdn = 0;//绿倒计时
57 uchr rcntdtim = 0;//红倒计时计数器
58 uchr gcntdtim = 0;//绿倒计时计数器
59 uint rchktim = 0;//红脉宽计数器
60 uint gchktim = 0;//红脉宽计数器
61 uint r1stim = 0;//红1秒计数器
62 uint g1stim = 0;//红1秒计数器
63 /*uint tt2=0;
64 uint tt1=0;
65 uint tt0=0;
66 uint tt[10]={0};*/
67
68
69 //T0:16位,1ms
70 void t0int() interrupt 1
71 {
72 1 TL0=0x66;
73 1 TH0=0xFC;
74 1 //tt0++;
75 1 if(frpulsechk)
76 1 {
77 2 rchktim++;
78 2 if(rchktim>=T1S)
79 2 {
80 3 frpulsechk=0;
81 3 rchktim=0;
82 3 if(frcntdstart)
83 3 {
84 4 frcntdend=1;
85 4 }
86 3 }
87 2 }
88 1
89 1 if(fgpulsechk)
90 1 {
91 2 gchktim++;
92 2 if(gchktim>=T1S)
93 2 {
94 3 fgpulsechk=0;
95 3 gchktim=0;
96 3 if(fgcntdstart)
97 3 {
98 4 fgcntdend=1;
99 4 }
100 3 }
101 2 }
102 1
103 1 if(frcntdstart)
104 1 {
105 2 if(frcntdend==0)
106 2 {
107 3 r1stim++;
108 3 rcntdtim++;
109 3 if(r1stim>=T1S)
110 3 {
111 4 r1stim=0;
112 4 frdisp=1;
113 4 }
114 3 if(rcntdtim>=TMAX)
115 3 {
116 4 frcomp=1;
117 4 frcntdstart=0;
C51 COMPILER V7.09 18 04/15/2008 09:47:15 PAGE 3
118 4 frcntdend=0;
119 4 frdisp=0;
120 4 }
121 3 }
122 2 else
123 2 {
124 3 frcomp=1;
125 3 frcntdstart=0;
126 3 frcntdend=0;
127 3 frdisp=0;
128 3 }
129 2 }
130 1
131 1 if(fgcntdstart)
132 1 {
133 2 if(fgcntdend==0)
134 2 {
135 3 g1stim++;
136 3 gcntdtim++;
137 3 if(g1stim>=T1S)
138 3 {
139 4 g1stim=0;
140 4 fgdisp=1;
141 4 }
142 3 if(gcntdtim>=TMAX)
143 3 {
144 4 fgcomp=1;
145 4 fgcntdstart=0;
146 4 fgcntdend=0;
147 4 fgdisp=0;
148 4 }
149 3 }
150 2 else
151 2 {
152 3 fgcomp=1;
153 3 fgcntdstart=0;
154 3 fgcntdend=0;
155 3 fgdisp=0;
156 3 }
157 2 }
158 1 }
159
160 void rint() interrupt 0
161 {
162 1 frpulsechk=1;
163 1 p17=!p17;
164 1 /* tt1++;
165 1
166 1 if(tt1>=100)
167 1 {
168 1 tt2++;
169 1 tt[tt2]=tt0;
170 1 tt0=0;
171 1 tt1=0;
172 1 }
173 1 if(tt2=10) tt2=0;
174 1 */
175 1
176 1 if (frcntdstart==0)
177 1 {
178 2 if(rchktim>T100MS && rchktim<T500MS)//如果时间大于100ms并且小于500ms,准备开始计数
179 2 {
C51 COMPILER V7.09 18 04/15/2008 09:47:15 PAGE 4
180 3 rcntdtim=rchktim;//延时计数器
181 3 r1stim=rchktim;//
182 3 frcntdstart=1;//延时开始标志
183 3 }
184 2 }
185 1
186 1 rchktim=0;//清0脉宽计数器
187 1 }
188
189 void gint() interrupt 2
190 {
191 1 fgpulsechk=1;
192 1
193 1 if (fgcntdstart==0)
194 1 {
195 2 if(gchktim>T100MS && gchktim<T500MS)//如果时间大于100ms并且小于500ms,准备开始计数
196 2 {
197 3 gcntdtim=gchktim;//延时计数器
198 3 g1stim=gchktim;//
199 3 fgcntdstart=1;//延时开始标志
200 3 }
201 2 }
202 1
203 1 gchktim=0;//清0脉宽计数器
204 1 }
205
206 void disp(uchr num)
207 {
208 1
209 1 P1=0xFF;
210 1 LE=0;
211 1
212 1 switch(num%10)
213 1 {
214 2 case 0:P1 = P1 & DISP_0; break;
215 2
216 2 case 1:P1 = P1 & DISP_1; break;
217 2
218 2 case 2:P1 = P1 & DISP_2; break;
219 2
220 2 case 3:P1 = P1 & DISP_3; break;
221 2
222 2 case 4:P1 = P1 & DISP_4; break;
223 2
224 2 case 5:P1 = P1 & DISP_5; break;
225 2
226 2 case 6:P1 = P1 & DISP_6; break;
227 2
228 2 case 7:P1 = P1 & DISP_7; break;
229 2
230 2 case 8:P1 = P1 & DISP_8; break;
231 2
232 2 case 9:P1 = P1 & DISP_9; break;
233 2
234 2 default: break;
235 2 }
236 1
237 1 if(num>=10) P1&=DISP_10;
238 1
239 1 LE=1;
240 1 delay();
241 1 LE=0;
C51 COMPILER V7.09 18 04/15/2008 09:47:15 PAGE 5
242 1 }
243
244
245 void main(void)
246 {
247 1 uchr rdisptim=0;
248 1 uchr gdisptim=0;
249 1 uchr tmp=0,i=0;
250 1
251 1 P1=0xFF;
252 1 LE=0;
253 1 EA=1;
254 1 //外部中断允许,下降沿触发
255 1 EX0=1;
256 1 PX0=1;
257 1 IT0=1;
258 1
259 1 EX1=1;
260 1 PX1=1;
261 1 IT1=1;
262 1
263 1 //T0:16位,10ms
264 1 TMOD=0X11;
265 1 ET0=1;
266 1 TL0=0x66;
267 1 TH0=0xFC;
268 1 TR0=1;
269 1
270 1 //x5045ini();
271 1 while(1)
272 1 {
273 2 if(frdisp==1)
274 2 {
275 3 frdisp=0;
276 3
277 3 if(rdisptim>1)
278 3 {
279 4 rdisptim--;
280 4 disp(rdisptim);
281 4
282 4 }
283 3 else
284 3 {
285 4 P1=0;
286 4 LE=1;
287 4 delay();
288 4 LE=0;
289 4 }
290 3
291 3 }
292 2
293 2 if(fgdisp)
294 2 {
295 3 fgdisp=0;
296 3 if(gdisptim)
297 3 {
298 4 disp(gdisptim);
299 4 gdisptim--;
300 4 }
301 3 }
302 2
303 2 if(frcomp)
C51 COMPILER V7.09 18 04/15/2008 09:47:15 PAGE 6
304 2 {
305 3 frcomp=0;
306 3 tmp=(rcntdtim-T1S)/1000;
307 3 if(((rcntdtim-T1S)%1000)/100 >= 5) tmp++;
308 3 if(rcountdn!=tmp)
309 3 {
310 4 rcountdn[i]=tmp;
311 4 i++;
312 4
313 4 }
314 3 rdisptim=rcountdn;
315 3 }
316 2 if(fgcomp)
317 2 {
318 3 fgcomp=0;
319 3 tmp=(gcntdtim-T1S) / 1000;
320 3 if(((gcntdtim-T1S) % 1000)/100 >= 5) tmp++;
321 3 if(gcountdn!=tmp)
322 3 {
323 4 gcountdn=tmp;
324 4 }
325 3 gdisptim=gcountdn;
326 3 }
327 2
328 2 }
329 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 725 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 31 4
IDATA SIZE = ---- ----
BIT SIZE = 11 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -