📄 clockdingshi.lst
字号:
188 3 {
189 4 temp=P3;
190 4 switch(temp)
191 4 {
192 5 case 0xed:
193 5 key=4;
194 5 wei++;
195 5 break;
196 5
197 5 case 0xdd:
198 5 key=5;
199 5 wei++;
200 5 break;
201 5
202 5 case 0xbd:
203 5 key=6;
204 5 wei++;
205 5 break;
206 5
207 5 case 0x7d:
208 5 key=7;
209 5 wei++;
210 5 break;
211 5 }
212 4 while(temp!=0xf0)
213 4 {
214 5 temp=P3;
215 5 temp=temp&0xf0;
216 5 beep=0;
217 5 }
218 4 beep=1;
219 4 }
220 3 }
221 2 P3=0xfb;
222 2 temp=P3;
223 2 temp=temp&0xf0;
224 2 if(temp!=0xf0)
225 2 {
226 3 delay(10);
227 3 if(temp!=0xf0)
228 3 {
229 4 temp=P3;
230 4 switch(temp)
231 4 {
232 5 case 0xeb:
233 5 key=8;
234 5 wei++;
235 5 break;
236 5
237 5 case 0xdb:
238 5 key=9;
239 5 wei++;
240 5 break;
241 5 }
C51 COMPILER V8.02 CLOCKDINGSHI 06/22/2010 11:22:43 PAGE 5
242 4 while(temp!=0xf0)
243 4 {
244 5 temp=P3;
245 5 temp=temp&0xf0;
246 5 beep=0;
247 5 }
248 4 beep=1;
249 4 }
250 3 }
251 2 }
252 1 }
253
254 void main()
255 {
256 1 TMOD=0x01;
257 1
258 1 TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
259 1 TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
260 1 ET0=1;
261 1 EA=1;
262 1
263 1 while(1)
264 1 { keyscan0();
265 2
266 2 if(ok==1)
267 2 { TR0=1;
268 3 wei=0;
269 3
270 3 if(pp==20)
271 3 { pp=0;
272 4 m++;
273 4 if(m==60)
274 4 {
275 5 m=0;
276 5 f++;
277 5 if(f==60)
278 5 {
279 6 f=0;
280 6 s++;
281 6 if(s==24) //为24h一个循环,若要12h,只需在此改为12即可。
282 6 {
283 7 s=0;
284 7 }
285 6 }
286 5 }
287 4 }
288 3
289 3 a0=s%10;
290 3 a1=s/10;
291 3 b0=f%10;
292 3 b1=f/10;
293 3 c0=m%10;
294 3 c1=m/10;
295 3 display(a1,a0,b1,b0,c1,c0);
296 3 }
297 2 else
298 2 {
299 3 if(change==1)
300 3 { TR0=0;
301 4 keyscan();
302 4 if(key!=10)
303 4 {
C51 COMPILER V8.02 CLOCKDINGSHI 06/22/2010 11:22:43 PAGE 6
304 5
305 5 switch(wei)
306 5 {
307 6 case 1: if(key<3) //小时最高位为2
308 6 a1=key;
309 6 else
310 6 wei--;
311 6 break;
312 6 case 2: if(a1==1|a1==0)
313 6 a0=key;
314 6 else
315 6 if(key<5)
316 6 a0=key; //当小时最高位为2时,低位最高为4
317 6 break;
318 6 case 3: if(key<6) //分钟最高位为5
319 6 b1=key;
320 6 else
321 6 wei--;
322 6 break;
323 6 case 4: b0=key; break;
324 6 case 5: if(key<6) //秒最高位为5
325 6 c1=key;
326 6 else
327 6 wei--;
328 6 break;
329 6 case 6: c0=key; break;
330 6 }
331 5 key=10;
332 5 }
333 4 m=c1*10+c0;
334 4 f=b1*10+b0;
335 4 s=a1*10+a0;
336 4 display(a1,a0,b1,b0,c1,c0);
337 4 }
338 3 if(dingshi==1)
339 3 {
340 4 TR0=0;
341 4 display(shi20,shi10,fen20,fen10,miao20,miao10);
342 4 keyscan();
343 4 if(key!=10)
344 4 {
345 5 switch(wei)
346 5 {
347 6 case 1: if(key<3) //小时最高位为2
348 6 shi20=key;
349 6 else
350 6 wei--;
351 6 break;
352 6 case 2: if(a1==1|a1==0)
353 6 shi10=key;
354 6 else
355 6 if(key<5)
356 6 a0=key; //当小时最高位为2时,低位最高为4
357 6 break;
358 6 case 3: if(key<6) //分钟最高位为5
359 6 fen20=key;
360 6 else
361 6 wei--;
362 6 break;
363 6 case 4: fen10=key; break;
364 6 case 5: if(key<6) //秒最高位为5
365 6 miao20=key;
C51 COMPILER V8.02 CLOCKDINGSHI 06/22/2010 11:22:43 PAGE 7
366 6 else
367 6 wei--;
368 6 break;
369 6 case 6: miao10=key; break;
370 6 }
371 5 key=10;
372 5 }
373 4 yidingshi=1;
374 4 display(shi20,shi10,fen20,fen10,miao20,miao10);
375 4 }
376 3 }
377 2 if(yidingshi==1)
378 2 {
379 3 if((a1==shi20)&&(a0==shi10)&&(b1==fen20)&&(b0==fen10)&&(c1==miao20)&&(c0==miao10))
380 3 beep=0;
381 3 }
382 2 if(((a1==shi20)&&(a0==shi10)&&(b1==fen20)&&(b0==fen10+1)&&(c1==miao20)&&(c0==miao10))||(yidingshi==0))//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -