?? signal_show.c
字號:
*名稱:showchinese(uchar x,uchar y,int chin)
*描述:在x,y位置處,顯示字符碼為chin
*參數:坐標x,坐標y
*返回:
****************************************************************/
void showchinese(uchar x,uchar y,int chin)
{
int temp1,temp2;
uchar hi,lo;
uchar b,c=0,d;
d=y;
temp2=chin;
outcode(0x4c);
for(b=0;b<16;b++){
temp1=0x5218+x/8+d*AP;//5218
hi=temp1/256;
lo=temp1%256;
outcode(0x46);
outdata(lo);
outdata(hi);
outcode(0x42);
outdata(hzdot[temp2]);
temp2++;
outdata(hzdot[temp2]);
temp2++;
d=d+1;
}
}/***************************************************************
*名稱:showchin(void)
*描述:顯示四個漢字,波,形,正,弦
*參數:
*返回:
****************************************************************/
void showchin(void)
{
showchinese(10,20,CB2A8);
showchinese(27,20,CD0CE);
showchinese(10,140,CC6B5);
showchinese(27,140,CC6D7);
showchinese(10,239,C0000);
}
/***************************************************************
*名稱:initall(void)
*描述:初始化液晶屏
*參數:
*返回:
****************************************************************/
void initall(void)
{
turnoff();
init();
initram();
turnon();
DrawFrame();
DrawGrid();
showchin();
showchin() ;
}
void showflag(uchar x,uchar y,int chin)
{
int temp1,temp2;
uchar hi,lo;
uchar b,c=0,d;
d=y;
temp2=chin;
outcode(0x4c);
for(b=0;b<16;b++){
temp1=0x01f9+x/8+d*AP;//5218
hi=temp1/256;
lo=temp1%256;
outcode(0x46);
outdata(lo);
outdata(hi);
outcode(0x42);
outdata(hzdot[temp2]);
temp2++;
outdata(hzdot[temp2]);
temp2++;
d=d+1;
}
}
/***************************************************************
*名稱:Verline(uchar x ,uchar y)
*描述:在第一層畫垂直線
*參數:線的起始坐標(x,y)
*返回:
****************************************************************/
void Verline(uchar x ,uchar y)
{
uchar tempx , tempy ;
uchar i;
tempx = x ;
tempy = 200 - y ;
outcode(0x4f);
for(i=tempy;i<0xc8;i++)WriteD(x,i);
}
/***************************************************************
*名稱:pinpu(void)
*描述:在第一層畫頻譜
*參數:
*返回:
****************************************************************/
void pinpu(uchar x[],uchar N_temp,int N_start)
{
uchar temp ,temp2,temp3;
for(temp=0;temp<N_temp;temp++)
{
temp2 = temp*2+N_start ;
temp3 = (x[temp]) ;//%200
Verline(temp2,temp3);
}
}
/***************************************************************
*名稱:uchar adc0804(void)
*描述:AD0804采樣一次
*參數:
*返回:采樣值
****************************************************************/
uchar adc0804(void)
{
uchar ad_data ;
Adc_cs = 0 ;
lcd_a0 = 1 ;
lcd_wr = 0 ;
lcd_wr = 1 ;
while(Adc_busy) ;
lcd_a0 = 0 ;
ad_data = P0 ;
lcd_a0 = 1 ;
Adc_cs = 1 ;
return ad_data ;
}
/***************************************************************
*名稱:Adc_work(void)
*描述:AD0804采樣
*參數:
*返回:采樣值數組
****************************************************************/
void Adc_work(void)
{
unsigned int k=0 ,temp1,temp2 ,flag=0;
Ram_cs = 0 ;
// Ram_en = 0 ;
while(!Adc_en) ;
xr[0] = adc0804();
/*do
{
for(k=0;k<10;k++)//
{
while(!Adc_en) ;
xr[k] = adc0804();
while(!Adc_en) ;
}
temp1=xr[0];
for(k=0;k<10;k++)
{
temp2=xr[k];
if(temp2>temp1)temp1=temp2;
}
if((temp1-xr[0])<3) flag=0;
else flag=1;
}while(!flag);
*/
for(k=0;k<Sam_N;k++)//
{
while(!Adc_en) ;
xr[k] = adc0804() ;
xr_show[k] = xr[k] ;
while(!Adc_en) ;
}
}
/**************************************************************
*名稱:Fft(float xr[],float xi[])
*描述:FFT,N=128,M=7
*參數:采樣的實序列和序數部分
*返回:
****************************************************************/
void Fft(void)//float xr1[],float xi1[]
{
uchar L,B,J,P,k;
float rPartKB,iPartKB;
ChangeOrder(xr,xi);
for(L=1;L<=N;L++)
{
B=1<<(L-1);
for(J=0;J<=B-1;J++)
{
P=J*(1<<(N-L));
for(k=J;k<=Sam_N-1;k+=1<<L)
{
rPartKB=xr[k+B]*rCf[P]-xi[k+B]*iCf[P];
iPartKB=xi[k+B]*rCf[P]+xr[k+B]*iCf[P];
xr[k+B]=xr[k]-rPartKB;
xi[k+B]=xi[k]-iPartKB;
xr[k]=xr[k]+rPartKB;
xi[k]=xi[k]+iPartKB;
}
}
}
}
/***************************************************************
*名稱:ChangeOrder(float xr[],float xi[],int N)
*描述:ChangeOrder
*參數:
*返回:
****************************************************************/
void ChangeOrder(float xr[],float xi[])
{
uchar I,J,K;
float T;
double sum_xr = 0 ;
Ram_cs = 0 ;
J=Sam_N/2;//J=Sam_N/2;
for(I=1;I<=Sam_N-2;I++)//for(I=1;I<=Sam_N/2-2;I++)
{
if(I<J)
{
T=xr[I];xr[I]=xr[J];xr[J]=T;
T=xi[I];xi[I]=xi[J];xi[J]=T;
}
K=Sam_N/2;
while(J>=K)
{
J=J-K;
K=(int)(K/2+0.5);
}
J=J+K;
}
for(I=0;I<Sam_N;I++)
{
sum_xr = sum_xr + xr[I] ;
}
sum_xr = sum_xr/Sam_N ;
for(I=0;I<Sam_N;I++)
{
xr[I]=xr[I]-sum_xr ;
}
}
/***************************************************************
*名稱:Fft_out (float xr[] , float xi[])
*描述:計算頻譜分析結果
*參數:fft計算結果的實虛序列
*返回:
****************************************************************/
void Fft_out (void)
{
uchar i ;
for(i=0;i<Sam_N/2;i=i+1)
{
w[i]=sqrt(xr[i]*xr[i]+xi[i]*xi[i]);
}
}
/***************************************************************
*名稱:showsine (void)
*描述:顯示采樣的結果,采64個點但顯示256點
*參數:xr_temp[]顯示數組,N_temp數組元素個數,
start_add圖形開始的x地址,last上次顯示最后一個元素
*返回:
****************************************************************/
void showsine (uchar xr_temp[],uchar N_temp,uchar start_add,uchar last)
{
uchar i ;
WriteD(start_add,xr_temp[1]/2);
vector(start_add-1,last/2,xr_temp[1]/2);
for(i=2;i<N_temp;i++)
{
WriteD(i-1+start_add,xr_temp[i]/2);
vector(i-2+start_add,xr_temp[i-1]/2,xr_temp[i]/2);
}
}
void main()
{
uchar flag=0,temp[32] ,temp_1,temp_2;
uchar i,j ;
Ram_cs = 1 ;//轉向對液晶操作
lcd_a0 = 0 ;
lcd_wr = 1 ;
initall() ;
do{
initram_1();
Adc_work() ;
for(i=0;i<32;i++)temp[i]=xr[i];
temp_1=temp[31];
WriteD(10,temp[0]/2);
showsine(temp,32,11,temp[0]);
lcd_a0 = 1 ;//轉向對ram操作
lcd_wr = 1 ;
Ram_cs = 0 ;
for(i=32;i<64;i++)
temp[i-32]=xr[i];
temp_2=temp[31];
Ram_cs = 1 ;//轉向對液晶操作
lcd_a0 = 0 ;
lcd_wr = 1 ;
showsine(temp,32,42,temp_1);
lcd_a0 = 1 ;//轉向對ram操作
lcd_wr = 1 ;
Ram_cs = 0 ;
for(i=64;i<96;i++)
temp[i-64]=xr[i];
temp_1=temp[31];
Ram_cs = 1 ;//轉向對液晶操作
lcd_a0 = 0 ;
lcd_wr = 1 ;
showsine(temp,32,73,temp_2);
lcd_a0 = 1 ;//轉向對ram操作
lcd_wr = 1 ;
Ram_cs = 0 ;
for(i=96;i<128;i++)
temp[i-96]=xr[i];
Ram_cs = 1 ;//轉向對液晶操作
lcd_a0 = 0 ;
lcd_wr = 1 ;
showsine(temp,32,104,temp_1);
lcd_a0 = 1 ;//轉向對ram操作
lcd_wr = 1 ;
Ram_cs = 0 ;
Fft() ;
Fft_out() ;
for(i=0;i<32;i++)temp[i]=w[i]/160;
Ram_cs = 1 ;
lcd_a0 = 0 ;
lcd_wr = 1 ;
pinpu(temp,32,25) ;
for(i=0;i<Sam_N;i++)
xi[i] = 0 ;
}while(1) ;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -