📄 mainc.lst
字号:
223 2 wei[1]= (qq-wei[0]*10000)/1000;
224 2 wei[2]= (qq-wei[0]*10000-wei[1]*1000)/100;
225 2 wei[3]= (qq-wei[0]*10000-wei[1]*1000-wei[2]*100)/10;
226 2 wei[4]= (qq-wei[0]*10000-wei[1]*1000-wei[2]*100-wei[3]*10);
227 2
228 2 if(wei[0]!=0) lcd_disp_text(5,pp,wei[0]+0x10);
229 2 if((wei[1]||wei[0])!=0) lcd_disp_text(6,pp,wei[1]+0x10);
230 2 if((wei[2]||wei[1]||wei[0])!=0) lcd_disp_text(7,pp,wei[2]+0x10);
231 2 if((wei[3]||wei[2]||wei[1]||wei[0])!=0) lcd_disp_text(8,pp,wei[3]+0x10);
232 2 lcd_disp_text(9,pp,wei[4]+0x10);
233 2 }
234 1
235 1 else if(z==1){
236 2 woo[0]= qq/100;
237 2 woo[1]=(qq-woo[0]*100)/10;
238 2 woo[2]=qq-woo[0]*100-woo[1]*10;
239 2 woo[3]='.';
240 2 woo[4]=(qq-woo[0]*100-woo[1]*10-woo[2])*10;
C51 COMPILER V7.06 MAINC 09/06/2007 21:49:07 PAGE 5
241 2 woo[5]=(qq-woo[0]*100-woo[1]*10-woo[2]-woo[4]*0.1)*100;
242 2 woo[6]=(qq-woo[0]*100-woo[1]*10-woo[2]-woo[4]*0.1-woo[5]*0.01)*1000;
243 2 woo[7]=(qq-woo[0]*100-woo[1]*10-woo[2]-woo[4]*0.1-woo[5]*0.01-woo[6]*0.001)*10000;
244 2
245 2 if(woo[0]!=0) lcd_disp_text(5,pp,woo[0]+0x10);
246 2 if(woo[0]||woo[1]!=0) lcd_disp_text(6,pp,woo[1]+0x10);
247 2 lcd_disp_text(7,pp,woo[2]+0x10);
248 2 lcd_disp_string(8,pp,".",1);
249 2 lcd_disp_text(9,pp,woo[4]+0x10);
250 2 lcd_disp_text(10,pp,woo[5]+0x10);
251 2 lcd_disp_text(11,pp,woo[6]+0x10);
252 2 lcd_disp_text(12,pp,woo[7]+0x10);
253 2
254 2 }
255 1 else if(z==2){
256 2 poo[0]= qq/10000;
257 2 poo[1]= (qq-poo[0]*10000)/1000;
258 2 poo[2]= (qq-poo[0]*10000-poo[1]*1000)/100;
259 2 poo[3]= (qq-poo[0]*10000-poo[1]*1000-poo[2]*100)/10;
260 2 poo[4]= (qq-poo[0]*10000-poo[1]*1000-poo[2]*100-poo[3]*10);
261 2
262 2 if(poo[0]!=0) lcd_disp_text(3,pp,poo[0]+0x10);
263 2 if((poo[1]||poo[0])!=0) lcd_disp_text(4,pp,poo[1]+0x10);
264 2 if((poo[2]||poo[1]||poo[0])!=0) lcd_disp_text(5,pp,poo[2]+0x10);
265 2 if((poo[3]||poo[2]||poo[1]||wei[0])!=0) lcd_disp_text(6,pp,poo[3]+0x10);
266 2 lcd_disp_text(7,pp,poo[4]+0x10);
267 2 }
268 1 else if (z==3){
269 2 goo[0]= qq/100;
270 2 goo[1]=(qq-goo[0]*100)/10;
271 2 goo[2]=qq-goo[0]*100-goo[1]*10;
272 2 goo[3]='.';
273 2 goo[4]=(qq-goo[0]*100-goo[1]*10-goo[2])*10;
274 2 goo[5]=(qq-goo[0]*100-goo[1]*10-goo[2]-goo[4]*0.1)*100;
275 2 goo[6]=(qq-goo[0]*100-goo[1]*10-goo[2]-goo[4]*0.1-goo[5]*0.01)*1000;
276 2 goo[7]=(qq-goo[0]*100-goo[1]*10-goo[2]-goo[4]*0.1-goo[5]*0.01-goo[6]*0.001)*10000;
277 2
278 2
279 2 if(goo[0]!=0) lcd_disp_text(8,pp,goo[0]+0x10);
280 2 if(goo[0]||goo[1]!=0) lcd_disp_text(9,pp,goo[1]+0x10);
281 2 lcd_disp_text(10,pp,goo[2]+0x10);
282 2 lcd_disp_string(11,pp,".",1);
283 2 lcd_disp_text(12,pp,goo[4]+0x10);
284 2 lcd_disp_text(13,pp,goo[5]+0x10);
285 2 lcd_disp_text(14,pp,goo[6]+0x10);
286 2 lcd_disp_text(15,pp,goo[7]+0x10);
287 2 }
288 1 }
289
290
291 /******************** 主函数 ********************/
292 void main ( void ) {
293 1 unsigned char s,n,j,k,v,p,q,m,hh,dd;
294 1 unsigned int i,r,Number,index_Number,ff,NN,abc;
295 1
296 1 unsigned int xdata adresult[1024],index_Maxf[50];
297 1
298 1 float xdata MM,ram_v_m[1024],ram_v_I[1024],fr_v[1024],fi_v[1024],data_MaxPow[50],data_Maxf[50],P_Sub[5
-0],abcd[50], aaa[50];
299 1 float sum_temp,PP,KK,n_Szd,P_Sum,Time;
300 1
301 1 bit zq_Flag;
C51 COMPILER V7.06 MAINC 09/06/2007 21:49:07 PAGE 6
302 1 SP = 0X80;
303 1 WDTCN = 0XDE; //禁止看门狗
304 1 WDTCN = 0XAD;
305 1
306 1 PortInitialization (); // 初始化端口
307 1 ExternalClock (); // 起振外部时钟,使它成为系统时钟
308 1 ExternIntInit();
309 1
310 1 ADCInit(); //ADC0初始化
311 1 Timer3Init();
312 1 EA = 1;
313 1 TMR3CN |= 0X04;
314 1
315 1
316 1 BC7281Init();//键盘初始化
317 1
318 1 chuxian(); ////////// 显示欢迎使用
319 1 screen(); ///初始液晶显示
320 1
321 1 s=1;
322 1 n=1;
323 1 p=0;
324 1 q=0;
325 1 m=0;
326 1 r=0;
327 1 ff=4;
328 1 dd=0;
329 1 while(1){
330 2 if(key_flag == 1){
331 3
332 3 while(key_flag) key_flag = 0; // 将数据读入,并加延时防抖动
333 3 for(i=0;i<250;i++) { Delay(120);}
334 3
335 3 Write_7281(0x13 | 0x80 );
336 3 key_value = Read_7281();
337 3 /////////////////////////////////////////////
338 3 if(key_value==0x03){
339 4 s=1;
340 4 n=1;
341 4 p=0;
342 4 q=0;
343 4 m=0;
344 4 r=0;
345 4 ff=4;
346 4 dd=0;
347 4 screen(); ///初始液晶显示
348 4 }
349 3 /////////////////////////////////////////////////
350 3
351 3 else if (key_value==0x02) ff=1; //////20HZ档位设定
352 3
353 3 /////////////////////////////////////////////////
354 3
355 3 else if (key_value==0x0b) {ff=1;dd=1;}/////////////失真度显示设置
356 3
357 3 /////////////////////////////////////////////////
358 3
359 3 else if(key_value==0x0c) { //运行键
360 4 n=1;
361 4 while(n){
362 5 if(ff==4){Number=256;index_Number=8;}
363 5 else {Number=1024;index_Number=10;}
C51 COMPILER V7.06 MAINC 09/06/2007 21:49:07 PAGE 7
364 5 AMX0SL =P2&0x07;
365 5 for(i=0;i< Number;i++){
366 6 AD0INT = 0; //AD中断标志清0
367 6 AD0BUSY = 1; //启动AD
368 6 while(AD0INT ==0); //等待转换完毕
369 6 adresult[i] = ADC0H * 0X100 + ADC0L;
370 6 for(j=0;j<12;j++) ;
371 6 }
372 5
373 5 for(i=0;i<Number;i++)
374 5 {
375 6 ram_v_I[i]=0.0;
376 6 ram_v_m[i]=adresult[i];
377 6 }
378 5 /////////根据P口判断放大倍数
379 5 PP=0;
380 5 if(P2==1) KK=10;
381 5 else if (P2==0) KK=5;
382 5 else if (P2==2) KK=1;
383 5 else if (P2==6) KK=0.2;
384 5 //////////////////////////
385 5 sum_temp=0;
386 5 for(i=0;i<Number;i++)
387 5 fr_v[i]=2.48*adresult[i]/4096/KK;//数字量转换成模拟量
388 5 for(i=0;i<Number;i++)
389 5 sum_temp=sum_temp+fr_v[i]/Number; //求平均
390 5 for(i=0;i<Number;i++)
391 5 fr_v[i]=fr_v[i]-sum_temp;//降低直流电流
392 5 for(i=0;i<Number;i++)
393 5 PP=PP+pow(fr_v[i],2)/50.0/Number*1000*1.2;
394 5 ///////////////////////////
395 5 sum_temp=0;
396 5 for(i=0;i<Number;i++)
397 5 sum_temp=sum_temp+ram_v_m[i]/Number; //求平均
398 5 for(i=0;i<Number;i++)
399 5 ram_v_m[i]=ram_v_m[i]-sum_temp;//降低直流电流
400 5 sum_temp=0;
401 5 for(i=0;i<Number;i++)
402 5 sum_temp=MAXIMUM(sum_temp,abs(ram_v_m[i]));//求最大值
403 5 for(i=0;i<Number;i++)
404 5 ram_v_m[i]=ram_v_m[i]/sum_temp; //数据归一化
405 5 //////////开始FFT变换//////////////////
406 5 kkfft(ram_v_m,ram_v_I,Number,index_Number,fr_v,fi_v,0,1);
407 5 for (i=0; i<=Number-1; i++)
408 5 ram_v_m[i]=pow(fr_v[i],2)+pow(fi_v[i],2); //功率谱
409 5 ////////////FFT变换后开始找频点////////////
410 5 hh=0;
411 5 for(i=0;i<20;i++) {data_MaxPow[i]=0;data_Maxf[i]=0;index_Maxf[i]=0;}//清零
412 5 for(i=0;i<Number/2;i++)
413 5 {
414 6 if(ram_v_m[i+1]>ram_v_m[i]&&ram_v_m[i+1]>ram_v_m[i+2])//
415 6 {
416 7 if(ff==1)//1204点 20H档位
417 7 {
418 8 if(ram_v_m[i+1]>3000)
419 8 {
420 9 data_MaxPow[hh]=ram_v_m[i+1];//存储频点功率值
421 9 index_Maxf[hh]=i+1; //存储频点索引值
422 9 data_Maxf[hh]=(float)(i+1)*20.07/Number*1000;//存储频点值
423 9 hh=hh+1;
424 9 }
425 8 }else if(ff==4)//256点 20H档位
C51 COMPILER V7.06 MAINC 09/06/2007 21:49:07 PAGE 8
426 7 {
427 8 if(ram_v_m[i+1]>200)
428 8 {
429 9 data_MaxPow[hh]=ram_v_m[i+1];//存储频点功率值
430 9 index_Maxf[hh]=i+1; //存储频点索引值
431 9 data_Maxf[hh]=(float)(i+1)*20.07/Number*1000;//存储频点值
432 9 hh=hh+1;
433 9 }
434 8 }
435 7 }
436 6 }
437 5
438 5
439 5
440 5
441 5 /////////根据各频点求各频点功率分量///////////////
442 5 sum_temp=0;
443 5 for(i=0;i<20;i++) P_Sub[i]=0;//清零
444 5 for(i=0;i<hh;i++)
445 5 sum_temp=sum_temp+ram_v_m[index_Maxf[i]];//各频点功率总和
446 5 for(i=0;i<hh;i++)
447 5 P_Sub[i]=PP*ram_v_m[index_Maxf[i]]/sum_temp*0.97;//各频点功率分量
448 5 sum_temp=0;
449 5
450 5
451 5 ///////根据频点求失真度:只针对单点正弦信号/////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -