📄 celiange.lst
字号:
518 {
519 1 EA=0;
520 1 chip1=cs1;
521 1 chip2=cs2;
522 1 di=0;//write code
523 1 rw=0;//write
524 1 P0=c;//先在bus上放上数据
525 1 en=1;//产生一个下降沿用于写
526 1 delay1(10);//141us
527 1 en=0;
528 1 delay1(10);
529 1 chip1=0;
530 1 chip2=0;
531 1 EA=1;
532 1 }
533 void wdata(uchar c,uchar cs1,uchar cs2)
534 {
535 1 EA=0;
536 1 chip1=cs1;
537 1 chip2=cs2;
538 1 di=1;//write data
539 1 rw=0;//write
540 1 P0=c;//先在bus上放上数据
541 1 en=1;//产生一个下降沿用于写
542 1 delay1(10);
543 1 en=0;
544 1 delay1(10);
545 1 chip1=0;
546 1 chip2=0;
547 1 EA=1;
548 1 }
549 void dison_off(uchar on)
550 {
551 1 on=on+0x3e;
C51 COMPILER V6.23a CELIANGE 05/30/2007 12:24:19 PAGE 10
552 1 wcode(on,1,1);
553 1 }
554 void setstartline(uchar i)
555 {
556 1 i=0xc0+i;
557 1 wcode(i,1,1);
558 1 }
559 void setadr(uchar x,uchar y)
560 {
561 1 x=x+0xb8;
562 1 y=y+0x40;
563 1 wcode(x,1,1);
564 1 wcode(y,1,1);
565 1 }
566 void clear()
567 {
568 1 uchar i,j;
569 1 for(i=0;i<=7;i++)
570 1 {
571 2 setadr(i,0);
572 2 for(j=0;j<=63;j++)
573 2 {
574 3 wdata(0x00,1,1);//两屏同时写0
575 3 }
576 2 }
577 1 }
578 void print1(uchar *c,uchar x,uchar y)
579 {
580 1 uchar i,cs,temp,flag=0;
581 1 if(y>=0&&y<128){//当输入的列地址无效时,不操作
582 2 if(y<=63)
583 2 {
584 3 cs=1;//左屏
585 3 }
586 2 else
587 2 {
588 3 temp=y;
589 3 cs=0;//右屏
590 3 y=y-64;
591 3 }
592 2 setadr(x,y);
593 2 for(i=0;i<=7;i++)
594 2 {
595 3 if(temp+i<128)
596 3 {
597 4 if(y+i>63&&cs==1)
598 4 {
599 5 setadr(x,y+i-64);
600 5 cs=0;
601 5 flag=1;
602 5 }
603 4 wdata(c[i],cs,!cs);
604 4 }
605 3 }
606 2 if(flag==1){cs=1;}//再次写左屏
607 2 if(x+1<8)
608 2 {
609 3 setadr(x+1,y);
610 3 for(i=0;i<=7;i++)
611 3 {
612 4 if(temp+i<128)
613 4 {
C51 COMPILER V6.23a CELIANGE 05/30/2007 12:24:19 PAGE 11
614 5 if(y+i>63&&cs==1)
615 5 {
616 6 setadr(x+1,y+i-64);
617 6 cs=0;//选中右屏
618 6 }
619 5 wdata(c[i+0x08],cs,!cs);
620 5 }
621 4 }
622 3 }
623 2 }
624 1 }
625 void print2(uchar *c,uchar x,uchar y)
626 {
627 1 uchar i,cs,temp,flag=0;
628 1 if(y>=0&&y<128){//当输入的列地址无效时,不操作
629 2 if(y<=63)
630 2 {
631 3 cs=1;
632 3 }
633 2 else
634 2 {
635 3 temp=y;
636 3 cs=0;//右屏
637 3 y=y-64;
638 3 }
639 2 setadr(x,y);
640 2 for(i=0;i<16;i++)
641 2 {
642 3 if(temp+i<128)
643 3 {
644 4 if(y+i>63&&cs==1)
645 4 {
646 5 setadr(x,y+i-64);
647 5 cs=0;//选中右屏
648 5 flag=1;//置一标志
649 5 }
650 4 wdata(c[i],cs,!cs);
651 4 }
652 3 }
653 2 if(flag==1){cs=1;}//再次写左屏
654 2 if(x+1<8)
655 2 {
656 3 setadr(x+1,y);
657 3 for(i=0;i<16;i++)
658 3 {
659 4 if(temp+i<128)
660 4 {
661 5 if(y+i>63&&cs==1)
662 5 {
663 6 setadr(x+1,y+i-64);//对应于右屏的地址
664 6 cs=0;//选中右屏
665 6 }
666 5 wdata(c[i+16],cs,!cs);
667 5 }
668 4 }
669 3 }
670 2 }
671 1 }
672
673 void writepixel(uchar x,uchar y)//x----行号,y:列号;
674 {
675 1 uchar cs,xoffset,xpage,pixel,i=0;
C51 COMPILER V6.23a CELIANGE 05/30/2007 12:24:19 PAGE 12
676 1 if(y>=0&&y<128&&x>=0&&x<64)
677 1 {
678 2 if(y<=63)
679 2 {
680 3 cs=1;
681 3 }
682 2 else
683 2 {
684 3 cs=0;
685 3 y=y-64;
686 3 }
687 2 xpage=x/8;
688 2 xoffset=x%8;
689 2 setadr(xpage,y);
690 2 switch(xoffset)
691 2 {
692 3 case 0:pixel=0x01;break;
693 3 case 1:pixel=0x02;break;
694 3 case 2:pixel=0x04;break;
695 3 case 3:pixel=0x08;break;
696 3 case 4:pixel=0x10;break;
697 3 case 5:pixel=0x20;break;
698 3 case 6:pixel=0x40;break;
699 3 case 7:pixel=0x80;break;
700 3 }
701 2 wdata(pixel,cs,!cs);
702 2 }
703 1 }
704
705 void writeband(uchar x,uchar y)//x----行号,y:列号;
706 {
707 1 uchar cs,xpage,i=0;
708 1 if(y>=0&&y<128&&x>=0&&x<64)
709 1 {
710 2 if(y<=63)
711 2 {
712 3 cs=1;
713 3 }
714 2 else
715 2 {
716 3 cs=0;
717 3 y=y-64;
718 3 }
719 2 xpage=x/8;
720 2 setadr(xpage,y);
721 2 wdata(0xff,cs,!cs);
722 2 }
723 1 }
724
725 void writecolum(uchar band[16])//画直方图的函数
726 {
727 1 //然后开始画图
728 1 uchar k=250;uchar m,n=0;
729 1 uchar colgraph[9];
730 1 if(recolum==0)
731 1 {
732 2 for(m=0;m<16;m++)
733 2 {
734 3 if(band[m]<k)
735 3 {
736 4 k=band[m];
737 4 n=m;
C51 COMPILER V6.23a CELIANGE 05/30/2007 12:24:19 PAGE 13
738 4 }
739 3 }
740 2 for(m=0;m<9;m++)
741 2 {
742 3 colgraph[m]=band[n+m-4];
743 3 }
744 2 for(m=0;m<9;m++)
745 2 {
746 3 if(m<8)
747 3 {
748 4 band[2*m]=colgraph[m];
749 4 band[2*m+1]=(colgraph[m]+colgraph[m+1])/2;
750 4 }
751 3 }
752 2 recolum=1;
753 2 }
754 1 for(m=0;m<16;m++)//16条
755 1 {
756 2 for(n=band[m];n<64;n+=8)//每条带子长度为n
757 2 {
758 3 for(k=0;k<8;k++)//每条带子的宽度
759 3 {
760 4 writeband(n,m*8+k);
761 4 }
762 3 }
763 2 }
764 1 }
765
766 void wavegen(uchar*p,int freq,int phase)
767 {
768 1 if(freq>0&&freq<=8&&phase>=0&&phase<360)
769 1 {
770 2 uchar i,j;
771 2 switch(phase)
772 2 {
773 3 case 0:j=0;break;
774 3 case 90:j=32/freq;break;
775 3 case 180:j=64/freq;break;
776 3 case 270:j=96/freq;break;
777 3 default:;
778 3 }
779 2 for(i=0;i<128;i++)
780 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -