📄 dsp.lst
字号:
C51 COMPILER V8.02 DSP 12/05/2007 10:38:51 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DSP
OBJECT MODULE PLACED IN DSP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DSP.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "sample.h"
2 #define uchar unsigned char
3 #define uint unsigned int
4 #define FILTLEN 7
5 #define DELSTEP 7
6 #define DELGATE 50
7 unsigned int DataPos;
8 unsigned long DC_RED;
9 unsigned long DC_IRED;
10 unsigned char RED_MIN,RED_MAX;
11 unsigned char IRED_MIN,IRED_MAX;
12 xdata unsigned char SampleRed[SAMPLESIZE];
13 xdata unsigned char SampleIRed[SAMPLESIZE];
14 xdata unsigned char ProBuffer[SAMPLESIZE];
15
16 void itoa(uint i,uchar *c)
17 {
18 1 char l;
19 1 if(i>=1000)
20 1 l=3;
21 1 else if(i>=100)
22 1 l=2;
23 1 else if(i>=10)
24 1 l=1;
25 1 else
26 1 l=0;
27 1 c[l+1]=0;
28 1 while(l>=0)
29 1 {
30 2 c[l]=i%10+0x30;
31 2 i/=10;
32 2 l--;
33 2 }
34 1 }
35
36 void Filter(uchar Data[SAMPLESIZE],uchar Min,uchar Max) //均值滤波
37 {
38 1 uint i;
39 1 float t;
40 1 for (i=0;i<FILTLEN/2;i++)
41 1 {
42 2 t=Data[i];
43 2 t=(t-Min)*255/(Max-Min)+0.5;
44 2 ProBuffer[i]=(uchar)t;
45 2
46 2 t=Data[SAMPLESIZE-i-1];
47 2 t=(t-Min)*255/(Max-Min)+0.5;
48 2 ProBuffer[SAMPLESIZE-i-1]=(uchar)t;
49 2 }
50 1 for(i=FILTLEN/2;i<SAMPLESIZE-FILTLEN/2;i++)
51 1 {
52 2 t=Data[i-3]+Data[i-2]+Data[i-1]+Data[i]+Data[i+1]+Data[i+2]+Data[i+3];
53 2 t/=FILTLEN;
54 2 t=(t-Min)*255/(Max-Min)+0.5;
55 2 ProBuffer[i]=(uchar)t;
C51 COMPILER V8.02 DSP 12/05/2007 10:38:51 PAGE 2
56 2 }
57 1 }
58 void Process(uchar OriData[SAMPLESIZE],uchar * Freq,uchar * Delta)
59 {
60 1 xdata uint PeakPos[15],MinPos[15],MaxPos[15];
61 1 uint i;
62 1 float Time,DeltaTemp=0;
63 1 int t;
64 1 uchar j,Peak=0,PeakLen=0,MinValue=255,MaxValue=0;
65 1 for (i=DELSTEP;i<SAMPLESIZE;i++)
66 1 {
67 2 t=ProBuffer[i-DELSTEP]-ProBuffer[i];
68 2 if(t>DELGATE)
69 2 {
70 3 if(Peak<t)
71 3 {
72 4 Peak=t;
73 4 PeakPos[PeakLen]=i;
74 4 }
75 3 }
76 2 else if(Peak>0)
77 2 {
78 3 Peak=0;
79 3 PeakLen++;
80 3 }
81 2 }
82 1 //PeakLen--;
83 1 Time=0;
84 1 for(j=0;j<PeakLen-1;j++)
85 1 Time+=PeakPos[j+1]-PeakPos[j];
86 1 Time=12000.0/Time*(PeakLen-1)+0.5;
87 1 *Freq=(uchar)Time;
88 1 /////////////////////////////////////////////
89 1 for(j=0;j<PeakLen-1;j++)
90 1 {
91 2 MinPos[j]=0;
92 2 MaxPos[j]=0;
93 2 MinValue=255;
94 2 MaxValue=0;
95 2 for(i=PeakPos[j];i<PeakPos[j+1];i++)
96 2 {
97 3 if(ProBuffer[i]<MinValue)
98 3 {
99 4 MinValue=ProBuffer[i];
100 4 MinPos[j]=i;
101 4 }
102 3 if(ProBuffer[i]>MaxValue)
103 3 {
104 4 MaxValue=ProBuffer[i];
105 4 MaxPos[j]=i;
106 4 }
107 3 }
108 2 }
109 1 for(j=0;j<PeakLen-1;j++)
110 1 DeltaTemp+=OriData[MaxPos[j]]-OriData[MinPos[j]];
111 1 DeltaTemp=DeltaTemp/(PeakLen-1)+0.5;
112 1 *Delta=(uchar)DeltaTemp;
113 1 }
114
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.02 DSP 12/05/2007 10:38:51 PAGE 3
CODE SIZE = 1474 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 3072 90
PDATA SIZE = ---- ----
DATA SIZE = 14 40
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -