📄 main.c
字号:
#include "myapp.h"
//#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
#include "fir.h"
#include "LCD.h"
#define PI 3.1415926
#define PI2 6.2831852
#define ADCNUMBER 256
#define CREG (*(unsigned short int *)0x400004)
// AD ----------------------------------------------------------
ioport unsigned int *ADCCTL1=(unsigned int *)0x6800;
ioport unsigned int *ADCDATA1=(unsigned int *)0x6801;
ioport unsigned int *ADCCLKDIV1=(unsigned int *)0x6802;
ioport unsigned int *ADCCLKCTL1=(unsigned int *)0x6803;
#define ADCCTL (*ADCCTL1)
#define ADCDATA (*ADCDATA1)
#define ADCCLKDIV (*ADCCLKDIV1)
#define ADCCLKCTL (*ADCCLKCTL1)
// 液晶 ----------------------------------------------------------
#define CTRLED (*(unsigned int *)0x600802) // port8004
#define MCTRKEY (*(unsigned int *)0x602802) // port8005
#define CTRCLKEY (*(unsigned int *)0x600803) // port8006
#define CTRSTATUS (*(unsigned int *)0x600800) //port8000
void InitADC();
void wait( unsigned int cycles );
void EnableAPLL( );
ioport unsigned int * sysR = (unsigned int *)0x7fd;
unsigned int nADC0[NX],nADC1[NX];
struct struLCDGraph struGraph,struGraph1;
unsigned int nScreenBuffer[30*128];
int nData[256],nData1[256];
void Delay(unsigned int nDelay);
int k0,k1,uWork,uWork0,nAD,keyflage;
int nGraphBuf1[ADCNUMBER],nGraphBuf2[ADCNUMBER];
int nADBuf1[ADCNUMBER],nADBuf2[ADCNUMBER];
int nGraphBuf1[ADCNUMBER],nGraphBuf2[ADCNUMBER];
int max,min,test;
main()
{
int i,j;
unsigned int uWork;
unsigned int uWork1;
unsigned int * pWork;
PLL_Init(30);
SDRAM_init();
LCDTurnOff();
LCDSetScreenBuffer(nScreenBuffer);
for ( uWork=0,pWork=nScreenBuffer;uWork<30*128;uWork++,pWork++ ) (*pWork)=0;
LCDSetDelay(1);
LCDTurnOn(); // 打开显示
LCDCLS(); // 清除显示内存
for ( i=0;i<NX;i++) x[i]=0;
for ( i=0;i<NH+2;i++) db[i]=0;
//InitCTR();
InitADC();
(*sysR)=1;
keyflage=0;
CTRCLKEY=0;
while ( 1 )
{
for ( i=0;i<NX;i++ )
{
ADCCTL=0x8000; // 启动AD转换,通道0
do
{
uWork=ADCDATA;
} while ( uWork&0x8000 );
nADC0[i]=uWork&0x0fff;
ADCCTL=0x9000; // 启动AD转换,通道1
do
{
uWork=ADCDATA;
} while ( uWork&0x8000 );
nADC1[i]=uWork&0x0fff;
uWork=nADC0[i]; // 限幅,混频后仍然产生12位数据
x[i]=uWork;
}
fir2(x, h, r, db, NX, NH); // 调用滤波程序计算当前输出
min=0;
for(i=0;i<ADCNUMBER;i++)
{
out[i]=r[i+64];
test=out[i];
if(test<min)
{
min=test;
}
}
for(i=0;i<ADCNUMBER;i++)
{
out[i]=(out[i]-min)>>1;
}
if(keyflage==1)
{
struGraph.pData=out;
struGraph.uDataMode=DATAUINTMODE;
struGraph.uDataLength=256;
struGraph.uMaxValue=2048;
struGraph.uWindowX0=0;
struGraph.uWindowY0=0;
struGraph.uWindowX1=240;
struGraph.uWindowY1=128;
struGraph.nOriginX=0;
struGraph.nOriginY=0;
struGraph.uLineMode=LINEMODE;
LCDGraph(&struGraph);
for ( j=0;j<20;j++ ) _Delay(614);
LCDSetScreenBuffer(nScreenBuffer);
LCDCLS(); // 清除显示内存
}
if(keyflage==0)
{
struGraph.pData=x;
struGraph.uDataMode=DATAUINTMODE;
struGraph.uDataLength=256;
struGraph.uMaxValue=2048;
struGraph.uWindowX0=0;
struGraph.uWindowY0=0;
struGraph.uWindowX1=240;
struGraph.uWindowY1=128;
struGraph.nOriginX=0;
struGraph.nOriginY=0;
struGraph.uLineMode=LINEMODE;
LCDGraph(&struGraph);
for ( j=0;j<20;j++ ) _Delay(614);
LCDSetScreenBuffer(nScreenBuffer);
LCDCLS(); // 清除显示内存
}
uWork1=MCTRKEY;
CTRCLKEY=0;
if(uWork1==128)
{
keyflage=1-keyflage;
}
} // 在此加软件断点
}
void InitADC()
{
ADCCLKCTL=0x23; // 4MHz ADCLK
ADCCLKDIV=0x1f00;
}
void wait( unsigned int cycles )
{
int i;
for ( i = 0 ; i < cycles ; i++ ){ }
}
void EnableAPLL( )
{
/* Enusre DPLL is running */
*( ioport volatile unsigned short* )0x1f00 = 4;
wait( 25 );
*( ioport volatile unsigned short* )0x1f00 = 0;
// MULITPLY
*( ioport volatile unsigned short* )0x1f00 = 0x3000;
// COUNT
*( ioport volatile unsigned short* )0x1f00 |= 0x4F8;
wait( 25 );
//*( ioport volatile unsigned short* )0x1f00 |= 0x800
// MODE
*( ioport volatile unsigned short* )0x1f00 |= 2;
wait( 30000 );
// APLL Select
*( ioport volatile unsigned short* )0x1e80 = 1;
// DELAY
wait( 60000 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -