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

📄 generator.c

📁 2005年全国大学生电子设计大赛 频谱仪 题 源代码。作品获国家一等奖
💻 C
📖 第 1 页 / 共 2 页
字号:
   amp=amp+100;
   ddsSetASF(amp);
   displayint(amp,6,5);
  }

 
 }


 }
}
*/

void nsweep()
{
 unsigned char tmp,tmp2;
 unsigned int tmp1,tmp4,val1=0;
 float tmp3;
 unsigned long val;

 //unsigned char xdata wave[240];
 

 max=0;
 bw=(frq1-frq0)/240.0;
 if (bw<1) bw=1;
 if (bw>10) bw=10;
 lcdclear('t',0,1,0);
 displaychar("Spectum analyze",1,0);
 popup(30,30,215,62);
 displaychar("Analyzing...",5,6);
 do{
 for(tmp1=frq0;tmp1<frq1;tmp1=tmp1+bw)
 {
  ddsSetASF(ampf[tmp1/1000]);
  ddsSetFTW0((medfrq+tmp1)*A1k);
  tmp3=(frq1-frq0)/bw/240.0;
  for(val=0,tmp=0;tmp<200;tmp++)
   {
    SCONV=1;
    while(ADCCON3>0x80);
    val=val+(ADCDATAH*256)+ADCDATAL;
  
   }
  spc[(tmp1-frq0)/bw]=val/tmp;
  
  if((tmp1<maxfrq-medfrq*2)&&(mask))
  {
   ddsSetASF(ampf[(unsigned char)(tmp1+medfrq*2)/1000]);
   ddsSetFTW0((tmp1+medfrq*3.0+4)*A1k);
   delay(2000);
   val=0;
   for(tmp=0;tmp<255;tmp++)
   { 
    SCONV=1;
    while(ADCCON3>0x80);
    val=val+(ADCDATAH*256)+ADCDATAL;
   }
   val=val/tmp;
   if(val>bnoise+120) 
     {
     spc[(tmp1-frq0)/bw]=bnoise+spc[(tmp1-frq0)/bw]/32;
     spc[(tmp1-frq0)/bw-2]=bnoise+spc[(tmp1-frq0)/bw-2]/32;
     spc[(tmp1-frq0)/bw+2]=bnoise+spc[(tmp1-frq0)/bw+2]/32;
     
     }
  }
  
  if(spc[(tmp1-frq0)/bw]>max) 
    {
     max=spc[(tmp1-frq0)/bw];
     tmp4=tmp1;
    }
  
  if(bw>5)
  {
  if(val1<spc[(tmp1-frq0)/bw]) val1=spc[(tmp1-frq0)/bw];
  if(((tmp1-frq0)/bw)%(unsigned char)tmp3==0)
  {
   dis[(unsigned char)((tmp1-frq0)/bw/tmp3)]=val1/20;
   val1=0;
  }
  }
  if(bw<=5)
  {
   dis[(unsigned char)((tmp1-frq0)/bw/tmp3)]=spc[(tmp1-frq0)/bw]/20;

  }
   
       
 }
  
 
 pos=tmp4;
 
/*
for(tmp=0;tmp<240;tmp++)
{
  val=0;
  tmp2=tmp3;
  while(tmp2--)
   val=val+spc[(unsigned int)(tmp*tmp3)+tmp2];
   
  
  dis[tmp]=val/tmp3/20;


}
  */
//dis[(unsigned int)(tmp4/10/tmp3)]=max;


 lcdclear('t',0,1,0);
 displaychar("BW:   KHz",1,0);
 displayint(bw,1,3);
 displayint(max,5,5);
 displayint(tmp4,6,5);
 lcdclear('g',0.18,1,0);
 displaywavel(dis,240,0);
 gridlinear(0,32,240,128,gx,gy);
 if(readkey(&tmp)) break;
 }while(cont);
 }



void daout()
{
 unsigned int tmp,mnum,lenth,start;
 unsigned int tmp2=(frq1-frq0)/bw;
 unsigned char key,tmp1,tmp4;
 unsigned int tmp3;
 //unsigned int xdata fmark[30];
 //unsigned char marknum;
 lcdclear('t',0,1,0);
 displaychar("Output on Oscilloscope",1,0);
 popup(30,30,215,62);
 displaychar("Any key to stop.",5,6);
  
 
 tmp3=4096/tmp2;
 mnum=frq1/1000-frq0/1000;
 lenth=(1000.0/(frq1-frq0))*tmp3*tmp2;
 start=(frq1-(frq1/1000)*1000)*(float)tmp3*tmp2/(frq1-frq0);


 while(!readkey(&key))
 {
 DAC1H=0;
 DAC1L=0;
 DAC0H=0;
 DAC0L=0;

 /*
 for(tmp=0;tmp<tmp2;tmp++)
 {
  tmp4=tmp*tmp3;
  DAC0H=tmp4/256;
  DAC0L=tmp4;
  DAC1H=spc[tmp]/256;
  DAC1L=spc[tmp];
 }
  */
  
  if (bw==10) 
  {
  tmp2=(frq1-frq0)/240;
  tmp4=1;
  }
  if (bw<10) 
  {
  tmp2=(frq1-frq0)/24;
  tmp4=10;
  }
  if (bw<5) 
  {
  tmp2=(frq1-frq0)/2.4;
  tmp4=100;
  }
  tmp1=(frq1-frq0)/226.667;
  
  
  for(tmp=0;tmp<240;tmp++)
  {
   
   if((frq0+tmp*tmp2/tmp4)%1000<tmp1)
   {
    DAC1H=DAC1H+2;
    DAC1L=0;

   
   }    
   /*
   if((frq0+tmp*tmp2/100)%100<tmp1)
   {
    DAC1H=DAC1H+2;
    DAC1L=0;

   
   }
   */ 

   DAC0H=tmp*17/256;
   DAC0L=tmp*17;
   DAC1H=dis[tmp]/16;
   DAC1L=dis[tmp]*16;
   
  }
DAC1H=0;
 DAC1L=0;
 DAC0H=0;
 DAC0L=0;
 /*
 if(frq0==1000&&frq1==35000)
 {
  for(tmp=0;tmp<240;tmp++)
  {
   if((frq0+tmp*tmp2)%1000<20)
   {
    DAC1H=1;
    DAC0L=0;

   
   }    
   else
    {
    DAC1H=0;
     DAC0L=0; 
    }

  }



  }
 
 

 for(tmp=0;tmp<34;tmp++)
 {
  DAC0H=tmp*0.390625;
  DAC0L=tmp*100;
  delay(100);
  }
  DAC0H=((pos-frq0)/bw)*tmp*tmp3/256;
  DAC0L=((pos-frq0)/bw)*tmp*tmp3;
  delay(100);
  /*
  for(tmp1=0;tmp1<2;tmp1++)
  {
  DAC0H=(((pos-frq0)/bw)+tmp1)*tmp*tmp3/256;
  DAC0L=(((pos-frq0)/bw)+tmp1)*tmp*tmp3;
  DAC1H=0x09;
  DAC1L=0xff;
  }
  DAC1H=0x0;
  DAC1L=0x0;
  delay(100);
  DAC0H=0x0;
  DAC0L=0x0;
  delay(100);
  
  
 } */

  /*
 for(tmp=0;tmp<mnum;tmp++)
 {
  tmp3=start+lenth*tmp;
  DAC1H=0;
  DAC1L=0;
  DAC0H=tmp3/256;
  DAC0L=tmp3;
  DAC1H=2;
  DAC1L=0;
 }
  */

 //DAC1H=0;
 //DAC1L=0;
 }


 lcdclear('t',0,1,0);
 displaychar("Done.",1,3);
 lcdclear('g',0.18,1,0);
 refresh();
}



void gridlinear(unsigned char idata xstart,unsigned char idata ystart,unsigned char idata xend,unsigned char idata yend,unsigned char idata xnum,unsigned char idata ynum)
{
 float idata tmp;
 float tmp1;
 tmp1=(xend-xstart)/(float)xnum;
 for(tmp=xstart;tmp<xend;tmp=tmp+tmp1)
 {
  linev(tmp,ystart,yend,1);
 }

 tmp1=(yend-ystart)/(float)ynum;
 for(tmp=ystart;tmp<yend;tmp=tmp+tmp1)
 {
  lineh(xstart,xend,tmp,1);
 }
 if(mark==1)
  {
  
  displayint(frq0,3,0);
  displayint(frq1,3,24);
  }



}

void menu(bit mode) //'0'=up,'1'=down
{
 unsigned char idata tmp;

 static bit nmode=0;
 if(mode!=nmode)
 {
  if(mode==1)
  {

    for(tmp=0;tmp<21;tmp++)
    {
     linev(0,0,tmp,1);
     linev(239,0,tmp+2,1);
     linev(238,0,tmp+2,1);
     linev(237,0,tmp+2,1);
     lineh(0,239,tmp,1);
     lineh(3,239,tmp+2,1);

     lineh(0,239,tmp,0);

    }
    lineh(0,239,20,1);
    delay(5000);
    set_onoff(0,0,1,1);
   }
  if(mode==0)
   {
    set_onoff(0,0,0,1);
    for(tmp=20;tmp>0;tmp--)
    {
     linev(0,0,tmp,1);
     linev(239,0,tmp+2,1);
     linev(238,0,tmp+2,1);
     linev(237,0,tmp+2,1);
     lineh(3,239,tmp,1);
     lineh(3,239,tmp+2,1);

     lineh(0,239,tmp+3,0);

    }


   }

  }
  else
  {
   if (mode==1)
   {
    linev(0,0,20,1);
    linev(239,0,22,1);
    linev(238,0,22,1);
    linev(237,0,22,1);
    lineh(0,239,20,1);
    lineh(3,239,21,1);
    lineh(3,239,22,1);

   }
   if(mode==0)
   {
    linev(0,0,1,1);
    linev(239,0,3,1);
    linev(238,0,3,1);
    linev(237,0,3,1);
    lineh(0,239,1,1);
    lineh(3,239,2,1);
    lineh(3,239,3,1);

   }


  }

 nmode=mode;
return;
}


void popup(unsigned x1,unsigned char y1,unsigned char x2,unsigned char y2)
{
  unsigned char tmp;
  lineh(x1,x2-2,y1,1);
  linev(x1,y1,y1+2,1);
  linev(x2,y1+2,y1+4,1);
  linev(x2-1,y1+2,y1+4,1);
  linev(x2-2,y1,y1+2,1);
  for(tmp=y1+2;tmp<=y2;tmp++)
    {
     linev(x1,tmp-1,tmp,1);
     linev(x2,tmp+1,tmp+2,1);
     linev(x2-1,tmp+1,tmp+2,1);
     linev(x2-2,tmp-1,tmp+2,1);
     lineh(x1,x2,tmp,1);
     lineh(x1+2,x2,tmp+2,1);
     lineh(x1,x2-2,tmp,0);
  
    }
  lineh(x1,x2,y2,1);
 
}

void select(unsigned char idata x1,unsigned char idata y1,unsigned char idata x2,unsigned char idata y2,bit setclr)
{
 unsigned char tmp;
 for(tmp=y1;tmp<y2;tmp++)
  {
   lineh(x1,x2,tmp,setclr);


  }


}

void refresh()
{
 gridlinear(0,32,240,128,gx,gy);
 menu(1);
 displaywavel(dis,240,0);
 
}


void dist()
{

 unsigned int tmp,tmp1,tmp2,tmp4,lb,rb,cn,bw1,bw2;
 unsigned long val;
  
 bw=10;
 lcdclear('t',0,1,0);
 displaychar("Measure mode",1,0);
 popup(30,30,215,62);
 displaychar("Measuring center Frq..",5,4);
 max=0;
 for(tmp1=maxfrq;tmp1>1000;tmp1=tmp1-bw)
 {
  ddsSetASF(ampf[tmp1/1000]);
  ddsSetFTW0((medfrq+tmp1)*A1k);
  for(val=0,tmp=0;tmp<200;tmp++)
   {
    SCONV=1;
    while(ADCCON3>0x80);
    val=val+(ADCDATAH*256)+ADCDATAL;
  
   }
  tmp2=val/tmp;
  if(tmp2>max+20) 
    {
     max=tmp2;
     tmp4=tmp1;
    }
       
 }
 if(tmp1<maxfrq-medfrq*2)
 {
 ddsSetASF(ampf[tmp4/1000]);
 ddsSetFTW0((medfrq*3.0+tmp4)*A1k);
 delay(1000);
 for(val=0,tmp=0;tmp<200;tmp++)
   {
    SCONV=1;
    while(ADCCON3>0x80);
    val=val+(ADCDATAH*256)+ADCDATAL;
  
   }
 if(val/tmp>bnoise+120) tmp4=medfrq*2+tmp4;
 }
 frq0=tmp4-250;
 frq1=tmp4+250;
 bw=1;
 for(tmp1=frq0;tmp1<frq1;tmp1=tmp1+bw)
 {
  ddsSetASF(ampf[tmp1/1000]);
  ddsSetFTW0((medfrq+tmp1)*A1k);
  delay(2000);
  for(val=0,tmp=0;tmp<200;tmp++)
   {
    SCONV=1;
    while(ADCCON3>0x80);
    val=val+(ADCDATAH*256)+ADCDATAL;
  
   }
  dis[(tmp1-frq0)/2]=val/tmp/16;       
 }

 displaywavel(dis,240,0);
 popup(30,30,215,62);
 for(tmp1=1;tmp1<250;tmp1++)
 {
  if(dis[tmp1]>=90&&dis[tmp1-1]<=90) 
   {
    lb=tmp1;
    break;
   }
 }
 for(tmp1=248;tmp1>0;tmp1--)
 {
  if(dis[tmp1]>=90&&dis[tmp1+1]<=90) 
   {
    rb=tmp1;
    break;
   }
 }
 cn=((rb+lb)/2)*bw*2+frq0;
 bw1=rb-lb;
 lcdclear('t',0.18,1,0);
 displaychar("Center Frq:     KHz",5,4);
 displayint(cn,5,15);
 displaychar("Measuring Mode...",6,4);

 for(tmp1=1;tmp1<250;tmp1++)
 {
  if(dis[tmp1]>=20&&dis[tmp1-1]<=20) 
   {
    lb=tmp1;
    break;
   }
 }

 for(tmp1=248;tmp1>0;tmp1--)
 {
  if(dis[tmp1]>=20&&dis[tmp1+1]<=20) 
   {
    rb=tmp1;
    break;
   }
 }
 bw2=rb-lb;
 lcdclear('t',0.18,1,0);
 displaychar("Center Frq:     KHz",5,4);
 displayint(cn,5,15);

 displayint(bw1,8,3);
 displayint(bw2,9,3);
 
 if(bw1>15) 
 {
  displaychar("FM mode.",6,4);
  return;
 }
 /*
 if(bw1<15&&bw2<54) displaychar("Single tone mode.",6,4);
 if(bw1<15&&bw2>=54) displaychar("AM mode.",6,4);
 */
 max=0;
 
 ADCCON2=0x01;
 val=0;
 for(tmp=0;tmp<5000;tmp++)
 {
 
 SCONV=1;
 while(ADCCON3>0x80);
 tmp1=((ADCDATAH&0x0f)*256)+ADCDATAL;
 val=val+tmp1;
 if(max<tmp1)  max=tmp1;
 
 }
 val=val/5000;
 displayint(max,10,3);
 displayint(val,11,3);
 if(max-val>200) 
 {
  displaychar("AM mode.",6,4);
  return;
 }
 displaychar("Single tone mode.",6,4);


}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -