📄 main.c
字号:
//=========================================================================================
//作 者:北京邮电大学 刘轩 张绍亮 张迪
//题 目:简易频谱分析仪
//备 注:
// 2005年全国大学生电子竞赛
//=========================================================================================
//#include "math.h"
//#include "hardware.inc"
#include "SPCE061V004.H"
#define HaveKey 1
#define NoKey 0
unsigned int KeyVal;
unsigned int KeyDownTimes; //保存按键次数
unsigned int KeyFlag; //按键标识
char KeyData;
unsigned int Key,sflag=0;
char data;
float temp;
unsigned int flow,fhigh,N,xstep,ystep,n,m,val,z,lsflag,p,ma,q;
float tempma;
#define NONE 0x0
#define SIN 0x1
#define AM 0x2
#define FM 0x3
#define UNKNOWN 0x4
#define VAL 0xf000
unsigned int DDS_data1,DDS_data2,DDS_data3,DDS_1,DDS_2,DDS_3,DDS_4,DDS_5;
long int dds_ctrl=0x108c3f3,fre=500000;//0x10624dd
unsigned int v[1024],fexist[50],vexist[50],tempv;
unsigned int i,j,k,type,centralf,ctrlVx,ctrlVy,o;
unsigned int en[6];
unsigned int ensize,enflagMK,enflagfw,endata;
unsigned int wdata,fdata,dotflag,mo,b,pbflag=0;
//=========================================================================================
//
//=========================================================================================
void dispb()
{
for (b=0;b<=N;b++)
{
if (b%100==0 & v[b]==0) v[b]=20;
}
}
//=========================================================================================
//
//=========================================================================================
void delpb()
{
for (b=0;b<=N;b++)
{
if (b%100==0 & v[b]==20) v[b]=0;
}
}
//=========================================================================================
//
//=========================================================================================
void modify()
{
float tempa;
clearwd();
if (i>1400) mo+=30;
}
//=========================================================================================
//
//=========================================================================================
void axis()
{
unsigned int x,temp;
temp=fdata-100;
if (temp<wdata/2)
{
flow=0;
fhigh=wdata;
fdata=(fhigh+flow)/2+100;
WrAdd(0x83);
displayf(fdata);
}
else if((temp+wdata/2)>2900)
{
fhigh=2900;
flow=2900-wdata;
fdata=(fhigh+flow)/2+100;
WrAdd(0x83);
displayf(fdata);
}
else
{
fhigh=temp+wdata/2;
flow=temp-wdata/2;
}
clearwd();
N=fhigh-flow;
xstep=1024/N;
for (x=0;x<=N;x++)
{
v[x]=*(Addr+flow+x);
if (v[x]==0 & (flow+x)%100==0) v[x]=20;
//if(x==100) v[x]=1000;
//else if(x%100==0) v[x]=50;
//else v[x]=0;
}
clearwd();
if(type==FM & flow<=20)
{
for (x=0;x<65;x++)
v[x]=0;
}
}
//=========================================================================================
//
//=========================================================================================
void display1()
{
// N=fhigh-flow;
// xstep=1024/N;
ctrlVx=0;
for(z=0;z<=N;z++)
{
ctrlVy=0;
ctrlVx+=xstep;
while (ctrlVy<=v[z])
{
sendxy();
ctrlVy+=10;
}
clearwd();
}
}
//=========================================================================================
//
//=========================================================================================
void incf()
{
dds_ctrl+=0x0053e2d;//0x20c49ba;//
DDS_5=dds_ctrl & 0x000000ff;
DDS_4=(dds_ctrl>>8) & 0x000000ff;
DDS_3=(dds_ctrl>>16) & 0x000000ff;
DDS_2=(dds_ctrl>>24) & 0x000000ff;
DDS_data1=dds_ctrl & 0x0000ffff;
DDS_data2=dds_ctrl>>16;
}
//=========================================================================================
//
//=========================================================================================
void judgetype()
{
unsigned int temp;
k=0;
q=0;
fdata=1000;
for (j=0;j<=2900;j++)
{
getvalue();
if (tempv>0x0060)
{
fexist[k]=j;
vexist[k]=tempv;
k++;
}
clearwd();
}
if (k==0) type=NONE;
else if (k==1)
{
type=SIN;
centralf=fexist[0]+100;
}
else if (k==2)
{
type=AM;
centralf=(fexist[0]+fexist[1])/2+100;
}
else if(k==3)
{
if ((fexist[1]-fexist[0])==(fexist[2]-fexist[1]))
{
type=AM;
centralf=fexist[1]+100;
}
else type=UNKNOWN;
}
// else if (k%2==1) type=UNKNOWN;
// else
// {
// if ((fexist[1]-fexist[0])==(fexist[k-1]-fexist[k-2]))
// {
// type=FM;
// centralf=fexist[k/2]+100;
// }
// else type=UNKNOWN;
// }
//
else
{
type=FM;
temp=vexist[0];
q=0;
for(p=1;p<k;p++)
{
if (vexist[p]>temp)
{
temp=vexist[p];
q=p;
}
}
centralf=fexist[q]+100;
temp=(centralf/100+1)*100;
if(centralf%100>(temp-centralf)) centralf=temp;
else centralf=centralf/100*100;
}
}
//=========================================================================================
//
//=========================================================================================
void DDSstart()
{
WrCom(0x01);
WrDat('S');
WrDat('c');
WrDat('a');
WrDat('n');
WrDat('n');
WrDat('i');
WrDat('n');
WrDat('g');
WrDat('.');
WrDat('.');
WrDat('.');
WrDat(' ');
WrDat('.');
WrDat('.');
WrDat('.');
WrAdd(0xc0);
WrDat('P');
WrDat('l');
WrDat('e');
WrDat('a');
WrDat('s');
WrDat('e');
WrDat(' ');
WrDat('w');
WrDat('a');
WrDat('i');
WrDat('t');
clearflash();
dds_ctrl=0x20d130e;//0x20c49ba;//0x108c3f3;
DDS_data1=dds_ctrl & 0x0000ffff;
DDS_data2=dds_ctrl>>16;
DDS_data3=0;
DDS1();
DDS1();
for(i=0;i<=2900;i++)
{
DDS1();
//send603ctrlv();
o=8000;
while(o--);
incf();
Sample();
clearwd();
}
judgetype();
}
//=========================================================================================
//
//=========================================================================================
int countf()
{
int j,n;
for(j=0;j<6;j++)
{
if(en[j]==11)
{
n=j;break;
}
}
if (enflagMK==0)
{
for(j=0;j<n;j++)
{
if (en[j]==10)
{
dotflag=1;
if (j==1)
{
endata=en[0]*100;
if (n==3)
{endata+=en[2]*10;}
else if(n>=4)
{endata+=en[2]*10;endata+=en[3]; }
}
else if(j==2)
{
if(en[0]>3)
{en[0]=3;}
endata=en[0]*1000;
if (n==4)
{endata+=en[1]*100;endata+=en[3]*10;}
else if(n==5)
{endata+=en[1]*100;endata+=en[3]*10;endata+=en[4];}
}
else if(j==0)
{
endata=en[1]*10;
if (n==3)
{endata+=en[2];}
}
break;
}
}
if(dotflag==0)
{
if(n==2)
{
endata=en[0]*1000;
endata+=en[1]*100;
}
else if(n==1)
{endata=en[0]*100;}
else
{endata=3000;}
}
}
else
{
if(n==4)
{endata=en[0]*100;endata+=en[1]*10;endata+=en[2];}
else if(n==5)
{endata=en[0]*1000;endata+=en[1]*100;endata+=en[2]*10;endata+=en[3];}
else
{ endata=50;}
}
if(enflagfw==0)
{
if(endata<100) fdata=100;
else
if(endata>3000) fdata=3000;
else {fdata=endata;}
WrAdd(0x0083); //10000010
displayf(fdata);
}
else
{
if(endata<50) wdata=50;
else
if(endata>1000) wdata=1000;
else {wdata=endata;}
WrAdd(0x00c6);
displayf(wdata);
}
}
//=========================================================================================
//
//=========================================================================================
void main()
{
*P_SystemClock=0x0023;
SP_Init_IOA();
InitLcd();
initDDS1();
initdisp();
//initdisp();
WrCom(0x38);
WrCom(0x01);
WrCom(0x06);
WrCom(0x0c);
WrCom(0x01);
clearwd();
menu1:
WrCom(0x01);
WrDat(' ');
WrDat(' ');
WrDat(' ');
WrDat(' ');
WrDat('W');
WrDat('E');
WrDat('L');
WrDat('C');
WrDat('O');
WrDat('M');
WrDat('E');
WrDat('!');
WrAdd(0xc0);
WrDat('P');
WrDat('r');
WrDat('e');
WrDat('s');
WrDat('s');
WrDat(' ');
WrDat(' ');
WrDat('S');
WrDat('t');
WrDat('a');
WrDat('r');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -