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

📄 generator.c

📁 2005年全国大学生电子设计大赛 频谱仪 题 源代码。作品获国家一等奖
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<aduc841.h>
#include<main.h>
#include<240128.h>
#include<stdoi.h>
#include<9954.h>
#include<keyboard.h>
#include<D:\Keil\C51\ISD51\ADuc841\ISD51.H> 
#include<math.h>


#define A1k 13421.772796875
#define bnoise 200
#define maxfrq 35000.0
#define medfrq 10694.0

unsigned char  keycode;
unsigned int idata frq0,frq1,frq,pos;
unsigned int idata span,center;
unsigned int max;
unsigned char gx,gy;
unsigned char bw=10;
unsigned char pos1=60;
bit mark=1;
bit mask=1;
bit cont=0;


volatile unsigned int xdata spc[4096] ;
volatile unsigned char xdata dis[250] ;
//volatile unsigned int xdata dad[4096] _at_ 0x2500;
unsigned int code ampf[]={15683,16000,15983,15000,14700,14000,13500,13400,13300,13300,13200,13200,
                          13100,13100,13100,13100,13000,12900,12883,13083,13183,13383,13483,13683,
                          13883,14083,14283,14583,14783,14983,15283,15083,15383,15383,15683,15783
                          }; 



void delay(unsigned int dly);
void nsweep();
void sweep();
void daout();
void menu(bit mode);
void popup(unsigned x1,unsigned char y1,unsigned char x2,unsigned char y2);
void select(unsigned char idata x1,unsigned char idata y1,unsigned char idata x2,unsigned char idata y2,bit setclr);
void 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);
void tsweep();
void smooth();
void dist();

main()
{
 unsigned char tmp;
 unsigned char sel,sels1;
 EWAIT=3;
 EA=1;
 SCON=0x52;
 T3CON=0x84;
 T3FD=23;
 gx=1;
 gy=1;
 frq0=1000;
 frq1=35000;
 span=300;
 center=20000;
 initUart(); 
 initkey();
 initlcd();
 lcdclear('a',0,1,0);
 DDS_Ini();
 menu(1);
 displaychar("Ready.",1,0);
 popup(30,30,215,62);
 displaychar("'R' to analyze.",5,6);
 while(!readkey(&tmp));
 lcdclear('g',0.18,1,0);
 lcdclear('t',0.18,1,0);
 CFG841=0xcd;
 ADCCON1=0x98;
 ADCCON2=0x00;
 DACCON=0x7f;;
  
 while(1)
 {

  ISDcheck();
  if(readkey(&keycode))
  {
   /*
   if(keycode==key1)
   {
    lcdclear('t',0,1,0);
    displaychar("Input:",3,0 );
    frq=scanf('i',7,3);
    ddsSetFTW0((unsigned long)frq*A1k);
    
   }
   
   if(keycode==key3)
   {
    lcdclear('t',0,1,0);
    displaychar("Input AMP:",3,0 );
    ddsSetASF(scanf('i',11,3));
    }
     
   if(keycode==key5)
   {
    frq=frq+1;
    ddsSetFTW0((unsigned long)frq*A1k);
    displayint(frq,5,3);
   }
   if(keycode==key6)
   {
    frq=frq-1;
    ddsSetFTW0((unsigned long)frq*A1k);
    displayint(frq,5,3);
   }
    */

    if (keycode==key6)
    {
    mark=0;
    if (pos1>240) pos1=240;
     pos1=pos1+5;
     displaychar("Freq:      KHz Amp:-      dBm",3,0);
     displayint(frq0+((frq1-frq0)/240.0)*(pos1),3,5);
     displayfloat((-1)*(((float)spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)]*(-0.000000493174)*spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)])+spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)]*0.0081-43.184),3,20);
     gx=1;
     gy=1;
     lcdclear('g',0,1,0);
     refresh();
     line(pos1,40,pos1+1,127,3);
     

    }

   if (keycode==key5)
    {
     mark=0;
     if (pos1<5) pos1=5;
     pos1=pos1-5;
     displaychar("Freq:      KHz Amp:-      dBm",3,0);
     displayint(frq0+((frq1-frq0)/240.0)*(pos1),3,5);
     displayfloat((-1)*(((float)spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)]*(-0.000000493174)*spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)])+spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)]*0.0081-43.184),3,20);
     gx=1;
     gy=1;
     lcdclear('g',0,1,0);
     refresh();
     line(pos1,40,pos1+1,127,3);
    }

    if (keycode==key2)
    {
    mark=0;
    if (pos1>240) pos1=239;
     pos1=pos1+1;
     displaychar("Freq:      KHz Amp:-      dBm",3,0);
     displayint(frq0+((frq1-frq0)/240.0)*(pos1),3,5);
     displayfloat((-1)*(((float)spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)]*(-0.000000493174)*spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)])+spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)]*0.0081-43.184),3,20);
     gx=1;
     gy=1;
     lcdclear('g',0,1,0);
     refresh();
     line(pos1,40,pos1+1,127,3);
     

    }

   if (keycode==key1)
    {
     mark=0;
     if (pos1<5) pos1=5;
     pos1=pos1-1;
     displaychar("Freq:      KHz Amp:-      dBm",3,0);
     displayint(frq0+((frq1-frq0)/240.0)*(pos1),3,5);
     displayfloat((-1)*(((float)spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)]*(-0.000000493174)*spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)])+spc[(unsigned int)(pos1*(frq1-frq0)/bw/240.0)]*0.0081-43.184),3,20);
     gx=1;
     gy=1;
     lcdclear('g',0,1,0);
     refresh();
     line(pos1,40,pos1+1,127,3);
    }
   if(keycode==key8)
   {
    nsweep();
   
   }
    if(keycode==key12)
   {
    daout();
    } 
    /*
     if(keycode==key13)
   {
    tsweep();
    } 
     */
   if (keycode==key4)
    {

     lcdclear('t',0,1,0);
     sel=0;
     menu(1);
     popup(25,19,92,84);
     while(1)
     {
      lcdclear('t',0,1,0);
      displaychar("Options",1,0);
      displaychar("Setup",3,5);
      displaychar("Sweep",5,4);
      displaychar("Grid",6,4);
      displaychar("Meas",7,4);
      if (mask) displaychar(".",1,28);
      displayint((unsigned char)cont,9,5);
      select(27,40+sel*8,88,48+sel*8,1);
      while(!readkey(&keycode));
      if (keycode==key10)
       {
        select(27,40+sel*8,88,48+sel*8,0);
        sel--;
        if (sel>250) sel=2;
        select(27,40+sel*8,88,48+sel*8,1);

       }
      if (keycode==key13)
       {
        mask=~mask;
       }
       if (keycode==key14)
       {
        cont=~cont;
       }
      if (keycode==key9)
       {
        select(27,40+sel*8,88,48+sel*8,0);
        sel++;
        if (sel>2) sel=0;
        select(27,40+sel*8,88,48+sel*8,1);

       }
      if (keycode==key15)
       {
        lcdclear('a',0,1,0);
        refresh();
        displaychar("Completed",1,0);
        break;
       }
      if (keycode==key16)
       {
        select(27,40+sel*8,88,48+sel*8,0);
        delay(60000);
        delay(60000);
        select(27,40+sel*8,88,48+sel*8,1);
        delay(60000);
        delay(60000);
        select(27,40+sel*8,88,48+sel*8,0);
        delay(60000);
        delay(60000);
        select(27,40+sel*8,88,48+sel*8,1);
        popup(92,30+sel*8,159,80+sel*8);
        sels1=0;
        while(1)
         {
          if(sel==0)   //sweep
           {
            displaychar("Start",5,12);
            displaychar("End",6,12);
            displaychar("Center",7,12);
            displaychar("Span",8,12);
            displaychar("BW/Avg",9,12);
            select(94,40+sels1*8,155,48+sels1*8,1);
            while(!readkey(&keycode));
            if (keycode==key10)
              {
                select(94,40+sels1*8,155,48+sels1*8,0);
                sels1--;
                if (sels1>250) sels1=4;
                select(94,40+sels1*8,155,48+sels1*8,1);

              }
            if (keycode==key9)
              {
                select(94,40+sels1*8,155,48+sels1*8,0);
                sels1++;
                if (sels1>4) sels1=0;
                select(94,40+sels1*8,155,48+sels1*8,1);

              }
            if (keycode==key15)
              {
               lcdclear('a',0,1,0);
               refresh();
               displaychar("Options",1,0);
               popup(25,19,92,84);
               break;
              }
            if (keycode==key16)
              {
                select(94,40+sels1*8,155,48+sels1*8,0);
                delay(60000);
                delay(60000);
                select(94,40+sels1*8,155,48+sels1*8,1);
                delay(60000);
                delay(60000);
                select(94,40+sels1*8,155,48+sels1*8,0);
                delay(60000);
                delay(60000);
                select(94,40+sels1*8,155,48+sels1*8,1);
                if (sels1==0)
                 {
                  displaychar("      K",5,12);
                  frq0=scanfu('i',12,5);
                 }

                 if (sels1==1)
                 {
                  displaychar("      K",6,12);
                  frq1=scanfu('i',12,6);
                  }
                 if (sels1==2)
                 {
                  displaychar("      K",7,12);
                  center=scanfu('i',12,7);
                  frq0=center-span/2;
                  frq1=center+span/2;
                 }

                 if (sels1==3)
                 {
                  displaychar("      K",8,12);
                  span=scanfu('i',12,8);
                  frq0=center-span/2;
                  frq1=center+span/2;
                  }
                  if (sels1==4)
                 {
                  displaychar("      K",9,12);
                  bw=scanfu('i',12,9);
                  
                  
                  }
                 lcdclear('a',0,1,0);
                 for(tmp=0;tmp<240;tmp++) dis[tmp]=0;
                 refresh();
                 displaychar("Options",1,0);
                 popup(25,19,92,84);
                 
                 break;


               }




           }
          if(sel==1)  //grid
           {
            displaychar("ON",6,12);
            displaychar("OFF",7,12);
            select(94,48+sels1*8,155,56+sels1*8,1);
            while(!readkey(&keycode));
            if (keycode==key10)
              {
                select(94,48+sels1*8,155,56+sels1*8,0);
                sels1--;
                if (sels1>250) sels1=1;
                select(94,48+sels1*8,155,56+sels1*8,1);

              }
            if (keycode==key9)
              {
                select(94,48+sels1*8,155,56+sels1*8,0);
                sels1++;
                if (sels1>1) sels1=0;
                select(94,48+sels1*8,155,56+sels1*8,1);

              }
            if (keycode==key15)
              {
               lcdclear('a',0,1,0);
               refresh();
               displaychar("Options",1,0);
               popup(25,19,92,84);
               break;
              }
            if (keycode==key16)
              {
                select(94,48+sels1*8,155,56+sels1*8,0);
                delay(60000);
                delay(60000);
                select(94,48+sels1*8,155,56+sels1*8,1);
                delay(60000);
                delay(60000);
                select(94,48+sels1*8,155,56+sels1*8,0);
                delay(60000);
                delay(60000);
                select(94,48+sels1*8,155,56+sels1*8,1);
                if (sels1==0)
                 {
                  gx=8;
                  gy=9;
                 }

                 if (sels1==1)
                 {
                  gx=1;
                  gy=1;
                  }
                 lcdclear('a',0,1,0);
                 refresh();
                 displaychar("Options",1,0);
                 popup(25,19,92,84);
                 break;


               }

           }
          if(sel==2)  //Adjust
           {
            displaychar("Perform a measurement?",1,0);
            displaychar("YES",7,12);
            displaychar("NO",8,12);
            select(94,56+sels1*8,155,64+sels1*8,1);
            while(!readkey(&keycode));
            if (keycode==key10)
              {
                select(94,56+sels1*8,155,64+sels1*8,0);
                sels1--;
                if (sels1>250) sels1=1;
                select(94,56+sels1*8,155,64+sels1*8,1);

              }
            if (keycode==key9)
              {
                select(94,56+sels1*8,155,64+sels1*8,0);
                sels1++;
                if (sels1>1) sels1=0;
                select(94,56+sels1*8,155,64+sels1*8,1);

              }
            if (keycode==key15)
              {
               lcdclear('a',0,1,0);
               refresh();
               displaychar("Options",1,0);
               popup(25,19,92,84);
               break;
              }
            if (keycode==key16)
              {
                select(94,56+sels1*8,155,64+sels1*8,0);
                delay(60000);
                delay(60000);
                select(94,56+sels1*8,155,64+sels1*8,1);
                delay(60000);
                delay(60000);
                select(94,56+sels1*8,155,64+sels1*8,0);
                delay(60000);
                delay(60000);
                select(94,56+sels1*8,155,64+sels1*8,1);
                if (sels1==0)
                 {
                  lcdclear('a',0,1,0);
                  gridlinear(0,32,240,128,gx,gy);
                  menu(1);
                  dist();
                  while(!readkey(&keycode));
                 }

                 for(tmp=0;tmp<240;tmp++) dis[tmp]=0;
                 lcdclear('a',0,1,0);
                 gridlinear(0,32,240,128,gx,gy);
                 menu(1);
                 displaychar("Options",1,0);
                 popup(25,19,92,84);
                 ADCCON2=0x00;
                 break;


               }
           }


       }


     }



    }
  }

 
  }
   




 }


}

/*
void sweep()
{
 unsigned char idata tmp;
 unsigned int key;
 lcdclear('t',0,1,0);
 displaychar("Delta frq(Hz):",9,0);
 key=scanf('i',3,10);
 ddsSetSwpP((unsigned long)key*A1k/1000.0,1);
 ddsSetSwpN((unsigned long)key*A1k/1000.0,1);
 lcdclear('t',0,1,0);
 displaychar("end frq(kHz):",9,0);
 ddsSetFTW1((unsigned long)scanf('i',3,10)*A1k);
 lcdclear('t',0,1,0);
 displaychar("st frq(kHz):",9,0);
 ddsSetFTW0((unsigned long)scanf('i',3,10)*A1k);
 ddsSetCFR1(0x02200046);
 displaychar("Sleeping target...",4,0);
 displaychar("Target has slept.",5,0);
 while(!readkey(&tmp))
 {
  P3_4=1;
  delay(40);
  P3_4=0;
 }



}
 */
void delay(unsigned int dly)
{

 while(--dly);


}
/*
void tsweep()
{
 unsigned char tmp;
 unsigned int tmp1;
 unsigned int amp=16283;
 while(1)
 {
 if(readkey(&tmp))
 {
 
  if(tmp==key5)
  {
   if(frq0<1000) frq0=1000;
   frq0=frq0-100;
   ddsSetFTW0((unsigned long)frq0*A1k);
   displayint(frq0,5,5);
  }
  if(tmp==key6)
  {
   
   frq0=frq0+100;
   ddsSetFTW0((unsigned long)frq0*A1k);
   displayint(frq0,5,5);
  }
   if(tmp==key1)
  {
   if(frq0<1000) frq0=1000;
   frq0=frq0-5;
   ddsSetFTW0((unsigned long)frq0*A1k);
   displayint(frq0,5,5);
  }
  if(tmp==key2)
  {
   
   frq0=frq0+5;
   ddsSetFTW0((unsigned long)frq0*A1k);
   displayint(frq0,5,5);
  }
  if(tmp==key9)
  {
   if(amp<100) amp=100;
   amp=amp-100;
   ddsSetASF(amp);
   displayint(amp,6,5);
  }
  if(tmp==key10)
  {
   if(amp>16283) amp=16283;

⌨️ 快捷键说明

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