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

📄 datachange.c

📁 在采样的基础上实现数码管显示和利用TI公司的FFT算法进行运算
💻 C
字号:

//#include "dataChange.h"
#include "AD.h"

unsigned int KeyCount=0;
//作有符号数处理
unsigned int *DataChange(int data, unsigned int *BcdCode, unsigned int n,unsigned int MaxValue)	{
	int j=0;
    unsigned int Datatemp;     
    
    if(data<0)
    {
       BcdCode[j++]='-';
       data*=-1;
    }
    else
       BcdCode[j++]='';
       
    Datatemp=((long)data*MaxValue*100+16384)>>15;           //Q15*Q0*100--->Q0格式
    data=Datatemp/10000;          
	BcdCode[j++] =data;             //百位 
	
	Datatemp=Datatemp-data*10000;          
	data=Datatemp;
	Datatemp=data/1000;                  //十位	
	BcdCode[j++] =Datatemp; 
	           
	Datatemp=data-Datatemp*1000;          
	data=Datatemp;
	Datatemp=data/100;                  //个位	
	BcdCode[j++] =Datatemp; 
		
//	if(j == 3)
	BcdCode[j++] =10;              //小数点,10表示小数点
	
	Datatemp=data-Datatemp*100;          
	data=Datatemp;
	Datatemp=data/10;                  //0.1位	
	BcdCode[j++] =Datatemp; 

    Datatemp=data-Datatemp*10;         //0.01位
    
    if(j<n)                          //0.1位精度
	{                      	
	    BcdCode[j++] =Datatemp;         //0.01位
				
	   while(j <= (n-1))	
       {             //其余填0
		       		
	 	  BcdCode[j++] = 0;
				
	   }
    }
    else
       BcdCode[j-1] +=(Datatemp>5?1:0);      //四舍五入
	return BcdCode;
}                                           //数据转换Q15转BCD码

int DataToFloat(unsigned int *BcdCode, unsigned int n,unsigned int step)   //步进将数组改成Q15保存
{
   
   int retvalue=(long)SumArray(BcdCode,n)*step>>11;
   return retvalue;
}

int SumArray(unsigned int *BcdCode,unsigned int n)
{
   int sign=1,j=0;
   int retvalue=0;
   if(BcdCode[j++]=='-')
       sign=-1;
   //百位
   while(j<4)  //整数部分
   {
     retvalue=retvalue*10+BcdCode[j++]; 
   }
   
   j++;        //略过小数点

   while(j<n)
   {
    retvalue=retvalue*10+BcdCode[j++];
 
   } 
   retvalue*=sign;
   return retvalue;
}

//将BCD转ASCII码
unsigned int *CodeChange(unsigned int *CodeIn, unsigned int *CodeOut, unsigned int n)  {
	int j = 0;
	int Hide=0;
	int HideCount=0;
	
	for(j=1; j < (n-3); j++)	
	{
	    
	    if  ( CodeOut[j]==0 && Hide==0)
	    {
		     CodeOut[j] = 0;       //0表示隐藏
		     HideCount++;
		 }
		else
		{
		     CodeOut[j] = CodeIn[j]+0x30;
		     Hide=j;
		 }
	}
	     
	
	if (Hide==0)
	{
	   CodeOut[j-1]=0x30;  // 0.显示
	   CodeOut[j-2]=CodeOut[0] ;                  //显示符号位
	}
	else
	{
	   if (HideCount!=0)
	   {    
	       CodeOut[HideCount]=CodeOut[0] ;                  //显示符号位
	       CodeOut[0]=0;
	    }
	}   
	
	CodeOut[j] = 0x2e;                                    //小数点
	
	for(j=(n-2); j < n; j++)	
		CodeOut[j] = CodeIn[j]+0x30;
	
	return CodeOut;
}

int Display_Value(int x,int y,int value,int num,int Max)
{
  unsigned int DisplayBuf[7] ;                          //6位显示     
    //显示数据

  DataChange(value, DisplayBuf, 7,Max);
  CodeChange(DisplayBuf, DisplayBuf, 7);  //格式转换
  DispData(x,y, DisplayBuf,7);         //显示数据 
  return 0;
}

⌨️ 快捷键说明

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