📄 lcm_t.lst
字号:
469 1 //}
470 1 }
471 /*****************************************************************************/
472 //向LCM中填写 日 数据
473 void lcm_w_dd(void){
474 1 // if(read_clock(0x87) != dd){
475 1 dd = read_clock(0x87);
476 1 lcm_w_test(0,0x92);
477 1 if(dd/16 != 0){lcm_w_test(1,(dd/16)+0x30);} //十位消隐
478 1 else{lcm_w_test(1,0x20);}//同上
479 1 lcm_w_test(1,dd%16+0x30);
480 1 lcm_w_test(0,0x93);
481 1 lcm_w_word("日 ");
482 1
483 1 } //}
484 /*****************************************************************************/
485 //向LCM中填写 小时 数据
486 void lcm_w_hh(void){
487 1 if(read_clock(0x85) != hh){
488 2 hh = read_clock(0x85);
C51 COMPILER V7.50 LCM_T 12/08/2007 10:11:44 PAGE 9
489 2 if (hh > 0x07 && hh < 0x22 && w == 0){
490 3 beep = 0; led_r = 0;
491 3 DelayM(100);
492 3 beep = 1; led_r = 1;
493 3 }
494 2 }
495 1 lcm_w_test(0,0x88);
496 1 lcm_w_test(1,(hh/16)+0x30);
497 1 lcm_w_test(1,hh%16+0x30);
498 1
499 1 } //}
500 /*****************************************************************************/
501 //向LCM中填写 分钟 数据
502 void lcm_w_mm(void){
503 1 if(read_clock(0x83) != mm){
504 2 mm = read_clock(0x83);
505 2 if( w == 0){
506 3 days(); //节日显示
*** WARNING C209 IN LINE 506 OF LCM_T.C: '_days': too few actual parameters
507 3 updata (); //刷新数据
508 3 }
509 2 }
510 1 lcm_w_test(0,0x89);
511 1 lcm_w_test(1,0x3a); //":"
512 1 lcm_w_test(1,(mm/16)+0x30);
513 1 lcm_w_test(1,mm%16+0x30);
514 1 lcm_w_test(1,0x2e); //"."
515 1 }
516 /*****************************************************************************/
517 //刷新数据
518 void updata (void){
519 1 lcm_w_hh();//刷新 小时
520 1 lcm_w_dd();//刷新 日
521 1 lcm_w_xq();//更新星期值
522 1 lcm_w_mo();//刷新 月
523 1 lcm_w_yy();//刷新 年
524 1
525 1 }
526 /*****************************************************************************/
527 //向LCM中填写 秒 数据
528 void lcm_w_ss(void){
529 1 unsigned int i=0;
530 1 unsigned char a=0,b=0,c=0;
531 1 if(read_clock(0x81) != ss){ //判断是否需要更新
532 2 ss = read_clock(0x81); //更新数据
533 2 lcm_w_test(0,0x8b); //秒值在LCM上的写入位置
534 2 lcm_w_test(1,(ss/16)+0x30); //写十位
535 2 lcm_w_test(1,ss%16+0x30); //写个位
536 2 led_b = ~led_b; //背光闪烁
537 2 lcm_w_mm();//刷新 分
538 2 lcm_w_test(0,0x8d); //温度在LCM上的写入位置
539 2 i=ReadTemperature();//读温度并送显
540 2 a=i/100;
541 2 lcm_w_test(1,a+0x30); //显示温度十位
542 2 b=i/10-a*10;
543 2 lcm_w_test(1,b+0x30); //个位
544 2 lcm_w_test(1,0x2e); //"."
545 2 c=i-a*100-b*10;
546 2 lcm_w_test(1,c+0x30); //小位1位
547 2 lcm_w_word("℃"); //度C
548 2 } }
549 /*****************************************************************************/
C51 COMPILER V7.50 LCM_T 12/08/2007 10:11:44 PAGE 10
550 //---主程序---//
551
552 main() {
553 1
554 1 unsigned char e=0;
555 1 KEY_I = 0;KEY_1 = 1;KEY_2 = 1;KEY_3 = 1;KEY_4 = 1;//初始键盘
556 1 yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各数据刷新
557 1 beep = 0;
558 1 DelayM(900);
559 1 beep = 1;
560 1 lcm_init();//初始化液晶显示器
561 1 lcm_clr();//清屏
562 1 lcm_w_word(" 12864LcdClock Hello !! from DoYoung.net");//显示欢迎字
563 1 //----------|-------1-------|-------3-------|-------2-------|-------4-------|-----//标尺
564 1 DelayM(3000); //显示等留3秒
565 1 //lcm_w_test(0,0x80);
566 1 //lcm_w_word("[Dis] [Set]");
567 1
568 1 while(1){
569 2 if (w == 0){ //正常走时
570 3 lcm_w_ss();//刷新 秒
571 3 }
572 2 else { //启动调时
573 3
574 3
575 3 }
576 2
577 2 //------------------------------------------------------------------
578 2 if (KEY_3 == 0) // 设置时间
579 2 {
580 3 DelayM(20); //去抖
581 3 led_g3 = 0;led_r = 1;
582 3 if(KEY_3 == 0 && w == 1) //当是调时状态 本键用于调整下一项
583 3 {
584 4 e++;
585 4 if (e >= 6 ){e = 0;}
586 4 Set_time(e);//调整
587 4 }
588 3
589 3 if(KEY_3 == 0 && w == 0) //当是正常状态时就进入调时状态
590 3 {
591 4 led_b = 1;//
592 4 lcm_clr();//清屏
593 4 //yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各数据刷新
594 4 w=1; //进入调时
595 4 lcm_w_test(0,0x9e);
596 4 lcm_w_word(" [-]");
597 4 lcm_w_test(0,0x80);
598 4 lcm_w_word("[Esc]");
599 4 lcm_w_test(0,0x85);
600 4 lcm_w_word("[Next]");
601 4 lcm_w_test(0,0x98);
602 4 lcm_w_word("[+]");
603 4 Set_time(e);//调整
604 4 }
605 3 while(KEY_3 == 0);//等待键松开
606 3 led_g3 = 1; led_r = 0;//红灯亮,表示调时
607 3 }
608 2
609 2 //------------------------------------------------------------------
610 2 if (KEY_1 == 0) // 当在调时状态时就退出调时
611 2 {
C51 COMPILER V7.50 LCM_T 12/08/2007 10:11:44 PAGE 11
612 3 DelayM(20);led_g1 = 0;led_r = 1;
613 3 if(KEY_1 == 0 && w == 1){
614 4 w = 0; //退出调时
615 4 e = 0; //“下一项”计数器清0
616 4 }
617 3
618 3 if(KEY_1 == 0 && w == 0){
619 4 lcm_clr();//清屏
620 4 lcm_w_test(0,0x80);
621 4 lcm_w_word(" 12864LcdClock V1.01 2006-11-26 Hello !! from DoYoung.net");
622 4 //----------|-------1-------|-------3-------|-------2-------|-------4-------|-----//标尺
623 4 while(KEY_1 == 0);//等待键松开
624 4 }
625 3 lcm_clr();//清屏
626 3 //lcm_w_word("[Dis] [Set]");
627 3 //yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各数据刷新
628 3 days(); //节日显示
*** WARNING C209 IN LINE 628 OF LCM_T.C: '_days': too few actual parameters
629 3 updata (); //刷新数据
630 3 lcm_w_mm();//刷新 分
631 3
632 3
633 3 while(KEY_1 == 0);//等待键松开
634 3 led_g1 = 1;
635 3 }
636 2
637 2 //------------------------------------------------------------------
638 2 if (KEY_2 == 0 && w == 1){ // 加减调整{
639 3 DelayM(20);led_g2 = 0;led_r = 1;
640 3 if(KEY_2 == 0 && w == 1){
641 4 Set_time(e);//调整
642 4 }
643 3 while(KEY_2 == 0);//等待键松开
644 3 led_g2 = 1; led_r = 0;
645 3 }
646 2
647 2 //------------------------------------------------------------------
648 2 if (KEY_4 == 0 && w == 1){ // 加减调整
649 3 DelayM(20); led_g4 = 0;led_r = 1;
650 3 if(KEY_4 == 0 && w == 1){
651 4 Set_time(e);//调整
652 4 }
653 3 while(KEY_4 == 0);//等待键松开
654 3 led_g4 = 1; led_r = 0;
655 3 }
656 2
657 2 //------------------------------------------------------------------
658 2 if(KEY_1 == 1 && KEY_2 == 0 && KEY_3 == 1 && KEY_4 == 0){ //时钟初始化{
659 3 led_r = 0;
660 3 DelayM(3000);
661 3 led_r = 1;
662 3 if(KEY_1 == 0 && KEY_2 == 0&& KEY_3 == 1&& KEY_4 == 0){
663 4 Init_1302();
664 4 lcm_w_test(0,0x80);
665 4 lcm_clr();//清屏
666 4 lcm_w_word("初始化成功! 2007-1-1 00:00.0");
667 4 //----------|-------1-------|-------3-------|
668 4 while(1);
669 4 }
670 3 }
671 2 } }
672
C51 COMPILER V7.50 LCM_T 12/08/2007 10:11:44 PAGE 12
673 /*****************************************************************************/
674 /*
675 //编程日志
676 2007-02-10 修改为正式发布版。
677 2007-01-26 用每分钟刷新数据,防止显示乱码。
678 2006-11-30
679 2006-11-29 时钟主显示部分完成。
680 2006-11-28 时钟驱动程序植入完成。
681 2006-11-27 LCM驱动程序植入完成。
682 2006-11-26 硬件制作完成。
683
684 /*****************************************************************************/
685
686
687
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3312 ----
CONSTANT SIZE = 1323 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 25
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -