?? text1.lst
字號:
250 5 }
251 4 if(mode_num==6)
252 4 {
253 5 now.second++;
254 5 if(now.second==60) now.second=0;
255 5 write_time(7,now.second);
256 5 gotoxy(2,8);while(!plus);
257 5 }
258 4 }
259 3 }
260 2 if(dec==0)
261 2 {
262 3 delay(5);
263 3 if(dec==0)
264 3 { delay(5);
265 4 while(!dec);
266 4 delay(5);
267 4 if(mode_num==1)
268 4 {
269 5 today.year--;
270 5 write_riqi(1,today.year/100);
271 5 write_riqi(3,today.year%100);
272 5 gotoxy(1,12);
273 5 display_week();
274 5 gotoxy(1,4);while(!dec);
275 5 }
276 4 if(mode_num==2)
277 4 {
278 5 today.month--;
279 5 if(today.month==0) today.month=12;
280 5 write_riqi(6,today.month);
281 5 gotoxy(1,12);
282 5 display_week();
283 5 gotoxy(1,7);while(!dec);
284 5 }
285 4 if(mode_num==3)
286 4 {
287 5 today.day--;
288 5 if(today.day==0)
289 5 today.day=monthday(today.year,today.month);
290 5 write_riqi(9,today.day);
291 5 gotoxy(1,12);
292 5 display_week();
293 5 gotoxy(1,10);while(!dec);
294 5 }
295 4 if(mode_num==4)
296 4 {
297 5 now.hour--;
298 5 if(now.hour<0) now.hour=23;
299 5 write_time(1,now.hour);
300 5 gotoxy(2,2);while(!dec);
301 5 }
302 4 if(mode_num==5)
C51 COMPILER V8.02 TEXT1 04/18/2008 20:54:48 PAGE 6
303 4 {
304 5 now.minute--;
305 5 if(now.minute<0) now.minute=59;
306 5 write_time(4,now.minute);
307 5 gotoxy(2,5);while(!dec);
308 5 }
309 4 if(mode_num==6)
310 4 {
311 5 now.second--;
312 5 if(now.second<0) now.second=59;
313 5 write_time(7,now.second);
314 5 gotoxy(2,8); while(!dec);
315 5 }
316 4 }
317 3 }
318 2 }
319 1 }
320
321 void display_temp()
322 {
323 1 uint wendu;
324 1 uchar A1,A2;
325 1 tmpchange();
326 1 wendu=tmp();
327 1 A1=wendu/10;
328 1 A2=wendu%10;
329 1 gotoxy(2,10);
330 1 display_data(A1);
331 1 display_string(".");
332 1 write_date(int_to_char[A2]);
333 1 }
334
335 void timer0(void) interrupt 1
336 {
337 1 TR0=0;
338 1 TL0=(TIMER0_COUNT & 0X00FF);//設置Timer0低八位數值
339 1 TH0=(TIMER0_COUNT >> 8);//設置Timer0高八位數值
340 1 TR0=1;
341 1 count++;
342 1 if(count==30) display_temp();
343 1 if(count==200)
344 1 {
345 2 count=0;
346 2 now.second++;
347 2 if(now.second==60)
348 2 {
349 3 now.second=0;
350 3 now.minute++;
351 3 if(now.minute==60)
352 3 {
353 4 now.minute=0;
354 4 now.hour++;
355 4 if(now.hour==24)
356 4 {
357 5 now.hour=0;
358 5 today.day++;
359 5 if(today.day>monthday(today.year,today.month))
360 5 {
361 6 today.day=1;
362 6 today.month++;
363 6 if(today.month==13)
364 6 {
C51 COMPILER V8.02 TEXT1 04/18/2008 20:54:48 PAGE 7
365 7 today.month=1;
366 7 today.year++;
367 7 }
368 6 write_riqi(6,today.month);
369 6 }
370 5 write_riqi(9,today.day);
371 5 gotoxy(1,12);
372 5 display_week();
373 5 }
374 4 write_time(1,now.hour);
375 4 }
376 3 write_time(4,now.minute);
377 3 }
378 2 write_time(7,now.second);
379 2 }
380 1 }
381
382 void main()
383 {
384 1 IE = 0x81; //允許總中斷中斷,使能 INT0 外部中斷
385 1 TCON = 0x01; //觸發方式為脈沖負邊沿觸發
386 1
387 1 IRIN=1; //I/O口初始化
388 1 belay1(10);
389 1 init_lcd();
390 1 timer0_initialize();
391 1 gotoxy(1,1);
392 1 display_string("2008/06/10 ");
393 1 display_week();
394 1 gotoxy(2,1);
395 1 display_string("00:00:00");
396 1 gotoxy(2,10);
397 1 display_string("00.0C");
398 1
399 1 while(1) ;//keyscan();
400 1
401 1 }
402 /**********************************************************/
403 void belay(unsigned char x) //x*0.14MS
404 {
405 1 unsigned char i;
406 1 while(x--)
407 1 {
408 2 for (i = 0; i<13; i++) {}
409 2 }
410 1 }
411
412 /**********************************************************/
413 void belay1(int ms)
414 {
415 1 unsigned char y;
416 1 while(ms--)
417 1 {
418 2 for(y = 0; y<250; y++)
419 2 {
420 3 _nop_();
421 3 _nop_();
422 3 _nop_();
423 3 _nop_();
424 3 }
425 2 }
426 1 }
C51 COMPILER V8.02 TEXT1 04/18/2008 20:54:48 PAGE 8
427 /**********************************************************/
428 void IR_IN() interrupt 0 using 0
429 {
430 1 unsigned char j,k,N=0;
431 1 EX0 = 0;
432 1 belay(15);
433 1 if (IRIN==1)
434 1 { EX0 =1;
435 2 return;
436 2 }
437 1 //確認IR信號出現
438 1 while (!IRIN) //等IR變為高電平,跳過9ms的前導低電平信號。
439 1 {belay(1);}
440 1
441 1 for (j=0;j<4;j++) //收集四組數據
442 1 {
443 2 for (k=0;k<8;k++) //每組數據有8位
444 2 {
445 3 while (IRIN) //等 IR 變為低電平,跳過4.5ms的前導高電平信號。
446 3 {belay(1);}
447 3 while (!IRIN) //等 IR 變為高電平
448 3 {belay(1);}
449 3 while (IRIN) //計算IR高電平時長
450 3 {
451 4 belay(1);
452 4 N++;
453 4 if (N>=30)
454 4 { EX0=1;
455 5 return;} //0.14ms計數過長自動離開。
456 4 } //高電平計數完畢
457 3 IRCOM[j]=IRCOM[j] >> 1; //數據最高位補“0”
458 3 if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //數據最高位補“1”
459 3 N=0;
460 3 }//end for k
461 2 }//end for j
462 1
463 1 if (IRCOM[2]!=~IRCOM[3])
464 1 { EX0=1;
465 2 return; }
466 1
467 1 IRCOM[5]=IRCOM[2] & 0x0F; //取鍵碼的低四位
468 1 IRCOM[6]=IRCOM[2] >> 4; //右移4次,高四位變為低四位
469 1
470 1 if(IRCOM[5]>9)
471 1 { IRCOM[5]=IRCOM[5]+0x37;}
472 1 else
473 1 IRCOM[5]=IRCOM[5]+0x30;
474 1
475 1 if(IRCOM[6]>9)
476 1 { IRCOM[6]=IRCOM[6]+0x37;}
477 1 else
478 1 IRCOM[6]=IRCOM[6]+0x30;
479 1
480 1 lcd_pos(0x4b);
481 1 lcd_wdat(IRCOM[6]); //第一位數顯示
482 1 lcd_pos(0x4c);
483 1 lcd_wdat(IRCOM[5]); //第二位數顯示
484 1
485 1
486 1
487 1 EX0 = 1;
488 1 }
C51 COMPILER V8.02 TEXT1 04/18/2008 20:54:48 PAGE 9
489
490
491
492
493
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2040 ----
CONSTANT SIZE = 80 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 9
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 + -