📄 generator.c
字号:
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 + -