📄 lcd128x64.lst
字号:
490 }
491 }
492 }
493 /*---------------------指定位置显示数字8*16-----------------------*/
494
495 void sz_disp16(unsigned char pag,unsigned char col, unsigned char code *szk)
496 {
497 1 unsigned char j=0,i=0;
498 1 for(j=0;j<2;j++)
499 1 {
500 2 write_command(Page_Add+pag+j);
501 2 write_command(Col_Add+col);
502 2 for(i=0;i<8;i++)
503 2 write_data(szk[8*j+i]);
504 2 }
505 1 }
506
507 /*---------------------指定位置显示汉字16*16-----------------------*/
508
509 void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk)
510 {
511 1 unsigned char j=0,i=0;
512 1 for(j=0;j<2;j++)
513 1 {
514 2 write_command(Page_Add+pag+j);
515 2 write_command(Col_Add+col);
516 2 for(i=0;i<16;i++)
517 2 write_data(hzk[16*j+i]);
518 2 }
519 1 }
520
521
522 /*------------------初始化LCD屏--------------------------*/
523 void init_lcd()
524 {
525 1 RST=0;
526 1 delay(100);
527 1 RST=1;
528 1 delay(100);
529 1
530 1 CS2=1;
531 1 CS1=1;
532 1
533 1 delay(100);
534 1 write_command(Disp_Off);
535 1 write_command(Page_Add+0);
536 1 write_command(Start_Line+0);
537 1 write_command(Col_Add+0);
538 1 write_command(Disp_On);
539 1 }
540
541
542 /*-------------------------- 开机信息显示------------------------*/
543 void StartMsg(void)
544 {
545 1 Clr_Scr(); // 先清屏 //
546 1 CS2=1;CS1=0;
547 1 hz_disp16(0,32,huan); // 欢
548 1 delay(2000);
549 1 hz_disp16(0,48,ying); // 迎
550 1 delay(2000);
551 1 CS2=0;CS1=1;
C51 COMPILER V7.50 LCD128X64 08/15/2007 22:03:43 PAGE 10
552 1 hz_disp16(0,0,shi1); // 使
553 1 delay(2000);
554 1 hz_disp16(0,16,yong); // 用
555 1 delay(2000);
556 1 CS2=1;CS1=0;
557 1 hz_disp16(2,32,shu); // 数
558 1 delay(2000);
559 1 hz_disp16(2,48,ma); // 码
560 1 delay(2000);
561 1 CS2=0;CS1=1;
562 1 hz_disp16(2,0,shi); // 时
563 1 delay(2000);
564 1 hz_disp16(2,16,zhong); // 钟
565 1 delay(2000);
566 1
567 1 CS2=1;CS1=0;
568 1 hz_disp16(5,16,zhi); // 制
569 1 delay(2000);
570 1 hz_disp16(5,32,zuo); // 作
571 1 delay(2000);
572 1 hz_disp16(5,48,maohao); // :
573 1 delay(2000);
574 1 CS2=0;CS1=1;
575 1 hz_disp16(5,0,liu); // 刘
576 1 delay(2000);
577 1 hz_disp16(5,16,bing); // 兵
578 1 delay(2000);
579 1 hz_disp16(5,32,gantanhao); // !
580 1 delay(2000);
581 1 }
582 /*------------------------时钟固定汉字显示-----------------------*/
583 void ClockMsg(void)
584 {
585 1 Clr_Scr(); // 先清屏 //
586 1
587 1 CS2=1;CS1=0; // 左屏
588 1 hz_disp16(1,32,xing); // 星
589 1 hz_disp16(1,48,qi); // 期
590 1 sz_disp16(3,0,shuzi[2]); // 2
591 1 sz_disp16(3,8,shuzi[0]); // 0
592 1 hz_disp16(3,32,nian); // 年
593 1 hz_disp16(5,48,shi2); // 时
594 1
595 1 CS2=0;CS1=1; // 右屏
596 1 hz_disp16(3,0,yue); // 月
597 1 hz_disp16(3,32,ri); // 日
598 1 hz_disp16(5,16,fen); // 分
599 1 hz_disp16(5,48,miao); // 秒
600 1 }
601
602
603 /*-----------------------时钟部分---------------------------*/
604
605 ///////////////////////////////////////////////
606 ///// 函数名: 写入字节子函数 //////
607 ///// 函数功能: 写入一个字节到对应地址 //////
608 ///// 函数参数: 有(写入的字节内容) //////
609 ///// 返回值: 无 //////
610 ///////////////////////////////////////////////
611
612 void InputByte(unsigned char dat)
613 {
C51 COMPILER V7.50 LCD128X64 08/15/2007 22:03:43 PAGE 11
614 1 unsigned char i;
615 1 ACC = dat;
616 1 for(i=8; i>0; i--)
617 1 {
618 2 IO = ACC0;
619 2 CLK = 1; //下降沿写入数据//
620 2 CLK = 0;
621 2 ACC = ACC >> 1;
622 2 }
623 1 }
624
625 /************************************************************************************///*时钟部分*/↓
626 ///////////////////////////////////////////////
627 ///// 函数名: 读出字节子函数 //////
628 ///// 函数功能: 从对应地址读出一个字节 //////
629 ///// 函数参数: 无 //////
630 ///// 返回值: 有(读出的字节内容) //////
631 ///////////////////////////////////////////////
632
633 OutputByte(void)
634 {
635 1 unsigned char i;
636 1 for(i=8; i>0; i--)
637 1 {
638 2 ACC = ACC >>1;
639 2 ACC7 = IO;
640 2 CLK = 1; //上升沿读出数据//
641 2 CLK = 0;
642 2 }
643 1 return(ACC);
644 1 }
645 /*************************************************************************************************/
646 /////////////////////////////////////////////
647 ///// 函数名: 写入字节完整子函数 //////
648 ///// 函数功能: 写入一个字节到DS1302 //////
649 ///// 调用: InputByte() //////
650 ///// 函数参数: 有(写入的地址和数据) //////
651 ///// 返回值: 无 //////
652 /////////////////////////////////////////////
653
654 void WriteTo1302(unsigned char Addr,unsigned char Date)
655 {
656 1 RST2 = 0;
657 1 CLK = 0;
658 1 RST2 = 1;
659 1 InputByte(Addr); // 先给地址,命令 //
660 1 InputByte(Date); // 再写入一字节数据 //
661 1 CLK = 1;
662 1 RST2 =0;
663 1 }
664 /*************************************************************************************************/
665 /////////////////////////////////////////////
666 ///// 函数名: 读出字节完整子函数 //////
667 ///// 函数功能: 从DS1302读出一个字节 //////
668 ///// 调用: InputByte(); OutputByte() //////
669 ///// 函数参数: 无 //////
670 ///// 返回值: 有(读出的字节内容) //////
671 /////////////////////////////////////////////
672
673 ReadFrom1302(unsigned char Add)
674 {
675 1 unsigned char Date;
C51 COMPILER V7.50 LCD128X64 08/15/2007 22:03:43 PAGE 12
676 1 RST2 = 0;
677 1 CLK = 0;
678 1 RST2 = 1;
679 1 InputByte(Add); // 先给地址,命令 //
680 1 Date = OutputByte(); // 再读一字节数据 //
681 1 CLK = 1;
682 1 RST2 =0;
683 1 return(Date);
684 1 }
685 /*************************************************************************************************/
686 /////////////////////////////////////////////////////////////////////////////////
687 ///// 函数名称: SetTime /////
- /////
688 ///// 功能: 设置初始时间 /////
689 ///// 调用: WriteTo1302() /////
690 ///// 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 /////
691 ///// 返回值: 无 /////
692 /////////////////////////////////////////////////////////////////////////////////
693
694 void SetTime(unsigned char *pSecDa)
695 {
696 1 unsigned char i;
697 1 unsigned char Addr = 0x80;
698 1 WriteTo1302(0x8e,0x00); // 控制命令,WP=0,写操作 //
699 1 for(i =7;i>0;i--)
700 1 {
701 2 WriteTo1302(Addr,*pSecDa); // 秒 分 时 日 月 星期 年 //
702 2 pSecDa++;
703 2 Addr +=2;
704 2 }
705 1 WriteTo1302(0x8e,0x80); // 控制命令,WP=1,写保护 //
706 1 }
707 /**************************************************************************************************/
708 //////////////////////////////////////////////////////////////////////////////////////
709 ///// 名称: GetTime /////
710 ///// 说明: /////
711 ///// 功能: 读取DS1302当前时间 /////
712 ///// 调用: uc_R1302() /////
713 ///// 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 /////
714 ///// 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B /////
715 ///// 返回值: 无 /////
716 //////////////////////////////////////////////////////////////////////////////////////
717
718 void GetTime(void)
719 {
720 1 unsigned char i;
721 1 unsigned char Addr = 0x81;
722 1 for (i=0;i<7;i++)
723 1 {
724 2 Curtime[i] = ReadFrom1302(Addr); // 格式为: 秒 分 时 日 月 星期 年 //
725 2 Addr += 2;
726 2 }
727 1 sec = Curtime[0];
728 1 min = Curtime[1];
729 1 hour = Curtime[2];
730 1 day = Curtime[5];
731 1 date = Curtime[3];
732 1 month = Curtime[4];
733 1 year = Curtime[6];
734 1 }
735 /**************************************************************************************************/
736 ////////////////////////////////////////////////////
C51 COMPILER V7.50 LCD128X64 08/15/2007 22:03:43 PAGE 13
737 ///// 函数名: 定时器T0初始化子函数 //////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -