📄 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 + -