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

📄 example.c

📁 功率计
💻 C
字号:
#include "..\includes.h"


// MAX186控制字节配置:通道0,单极性,差分输入,外部时钟模式
#define     MAX186_CONTROL_BYTE     0x8B
#define     FILTER_COEFFICIENT      15//入:5,反;15
INT8U prompt[32];
INT8S DigitalLed[8];

void main()
{
      
      INT16U cnt;
      INT16U sample_value;
      INT32U voltage;
	INT32U power;
	INT16U value;
      Delay(60000);
      Delay(60000);
      Delay(60000);
      SPI_Init();
      SPI_INT_DIS();
	Digital_LED_Init();

//	sprintf( DigitalLed, "%5d", (INT16U)Led);
//      Digital_LED_DispStr( DigitalLed );
      CommInit( UART0, 9600 );
      CommSendString( UART0, "System init complete\n" );
	 // Digital_LED_DispTest( );
	 // 	while(1);
	 
	 //取得value的初值
	SPI_CS = 0;
      SPI_SendByte(MAX186_CONTROL_BYTE);
      sample_value = SPI_SendByte(0);
      sample_value <<= 8;
      sample_value |= SPI_SendByte(MAX186_CONTROL_BYTE);
      sample_value >>=3;
      value = sample_value;
      SPI_SendByte(0);
      SPI_SendByte(0);
      SPI_CS = 1;
	sprintf( prompt, "SAM:%u\n", (INT16U)value ); //输出电压值,单位mv
      CommSendString(UART0,prompt); 
	 
      while(1)
      {
		voltage = 0; 
   
            SPI_CS = 0;
            SPI_SendByte(MAX186_CONTROL_BYTE);

            for( cnt=0; cnt<8192; cnt++ )
            {
                  sample_value = SPI_SendByte(0);
                  sample_value <<= 8;
                  sample_value |= SPI_SendByte(MAX186_CONTROL_BYTE);
                  sample_value >>=3; 
                  
                  //限幅滤波
                  if( abs(sample_value-value)<FILTER_COEFFICIENT)
                  {
                        value = value;
                  }
                  else
                  {
                        value = sample_value;
                  }
                  
                  //value = (100-FILTER_COEFFICIENT)*value + FILTER_COEFFICIENT*sample_value; //一阶滞后滤波

                  voltage += value; 
            }
            SPI_SendByte(0);
            SPI_SendByte(0);
            SPI_CS = 1;


            voltage = voltage>>13;
		power = voltage*voltage/24;	  //入
		if(power>9999)// 大于9999时为9999
		{
		      power = 9999;
		}
	     // power = voltage*voltage/440;   //反

            sprintf( DigitalLed, "%4u", (INT16U)power);//LED功率值显示,单位W
            Digital_LED_DispStr( DigitalLed );
            
          //  sprintf( prompt, "---V:%u\n", (INT16U)voltage ); //输出电压值,单位mv
	     // CommSendString(UART0,prompt);
		//sprintf( prompt, "---P:%u\n", (INT16U)power );//输出功率值 ,单位W
	     // CommSendString(UART0,prompt);
      }
}

⌨️ 快捷键说明

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