?? main.lst
字號:
372 1 if(read_clock(0x8b) != xq)
373 1 {
374 2 xq = read_clock(0x8b); //讀取星期
375 2 sel = (read_clock(0x8b))%16; //字節低4位的BCD碼放入sel
376 2 if(sel==7) {lcdword(1,6,1,"周日");} //
377 2 if(sel==6) {lcdword(1,6,1,"周六");} //
378 2 if(sel==5) {lcdword(1,6,1,"周五");} //
379 2 if(sel==4) {lcdword(1,6,1,"周四");} //
380 2 if(sel==3) {lcdword(1,6,1,"周");lcdWriteData(0xc8);lcdWriteData(0xfd);}
381 2 if(sel==2) {lcdword(1,6,1,"周二");} //
382 2 if(sel==1) {lcdword(1,6,1,"周一");} //星期一
383 2 }
384 1 }
385 /***************************************************************/
386 //向LCD中填寫小時數據
387 void lcm_w_hh(void)
388 {
389 1 if(read_clock(0x85) != hh)
390 1 {
391 2 hh = read_clock(0x85); // 讀取小時
392 2 if (hh>0x07&&hh<0x22&&setting==0)
393 2 { beepBl(); } //整點報時音
394 2 }
395 1 lcdWriteCommand(0x9c);
396 1 lcdWriteData((hh/16)+0x30);
397 1 lcdWriteData(hh%16+0x30); //顯示小時位
398 1 }
399 /***************************************************************/
400 //功能:向LCD中填寫分鐘
401 void lcm_w_mm(void)
402 {
403 1 if(read_clock(0x83) != mm)
404 1 {mm=read_clock(0x83);}
405 1 if(setting==0)Festival();//節日顯示
406 1 lcdWriteCommand(0x9d);
407 1 lcdWriteData(0x3a); //顯示":"
408 1 lcdWriteData((mm/16)+0x30);
409 1 lcdWriteData(mm%16+0x30); //顯示分鐘
410 1 lcdWriteData(0x3a); //":"
411 1 }
412 /***************************************************************/
413 //功能:刷新年月日星期時分
414 void Refresh(void)
415 {
416 1 lcm_w_mm(); //刷新 分
417 1 lcm_w_hh(); //刷新 小時
418 1 lcm_w_dd(); //刷新 日
419 1 lcm_w_xq(); //更新星期值
420 1 lcm_w_mo(); //刷新 月
421 1 lcm_w_yy(); //刷新 年
422 1 }
423 /***************************************************************/
424 //功能:實時更新LCD界面的各個數據
425 void lcd_Interface(void)
426 { uchar *p;
427 1 uint i=0;
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 8
428 1 uchar a=0,b=0,c=0;
429 1 if(read_clock(0x81) != ss)
430 1 { //判斷是否需要更新
431 2 ss = read_clock(0x81); //更新數據
432 2 lcdWriteCommand(0x9f); //秒值在LCD上的寫入位置
433 2 lcdWriteData((ss/16)+0x30); //寫十位
434 2 lcdWriteData(ss%16+0x30); //寫個位
435 2 led_secd=~led_secd; //LED閃爍
436 2 Refresh(); //刷新日期的其他數據
437 2
438 2 /**lcdWriteCommand(0x85); //溫度在LCM上的寫入位置
439 2 lcdWriteData(0x20); //顯示符號'|'
440 2 i=ReadTemperature(); //讀溫度并送顯
441 2 a=i/100;
442 2 lcdWriteData(a+0x30); //顯示溫度十位
443 2 b=i/10-a*10;
444 2 lcdWriteData(b+0x30); //顯示個位
445 2 lcdWriteData(0x2e); //顯示"."
446 2 c=i-a*100-b*10;
447 2 lcdWriteData(c+0x30); //顯示小數位
448 2 lcdWriteData(0x43); //顯示度C
449 2 ****/
450 2 GetChinaCalendarStr(yy,mo,dd,p);
451 2 lcdword(2,0,1,p); //界面上更新農歷
452 2 //if(JieQiStr_2word(yy,mo,dd,q)==1)
453 2 //lcdword(2,6,1,q); //界面上更新節氣
454 2 }
455 1 }
456 /***************************************************************/
457 void mode_one(void)
458 { setting=1;
459 1 lcdClear();
460 1 lcdword(0, 0, 1, " 重設密碼");
461 1 lcdword(1, 0, 1, " 設置時間");
462 1 lcdword(2, 0, 1, " 設置鬧鐘");
463 1 lcdword(3, 0, 1, " 查看農歷");
464 1 switch(cishu)
465 1 { case 0: convertChar(0, 2, 8);break;
466 2 case 1: convertChar(1, 2, 8);break;
467 2 case 2: convertChar(2, 2, 8);break;
468 2 case 3: convertChar(3, 2, 8);break;
469 2 case 4: lcdword(0, 0, 1, " 設置時間");
470 2 lcdword(1, 0, 1, " 設置鬧鐘");
471 2 lcdword(2, 0, 1, " 查看農歷");
472 2 lcdword(3, 0, 1, " 查看陽歷");
473 2 convertChar(3, 2, 8);break;
474 2 }
475 1 cishu++;
476 1 if(cishu==5)cishu=0;
477 1 }
478 /***************************************************************/
479 //功能:根據獲得的鍵值和當前的狀態來確定下一步執行模塊的次態
480 void view_state(void)
481 {
482 1 uchar i,x,*p;
483 1 switch(state)
484 1 {case 0: p=&fun_zero[0];break;
485 2 default: break;
486 2 }
487 1 for(i=1;i<+4;i++)
488 1 { if(keys==*p) //表中的是不是和讀取的鍵碼一致
489 2 {++p;state=*p; //存放讀取的狀態
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 9
490 3 ++p;x=*p; //附讀取的執行模塊的代碼
491 3 switch(x)
492 3 {case 0: mode_one();i=4;break;
493 4 //ase 2: in_min();i=4;break;
494 4 // case 3: mode23_ret1();i=4;break;
495 4 // case 4: add_one();i=4;break;
496 4 //case 5: set_done_ret23();i=4;break;
497 4 default: break;
498 4 }
499 3 }
500 2 else if(0==*p)i=4;
501 2 p=p+3;
502 2 }
503 1 }
504 /***************************************************************/
505 //讀取鍵盤
506 void read_key(void)
507 {
508 1 P1|=0x0f;keys=P1; //先保護P3口
509 1 keys|=0xf0; //屏蔽其他位
510 1 if((~keys)!=0) //有效按鍵
511 1 {delayMs(50); //消抖動
512 2 keys=P1; keys|=0xf0;
513 2 if((~keys)==0) keys=0;
514 2 switch(keys)
515 2 { case 0xfe:keys=1;break;
516 3 case 0xfd:keys=2;break;
517 3 case 0xfb:keys=3;break;
518 3 case 0xf7:keys=4;break;
519 3 default: break;
520 3 }
521 2 }
522 1 else keys=0;
523 1 }
524 /***************************************************************/
525 //主程序開始
526 void main (void)
527 { uchar InitLine,i;
528 1 state=0;
529 1 cishu=0;
530 1 Init_1302();
531 1 lcdInit ();
532 1 lcdClear();
533 1 lcdword(0, 0, 20, " 多功能液晶時鐘");
534 1 lcdword(1, 0, 20, "設計者: 電容器");
535 1 lcdword(2, 0, 20, "儀表技術科陳志偉");
536 1 lcdword(3, 0, 20, "交流QQ:287458808");
537 1 delaySec(8);
538 1 lcdClear();
539 1 lcdword(0, 1, 20, "請稍等::::::::::");
540 1 convertChar(0, 1, 8);
541 1 lcdword(2, 0, 20, "系統初始化::::::");
542 1 for (InitLine=0; InitLine<17; InitLine++)
543 1 { convertChar(2, 0, InitLine);
544 2 delaySec(2);
545 2 }
546 1 lcdClear();
547 1 while(1)
548 1 {if(setting==0) //正在設置則不刷新
549 2 lcd_Interface(); //刷新主界面
550 2 read_key(); //讀取鍵盤
551 2 if(keys!=0) view_state(); //根據鍵值執行相應的操作
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 10
552 2 for(i=1;i<=25;i++)
553 2 delayMs(30);
554 2 }
555 1 }
*** ERROR C249 IN LINE 555 OF MAIN.C: 'DATA': SEGMENT TOO LARGE
C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -