functions.c
来自「本人是刚刚毕业的学生」· C语言 代码 · 共 513 行 · 第 1/2 页
C
513 行
CHAR[1] = ' ';
CHAR[2] = '0';
CHAR[3] = 'm';
CHAR[4] = 'S';
CHAR[5] = ' ';
CHAR[6] = ' ';
CHAR[7] = ' ';
}
break;
case 2:
case 3:
if ((a>=1)&&(a<10))
{ num = (uint32)(a*1000);
CHAR[0] = (char)(num/1000 + 48);
CHAR[1] = '.';
CHAR[2] = (char)(num%1000/100 + 48);
CHAR[3] = (char)(num%100/10 + 48);
CHAR[4] = (char)(num%10/1 + 48);
CHAR[5] = 'm';
CHAR[6] = 'V';
CHAR[7] = ' ';
}
else if ((a>=10)&&(a<100))
{ num = (uint32)(a*100);
CHAR[0] = (char)(num/1000 + 48);
CHAR[1] = (char)(num%1000/100 + 48);
CHAR[2] = '.';
CHAR[3] = (char)(num%100/10 + 48);
CHAR[4] = (char)(num%10/1 + 48);
CHAR[5] = 'm';
CHAR[6] = 'V';
CHAR[7] = ' ';
}
else if ((a>=100)&&(a<1000))
{num = (uint32)(a*10);
CHAR[0] = (char)(num/1000 + 48);
CHAR[1] = (char)(num%1000/100 + 48);
CHAR[2] = (char)(num%100/10 + 48);
CHAR[3] = '.';
CHAR[4] = (char)(num%10/1 + 48);
CHAR[5] = 'm';
CHAR[6] = 'V';
CHAR[7] = ' ';
}
else if ((a>=1000)&&(a<10000))
{ num = (uint32)(a*1);
CHAR[0] = ' ';
CHAR[1] = (char)(num/1000 + 48);
CHAR[2] = '.';
CHAR[3] = (char)(num%1000/100 + 48);
CHAR[4] = (char)(num%100/10 + 48);
CHAR[5] = (char)(num%10/1 + 48);
CHAR[6] = 'V';
CHAR[7] = ' ';
}
else
{ CHAR[0] = ' ';
CHAR[1] = ' ';
CHAR[2] = ' ';
CHAR[3] = '0';
CHAR[4] = 'V';
CHAR[5] = ' ';
CHAR[6] = ' ';
CHAR[7] = ' ';
}
break;
}
}
}
uint32 SignalType(uint16 *Array,uint32 LengthOfArray)
{ uint32 i;
uint32 TypeFlag = 0;
uint32 SineUnknown = 0;
uint32 Triangle = 0;
uint32 Square = 0;
uint32 FirstData;
uint32 SecondData;
MaxMinOfArray(Array,LengthOfArray);
if (((Max - Min) <= 5) && ((Max || Min) <= 3)) /* 判断被测信号是否为直流信号 */
{return (DC_Wave); /* 被测信号为直流信号 */
}
else
{ for (i = 2; i < (uint32)(LengthOfArray * (AD_Clock / PointNumber / 11) / frequence); i++)
{FirstData = (*(Array + i - 1) - *(Array + i - 2));
SecondData = (*(Array + i) - *(Array + i - 1));
if ((FirstData > SecondData - 5) || (FirstData < SecondData + 5))
{ TypeFlag++;
if (((FirstData > 5) || (FirstData < -5)) && ((SecondData > 5) || (SecondData < -5)))
{Triangle++; /* 被测信号斜率较大,为三角波信号 */
}
else
{Square++; /* 被测信号斜率接近于零,为方波信号 */
}
}
else
{TypeFlag--;
if (FirstData > SecondData)
{SineUnknown++; /* 被测信号为未知信号 */
}
else
{SineUnknown--; /* 被测信号为正弦信号 */
}
}
}
if (TypeFlag > 0)
{ if (Triangle > Square)
{ return Triangular_Wave;
}
else
{ return Square_Wave;
}
}
else
{if ((SineUnknown >= 10) || (SineUnknown <= -10))
{return Sine_Wave;
}
else
{return Unknown_Wave;
}
}
}
}
void ADInit(uint32 ADClock, uint32 PinNumber)
{switch (PinNumber)
{case 27 :
{PINSEL1 = PINSEL1 & (~(0x03 << 22)) | (0x01 << 22); // P0.27连接到AD0.0
ADCR = (1 << 0)| //选择通道AD0.0
((Fpclk / ADClock - 1) << 8)| //转换时钟最大为4.5MHz
(0 << 16)| //BURST=0,软件控制转换操作
(0 << 17)| //CLKS=0,使用11 clock转换
(1 << 21)| //PDN=1.正常工作方式
(0 << 22)| //TEST1:0=00,正常工作模式
(0 << 24)| //START=0,先不启动ADC转换
(0 << 27); //直接启动ADC转换时,此位无效
break;
}
case 28 :
{PINSEL1 = PINSEL1 & (~(0x03 << 24)) | (0x01 << 24); // P0.28连接到AD0.1
ADCR = (1 << 1)| //选择通道AD0.1
((Fpclk / ADClock - 1) << 8)| //转换时钟最大为4.5MHz
(0 << 16)| //BURST=0,软件控制转换操作
(0 << 17)| //CLKS=0,使用11 clock转换
(1 << 21)| //PDN=1.正常工作方式
(0 << 22)| //TEST1:0=00,正常工作模式
(0 << 24)| //START=0,先不启动ADC转换
(0 << 27); //直接启动ADC转换时,此位无效
break;
}
case 29 :
{PINSEL1 = PINSEL1 & (~(0x03 << 22)) | (0x01 << 22); // P0.29连接到AD0.0
ADCR = (1 << 2)| //选择通道AD0.0
((Fpclk / ADClock - 1) << 8)| //转换时钟最大为4.5MHz
(0 << 16)| //BURST=0,软件控制转换操作
(0 << 17)| //CLKS=0,使用11 clock转换
(1 << 21)| //PDN=1.正常工作方式
(0 << 22)| //TEST1:0=00,正常工作模式
(0 << 24)| //START=0,先不启动ADC转换
(0 << 27); //直接启动ADC转换时,此位无效
break;
}
case 30 :
{PINSEL1 = PINSEL1 & (~(0x03 << 28)) | (0x01 << 28); // P0.30连接到AD0.3
ADCR = (1 << 3)| //选择通道AD0.3
((Fpclk / ADClock - 1) << 8)| //转换时钟最大为4.5MHz
(0 << 16)| //BURST=0,软件控制转换操作
(0 << 17)| //CLKS=0,使用11 clock转换
(1 << 21)| //PDN=1.正常工作方式
(0 << 22)| //TEST1:0=00,正常工作模式
(0 << 24)| //START=0,先不启动ADC转换
(0 << 27); //直接启动ADC转换时,此位无效
break;
}
}
}
uint32 AutoTimeBase(float FreqOfSignal)
{if (Auto_Flag == 1)
{if (FreqOfSignal >= 25000)
{return 50; /* 时基设为10us */
}
else if ((FreqOfSignal >= 12500) && (FreqOfSignal < 25000))
{ return 50; /* 时基设为20us */
}
else if ((FreqOfSignal >= 5000) && (FreqOfSignal < 12500))
{ return 50; /* 时基设为50us */
}
else if ((FreqOfSignal >= 2500) && (FreqOfSignal < 5000))
{ return 50; /* 时基设为100us */
}
else if ((FreqOfSignal >= 1250) && (FreqOfSignal < 2500))
{ return 50; /* 时基设为200us */
}
else
{ return 50; /* 时基设为500us */
}
}
else
{ return 50;
}
}float ChangeRange(float ab)
{float PI = 3.14159;
if (ab >= 0)
{ ab -= (int32)(ab / (2 * PI)) * (2 * PI);
}
else
{ ab += (-(int32)(ab / (2 * PI)) + 1) * (2 * PI);
}
if ((ab > PI / 2) && (ab <= PI * 3 / 2))
{ ab = PI - ab;
}
else if ((ab > PI * 3 / 2) && (ab <= 2 * PI))
{ ab -= PI * 2;
}
else
{ ab = ab;
}
ab = ab - (ab * ab * ab / 6) + (ab * ab * ab * ab * ab / 120);
return ab;
}
void SineInsert(INT16U *ShuZu, uint32 length)
{ uint32 i = 0;
uint32 j = 0;
uint32 Start = 0;
uint32 m = 0;
uint32 M = 0;
float k = 0;
float temp = 0;
float PI = 3.141592;
{ if (frequence < 50000)
{ k = 10 - ((uint32)frequence) / 500 * 0.1;
}
else if (frequence < 75000)
{ k = 8 - (uint32)(frequence - 50000) / 1000 * 0.32;
}
else if (frequence < 100000)
{ k = 4;
}
else
{ k = 0.1;
}
}
for (j = 0; j < PointNumber; j++)
{ a = 0;
for (i = 0; i < length; i++)
{temp = (PI * 1000000 / 50) * ((j + 160) / (10 * (float)frequence) - i * 50.0 / 1000000);
if (temp == 0)
{ a += (int32)(*(ShuZu + i));
}
else
{a += (int32)(*(ShuZu + i)) * ChangeRange(temp) / temp;
}
}
ADData0[j] = (INT16U)a;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?