⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 math.c

📁 基于HMS7202的波形发生器源程序
💻 C
字号:

 void ratio_convert(const unsigned int ratio,char *p)
 {
 	int ratio_data;
 	ratio_data = (int)(0.0092736*ratio*ratio*ratio-1.4211*ratio*ratio+27.83*ratio+3079.2);
 	*p++ = ratio_data & 0xff;
 	*p = (ratio_data>>8) & 0xff;
 }
 
 void freq_convert(const unsigned int fFreq,char *p)
 {
 	int i;

 	unsigned int hi=0,lo=0,bjs,cha;
 	
 	bjs = fFreq;
 	
 	//计算商的高17位
 	for(i=0;i<17;i++)
 	{
        if(bjs >= 300000000)
    	{
    		cha = bjs - 300000000;
    		hi = (hi<<1) +1;
    	}
    	else
    	{
    		cha = bjs;
    		hi = (hi<<1) +0;
    	}
    	bjs = (cha<<1) + 0;
    	
    }
    
    //计算商的低32位
    for(i=0;i<32;i++)
    {
    	if(bjs >= 300000000)
    	{
    		cha = bjs - 300000000;
    		lo = (lo<<1) +1;
    	}
    	else
    	{
    		cha = bjs;
    		lo = (lo<<1) +0;
    	}
    	bjs = (cha<<1) + 0;
    }

 	
 	for(i=0;i<4;i++)
 	{
 		*p++ = (lo>>i*8)&0xff;
 	}
 	
 	for(i=0;i<2;i++)
 		*p++ = (hi>>i*8)&0xff;
 }
 
 
 void amp_convert(const unsigned int fFreq, const unsigned int iAmpl, char *p)
 {
 	float xv[4]=
 	{ 0.000000000032063, -0.0000001098, 0.0023569, 2207.2 };
 	float xs[4]=
 	{ -0.0000000030361, 0.000019911, 0.53307, -31.974 };
 	float fc1[8][4]=
 	{
		{-0.000063782, 0.0019287, -0.006831, 0.99580},
		{0.0000277, -0.00057448, 0.020849, 0.72486},
		{-0.00010457, 0.0076912, -0.17184, 2.1312},
    	{-0.000084561, 0.0076168, -0.21318, 2.7505},
		{0.00015724, -0.019397, 0.77797, -9.1286},
		{0.00015724, -0.024114, 1.2131, -19.003},
    	{-0.00012724, 0.026687, -1.8187 ,41.420 },
    	{-0.00012373, 0.026033,-1.7921 ,41.174 }
 	};

	float y,yy,Ia,aaa,tFa;
	int i,j,temp,Y,H,M;
	
    Ia = fFreq / 100000.0;
    i = Ia / 10;
    j=i/10;
	tFa = iAmpl;
	j=0;

    if (i<8) j=0;
    if ((i<10)&&((i==8)||(i>8)))   j=1;
    if ((i<20)&&((i==10)||(i>10))) j=2;
    if ((i<30)&&((i==20)||(i>20))) j=3;
    if ((i<60)&&((i==30)||(i>30))) j=4;
    if ((i<81)&&((i==60)||(i>60))) j=5;
    

  	y=fc1[j][0]*i*i*i+fc1[j][1]*i*i+fc1[j][2]*i+fc1[j][3];

    if (i>10)
      {
        if( tFa>10000.0 )  tFa=10000.0;
        if( tFa<20.0 )  tFa=20.0;
      }
      else
      {
        if( tFa>20000.0 )  tFa=20000.0;
        if( tFa<20.0 )  tFa=20.0;
      }

    if (tFa>5000.0)
      {
        aaa=0.25;
        temp=4;
      }
    if ((tFa>1249.9)&&(tFa<5000.1))
      {
        aaa=1.0;
        temp=0;
      }
    if ((tFa>312.4)&&(tFa<1250.1))
      {
        aaa=4.0;
        temp=1;
      }
    if ((tFa>156.1)&&(tFa<312.5))
      {
        aaa=8.0;
        temp=2;
      }
    if ((tFa>19.9)&&(tFa<156.2))
      {
        aaa=32.0;
        temp=3;
	  }

      y=y*tFa*aaa*1.02;
      y=xs[0]*y*y*y+xs[1]*y*y+xs[2]*y+xs[3];
	yy=xv[0]*y*y*y+xv[1]*y*y+xv[2]*y+xv[3];
	if (y>4095) y=4095;
	if (yy>4095) yy=4095;
	Y=(int)y;
	H=(int)yy;
	M=temp;
	*p++ = H & 0xff;
	*p++ = H>>8 & 0xff;
	*p++ = Y & 0xff;
	*p++ = Y>>8 & 0xff;
	*p = M;
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -