⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 celiange.lst

📁 程序运行时,在屏上画出一个东南大学的圆形校徽,写出"东南大学电子管厂"的文字,还有一些该仪器的操作菜单. 练习者可以改写其中的字库,或该写其中的图形数组文件,参考该程序,写出所需要的文字和图形.
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -