📄 汉字时钟.lst
字号:
516 //startline :开始行
517 //startcolumn:开始列
518 //linechar :图片行点除8(图片以8*8点阵为单位)
519 //columnchar :图片列点除8(图片以8*8点阵为单位)
520 //address : 字模区首地址
521 void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char co
-lumnchar,unsigned int address)
522 { unsigned char i,j;
523 1 for(i=0;i<columnchar;i++)
524 1 for(j=0;j<linechar;j++)
525 1 Show88(startline+i , startcolumn+j , address+(i*linechar+j)*8 );
526 1 }
527 /*----------------------------------------------------------------------------------------------*/
528 //显示一行字符串(汉字,字母混排,一行16字节)
529 //lin:行
530 //lineheadaddr: 此行汉字代码区首地址
531 /*void ShowLine(unsigned char lin,unsigned char linehead[])
532 { unsigned char i;
533 unsigned char byte;
534 unsigned int hzcode;
535 for( i=0; i<16; )
536 { byte=linehead;
537 if(byte < 0x80) //字母
538 {
539 if(i>15) return; //!!编译器有问题,须强制退出
540 ShowChar(lin, i , byte);
541 i=i+1;
542 }
543 else // byte >= 0x80(汉字)
544 {
545 if(i>15) return; //!!编译器有问题,须强制退出
546 byte=byte & 0x7f; //最高位置0,即:减去0x8000
547 hzcode=(unsigned int)byte<<8; //?? //高8位
548 hzcode=hzcode+linehead[i+1]; //加低8位,组合成整型数地址
C51 COMPILER V7.50 汉字时钟 02/01/2006 16:45:00 PAGE 10
549 ShowHZ( lin,i,hzcode);
550 i=i+2;
551 }
552 }
553 }
554 /*----------------------------------------------------------------------------------------------------*/
555 //显示一屏汉字
556 //pageheadaddr:此屏汉字代码地址区首地址
557 /*void ShowPage(unsigned char pagehead[][16])
558 { unsigned char i;
559 for(i=0;i<4;i++) ShowLine(i,pagehead); //1行8个汉字,16字节
560 }
561 /*----------------------------------------------------------------------------------------------------*/
562 //读显示数据
563 unsigned char ReadByte()
564 {
565 1 unsigned char dat;
566 1 CheckState();
567 1 di=1; rw=1;
568 1 LCD12864DataPort=0xff;
569 1 en=1; dat=LCD12864DataPort; en=0;
570 1 return(dat);
571 1 }
572 /*----------------------------------------------------------------------------------------------------*/
573 //反显一个8*8字块
574 //lin:行(0-3), column: 列(0-7)
575 /*void ReverseShow88(unsigned char lin,unsigned char column)
576 { unsigned char i;
577 unsigned char tab[8];
578 if(column<8) SelectScreen(1); //如果列数<4(0,1,2,3),则写在第一屏上
579 else SelectScreen(2); //否则 (4,5,6,7), 写在第二屏上
580 //读上部8列
581 column=column<<3; //每个方块8*8大小
582 SetLine(lin);
583 SetColumn(column);
584 tab[0]=ReadByte(); //空读!!!!! //?
585 for(i=0;i<8;i++) tab=~ReadByte();
586 //写回
587 SetLine(lin);
588 SetColumn(column);
589 for(i=0;i<8;i++) WriteByte(tab);
590 }
591 /*----------------------------------------------------------------------------------------------------*/
592 /*----------------------------------------------------------------------------------------------------*/
593 //反显一个字符
594 //lin:行(0-4), column: 列(0-15)
595 /*void ReverseShowChar(unsigned char lin,unsigned char column)
596 { lin=lin<<1;
597 ReverseShow88(lin ,column);
598 ReverseShow88(lin+1,column);
599 }
600 /*----------------------------------------------------------------------------------------------------*/
601 //反显一个汉字
602 //lin:行(0-3), column: 列(0-7)
603 /*ReverseShowHZ(unsigned char lin,unsigned char column)
604 {
605 lin=lin<<1;
606 column=column<<1;
607 ReverseShow88(lin ,column );
608 ReverseShow88(lin ,column+1);
609 ReverseShow88(lin+1,column );
610 ReverseShow88(lin+1,column+1);
C51 COMPILER V7.50 汉字时钟 02/01/2006 16:45:00 PAGE 11
611 }
612 /*----------------------------------------------------------------------------------------------------*/
613 //反显一行汉字
614 //lin:行
615 /*ReverseShow(unsigned char lin)
616 { unsigned char i;
617 for(i=0;i<8;i++) ReverseShowHZ(lin,i);
618 }
619 /*----------------------------------------------------------------------------------------------------*/
620 void InitLCD() //初始化LCD
621 { unsigned char i=250; //延时
622 1 while(i--);
623 1 //reset=0;//复位
624 1 //reset=1;
625 1 SelectScreen(0);//选择屏幕全屏
626 1 SetOnOff(0); //关显示
627 1 ClearScreen(1);//清屏
628 1 ClearScreen(2);
629 1 SelectScreen(0);
630 1 SetOnOff(1); //开显示
631 1 SelectScreen(0);
632 1 SetStartLine(0); //开始行:0
633 1 }
634 /*----------------------------------------------------------------------------------------------------*/
635 void Reset() //液晶复位
636 {
637 1 //reset 低复位 _|-
638 1 reset=0;
639 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
640 1 reset=1;
641 1
642 1 //全屏
643 1 cs1=0;
644 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
645 1 cs2=0;
646 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
647 1 SendCommandToLCD(0x3F);
648 1 }
649 /*--------------------------------------------------------------------------------------------------*/
650 write(uchar a,uchar b)//
651 {uchar i;
652 1 scl=0;
653 1 _nop_();
654 1 rst=1;
655 1 _nop_();
656 1 _nop_();
657 1 dat=a;
658 1 for(i=1;i<=8;i++)
659 1 {scl=0;
660 2 io=dat0;
661 2 _nop_();
662 2 scl=1;
663 2 dat>>=1;
664 2 }
665 1 dat=b;
666 1 io=0;
667 1 for(i=1;i<=8;i++)
668 1 {scl=0;
669 2 io=dat0;
670 2 _nop_();
671 2 scl=1;
672 2 dat>>=1;
C51 COMPILER V7.50 汉字时钟 02/01/2006 16:45:00 PAGE 12
673 2 }
674 1 rst=0;
675 1 _nop_();scl=0;
676 1 }
677
678
679 read (uchar a)
680 {uchar i;
681 1 dat=(a<<1)|0x81;
682 1 scl=0;
683 1 _nop_();
684 1 rst=1;
685 1 for(i=1;i<=8;i++)
686 1 {scl=0;
687 2 io=dat0;
688 2 _nop_();
689 2 scl=1;
690 2 dat>>=1;
691 2 }
692 1 for(i=1;i<=8;i++)
693 1 {dat>>=1;///////////有问题
694 2 scl=0;
695 2 _nop_();
696 2 dat7=io;
697 2 scl=1;
698 2 }
699 1 rst=0;
700 1 _nop_();
701 1 scl=0;
702 1 return(dat);
703 1
704 1 }
705 read_time()
706 {uchar a;
707 1 a=read(0);
708 1 nunber[7]=1;
709 1 nunber[7]=a&0x0f;
710 1 nunber[6]=a>>4;
711 1 a=read(1);
712 1 nunber[5]=a&0x0f;
713 1 nunber[4]=a>>4;
714 1 a=read(2);
715 1 nunber[1]=a&0x0f;
716 1 nunber[0]=a>>4;
717 1 }
718
719 init()
720 {
721 1 write(0x8e,0x00);//写保护寄存器
722 1 write(0x90,0xa4);//慢充电寄存器
723 1 write(0x80,0x00);//打开时钟
724 1 write(0x8e,0x80);//写保护寄存器}
725 1 }
726 set_time()
727 {uchar a;
728 1 nunber[0]=0x01;
729 1 nunber[1]=0x05;
730 1 nunber[4]=0x05;
731 1 nunber[5]=0x03;
732 1 nunber[6]=0x05;
733 1 nunber[7]=0x00;
734 1 write(0x8e,0x00);//写保护寄存器
C51 COMPILER V7.50 汉字时钟 02/01/2006 16:45:00 PAGE 13
735 1 a=(nunber[0]<<4)|nunber[1];
736 1 write(0x84,a);
737 1 a=(nunber[4]<<4)|nunber[5];
738 1 write(0x82,a);
739 1 a=(nunber[6]<<4)|nunber[57];
740 1 write(0x80,a);
741 1 }
742
743 /*------------------------------------------------------------------------------*/
744
745
746
747
748 //主函数
749 main()
750 {//uchar i,j;
751 1 InitLCD();
752 1 init();
753 1 ShowHZ(0,0,0);
754 1 ShowHZ(0,2,1);
755 1 ShowHZ(0,4,2);
756 1 ShowHZ(0,6,3);
757 1 ShowHZ(2,2,4);
758 1 ShowHZ(2,6,5);
759 1 ShowHZ(2,10,6);
760 1 ShowChar(0,8,':');
761 1 //delay();
762 1 set_time();
763 1 while(1)
764 1 {read_time();
765 2 ShowCha(2,0,table[nunber[0]]);//时
*** WARNING C206 IN LINE 765 OF ..\汉字时钟\汉字时钟.C: 'ShowCha': missing function-prototype
*** ERROR C267 IN LINE 765 OF ..\汉字时钟\汉字时钟.C: 'ShowCha': requires ANSI-style prototype
766 2 ShowChar(2,1,table[nunber[1]]);
767 2 ShowChar(2,4,table[nunber[4]]);//分
768 2 ShowChar(2,5,table[nunber[5]]);
769 2 ShowChar(2,8,table[nunber[6]]);//秒
770 2 ShowChar(2,9,table[nunber[7]]);
771 2 }
772 1 }
C51 COMPILATION COMPLETE. 1 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -