Weight_Bed/main.c

139 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) 2011 ITE Tech. Inc. All Rights Reserved.
*/
/**
* @author Jim Tan
* @version 1.0
*/
#include "H/Function_Init.H"
#define STANDAED_K 0.069849
#define Maxsize 3
/**************************************************************
传感器相关参数输入
#define Max_Weight 300000 //最大工作重量单位 g
#define Sensitivity 2 //灵敏度 mv/v
#define Ex_U 5 //激励电压,adc默认选择内部vcc为激励 v
#define ADC_PGA 128 //ADC芯片运放倍数
#define ADC_MAX_NUM 7FFFFF //ADC输出范围
STANDAED_K = (Ex_U/2/ADC_PGA/ADC_MAX_NUM) /(Sensitivity*Ex_U)*Max_Weight //为了避免精度丢失,请用计算器计算再手动输入
***************************************************************/
bit Key0_flag = 0;//全局变量定义在Function_Init.H,这里赋初值
bit Key1_flag = 0;
/////////////中值滤波3
long Bubble_Sort_3(long* Data)
{
uchar i,j;
long temp;
for(i=0;i<2;i++)
{
for(j=0;j<2-i;j++)
{
if(Data[j]>Data[j+1])
{
temp = Data[j];
Data[j] = Data[j+1];
Data[j+1] = temp;
}
}
}
return Data[1];
}
void main(void)
{
//////////////该部分代码为采集ADC读数初始值 原始数据
// long read_buff[4];
//
// IO_Init();
// Uart_Test();
//
// CS1237_Init_all();//ADC初始化
// Delay_ms(300);//等待ADC芯片复位
// CS1237_Config_all();//ADC配置
//
// while(1)
// {
// for(i=0;i<4;i++)
// {
// send_buff[i] = zero_buff[i];
// }
// UART_SendAll(send_buff);
// }
//////////////该部分代码为采集并观察4路传感器的读数
long send_buff[4];
long zero_buff[4];
long data_buff[4];
long queue[4][3];
int queue_p;
float k = STANDAED_K; //传感器系数
long uart_buff[4]=0;
// uchar function_ret = 0;
// long zero_sort[9];
uchar i,j;
uchar a = 20; //一阶滤波系数1-100越小越平滑灵敏度越低 设置为50 1s就可以接近到千分之999 设置为20需要等待3s左右才能接近千分之999
IO_Init(); //IO初始化,先将默认的所有未使用引脚到设置成强推挽输出,
Uart_Test(); //串口初始化
Timer_Test(); //定时器初始化
CS1237_Init_all();//ADC初始化
Delay_ms(300);//等待ADC芯片建立时间
CS1237_Config_all();//ADC配置
for(i=0;i<4;i++)
{
zero_buff[i] = Read_CS1237_all(i);
send_buff[i] = zero_buff[i];
}
for(i=0;i<4;i++)
{
for(j=0;j<Maxsize;j++)
{
queue[i][j] = Read_CS1237_all(i);
}
}
while(1)
{
for(i=0;i<4;i++)
{
queue[i][queue_p] = Read_CS1237_all(i);
data_buff[i] = Bubble_Sort_3(queue[i]);
}
queue_p = (queue_p+1)%3;
for(i=0;i<4;i++)
{
send_buff[i] = ((100-a)*send_buff[i] + a*data_buff[i])/100; //一阶滤波
}
if(Key0_flag)//去皮长按3s
{
Key0_flag=0;
for(i=0;i<4;i++)
{
zero_buff[i] = send_buff[i];
}
}
for(i=0;i<4;i++)
{
uart_buff[i] =(send_buff[i]-zero_buff[i])*k;
UART_Send_VOFA(uart_buff[i]);
if(i<3)
UART_SendByte(44);//','逗号分隔
}
UART_SendByte(10);//'\r'加回车符
UART_SendByte(13);//'\n'加换行符
}
}