📄 example.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 + -