?? main.c
字號(hào):
/*
;************************************************************************************************************
;* 北京精儀達(dá)盛科技有限公司
;* 研 發(fā) 部
;*
;* http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------
;*
;* 文件名稱 : main.c
;* 文件功能 : 該文件為主程序。
;* 補(bǔ)充說(shuō)明 :
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM開(kāi)發(fā)小組
;* 修改日期 : 2004/04/25
;* 版本聲明 : V1.0.1
;*-------------------------------------------- 歷史版本信息 -------------------------------------------------
;* 文件作者 : ARM開(kāi)發(fā)小組
;* 創(chuàng)建日期 : 2004/04/20
;* 版本聲明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
/*底板SWITCH欄中的CS2撥到ON;CS0,CS1,CS3全為OFF*/
#include "..\inc\config.h"
//#include "..\inc\system.h"
#include <stdlib.h>
#define clreint (*(unsigned short *)0x08007ffc) //address 0x1FFE
#define seteint (*(unsigned short *)0x08007ffe) //address 0x1FFF
unsigned short data[2048];
static int flag=0;
extern unsigned char key_number;
extern unsigned int GetAd(void);
void dashedline(U16 x0, U16 y0,U16 x1, U16 y1) //在液晶屏上繪制虛線
{
U16 gaps;
int count,i;
Set_Color (0x2626ff);
if (x0==x1)
{ gaps=y1-y0;
count=gaps/10;
for (i=0;i<count;i++)
{ Draw_VLine(x0, y0+1,y0+3);
//Draw_Point(x0, y0+2);
y0=y0+10;
}
}
if (y0==y1)
{ gaps=x1-x0;
count=gaps/10;
x0+=10;
for (i=1;i<count+1;i++)
{
Draw_HLine(y0, x0-1,x0+1);
//Draw_Point(x0, y0);
x0=x0+10;
}
}
}
void coordinate(int x,int y,int z) //在液晶屏上繪制坐標(biāo)軸
{ //x,y是坐標(biāo)的原點(diǎn),z是刻度的長(zhǎng)度
int i,rate=20;
Set_Color (GUI_BLACK);
Draw_Line (x,y,319,y);
Draw_Line (312,y-2,320,y);
Draw_Line (312,y+2,320,y);
Draw_Line (x,1,x,y);
Draw_Line (x-2,8,x,0);
Draw_Line (x+2,8,x,0);
for (i=1;i<(319-x)/rate;i++)
Draw_Line (x+rate*i,y,x+rate*i,y-z);
for (i=0;i<y/rate;i++)
Draw_Line (x,y-rate*i,x+z,y-rate*i);
}
//*************Init the Interrupt************//
void InitIrq5(void) //打開(kāi)中斷5,使鍵盤(pán)可用
{
if (rEXTINPND & 0x02)
{
rEXTINPND = 0x2;
rI_ISPC |=BIT_EINT4567;
}
rINTMSK = ~(BIT_GLOBAL|BIT_EINT4567); //開(kāi)中斷;
pISR_EINT4567 = (int)EINT5_ISR;
}
//***************the ISR of the interrupt**********//
void __irq EINT5_ISR(void) //鍵盤(pán)識(shí)別、處理函數(shù)
{
char temp;
U32 pixel1[256];
U32 pixel2[256];
static U32 tmp1[256];
static U32 tmp2[256];
U32 i;
rINTMSK |= BIT_EINT4567;
temp=clreint; //shut down the interrupt
//Uart_Printf(0,"the data in 1FFE is %x\n",temp);
for(i=0;i<512;i++)
data[i] = dualram(i); //read the data
//for(i=0;i<256;i++)
//Uart_Printf(0,"the data%d is %x\n",i,data[i]);
for (i=0;i<256;i++)
pixel1[i]= (U32) data[i];
for (i=0;i<256;i++)
pixel2[i]=(U32) data[i+256];
if (flag!=0)
{
Set_Color (GUI_BLUE);
for (i=3;i<159;i++)
Draw_Line (2*i,tmp1[i],2*i+2,tmp1[i+1]);
for (i=3;i<159;i++)
Draw_Line (2*i,233-tmp2[i],2*i+2,233-tmp2[i+1]);
}
//Set_Color(GUI_BLUE);
//Fill_Rect(0,0,319,239);
coordinate(5,117,5);
Set_Color (GUI_YELLOW);
for (i=3;i<159;i++)
Draw_Line (2*i,pixel1[i],2*i+2,pixel1[i+1]);
for (i=3;i<159;i++)
Draw_Line (2*i,233-pixel2[i],2*i+2,233-pixel2[i+1]);
for (i=0;i<256;i++)
{
tmp1[i]= pixel1[i];
tmp2[i]= pixel2[i];
}
rEXTINPND = 0x2; //open the interrupt
rI_ISPC |=BIT_EINT4567;
rINTMSK = ~(BIT_GLOBAL|BIT_EINT4567);
flag++;
seteint=0x55AA; //turn to the DSP
}
void WriteAdToBuff(int *buff,int lenth) //將AD轉(zhuǎn)換結(jié)果保存
{
int i;
for(i=0;i<lenth;i++)
{
buff[i] =150*(1-((float)GetAd()/4096)*150);
if(buff[i]<0) buff[i] = 0;
}
}
void kfft(int *buff,int k,int l,int il) //將時(shí)域圖形轉(zhuǎn)換成頻域圖形
{int it,m,is,i,j,nv,l0,n; //pr:輸入的實(shí)部,k:log2(N)
double p,q,s,vr,vi,poddr,poddi; //fr輸出的實(shí)部
double pr[256],pi[256],fr[256],fi[256];
n=0x1<<k;
for (i=0; i<n; i++) //fi:輸出的虛部
{
*(pr+i) =((double) *(buff+i))/64;
*(pi+i) = 0;
}
for (it=0; it<=n-1; it++) //fi:輸出的虛部
{ m=it; is=0; //pi:輸入的虛部
for (i=0; i<=k-1; i++) //n:貞的點(diǎn)數(shù)
{
j=m/2;is=2*is+(m-2*j);m=j;
}
fr[it] = pr[is];fi[it] = pi[is];
}
pr[0]=1.0;pi[0]=0.0;
p=6.283185306/(1.0*n);
pr[1]=cos(p); pi[1]=-sin(p);
if (l!=0) pi[1]=-pi[1];
for (i=2; i<=n-1; i++)
{ p=pr[i-1]*pr[1]; q=pi[i-1]*pi[1];
s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
pr[i]=p-q; pi[i]=s-p-q;
}
for (it=0; it<=n-2; it=it+2)
{ vr=fr[it]; vi=fi[it];
fr[it]=vr+fr[it+1];
fi[it]=vi+fi[it+1];
fr[it+1]=vr-fr[it+1];
fi[it+1]=vi-fi[it+1];
}
m=n/2; nv=2;
for (l0=k-2; l0>=0; l0--)
{m=m/2; nv=2*nv;
for (it=0; it<=(m-1)*nv; it=it+nv)
{
for (j=0; j<=(nv/2)-1; j++)
{ p=pr[m*j]*fr[it+j+nv/2];
q=pi[m*j]*fi[it+j+nv/2];
s=pr[m*j]+pi[m*j];
s=s*(fr[it+j+nv/2]+fi[it+j+nv/2]);
poddr=p-q; poddi=s-p-q;
fr[it+j+nv/2]=fr[it+j]-poddr;
fi[it+j+nv/2]=fi[it+j]-poddi;
fr[it+j]=fr[it+j]+poddr;
fi[it+j]=fi[it+j]+poddi;
}
}
}
if (l!=0)
{
for (i=0; i<=n-1; i++)
{
fr[i]=fr[i]/(1.0*n);
fi[i]=fi[i]/(1.0*n);
}
}
if (il!=0)
{
for (i=0; i<=n-1; i++)
{ pr[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]);
if (fabs(fr[i])<0.000001*fabs(fi[i]))
{ if ((fi[i]*fr[i])>0) pi[i]=90.0;
else pi[i]=-90.0;
}
else
pi[i]=atan(fi[i]/fr[i])*360.0/6.283185306;
}
}
for (i=0;i<n;i++)
{ //mo:輸出的幅值,i是此幅值下的頻率
buff[i] = 100-(unsigned int)(0.8*sqrt(fr[i]*fr[i]+fi[i]*fi[i]));
}
}
/**********clearn wave buff**********/
void ClearnWaveBuff(int *wave) //清除波形緩沖器
{
int x;
for (x=0;x<320;x++)
wave[x]=0;
}
/**********generate sin wave**********/
void Sinwave(int *wave,int a,int num) //正弦波發(fā)生器
{//create the sin wave
int x;
ClearnWaveBuff(wave);
for (x=0;x<320;x++)
wave[x]= (U32) (a*(1-sin(2*3.14159*x*num/320))/2);
}
/**********generate square wave**********/
void Squarewave(int *wave,int a,int num) //方波發(fā)生器
{ //create the square wave
int x,i;
ClearnWaveBuff(wave);
for (x=0;x<num;x++)
{
for(i=x*320/num;i<(x+1)*320/num;i++)
{
if(i<(x*320/num+320/(num*2))) wave[i] = a;
else wave[i] = 0;
}
}
}
/**********generate triangle wave**********/
void Trianglewave(int *wave,int a,int num) //三角波發(fā)生器
{ //create the triangle wave
int x,i;
ClearnWaveBuff(wave);
for (x=0;x<num;x++)
{
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -