📄 2.c
字号:
#include <msp430x14x.h>
#include "lcd.h"
#include "init.h"
#include "ADS1240.h"
#include "uart.h"
#include "24C64.h"
#include "Key.h"
//#define AD_Data_num 4
#define Mode_num1 0 //MODE 0显示压力值
#define Mode_num2 1 //MODE 1校准模式
#define Mode_num3 2
void reset_AD_reg(void);
void mode_check(void);
void adc_init(void);
void LCD_Display(unsigned char Cursor_Addr,unsigned char *LCD_data);
void Password_check(void);
unsigned char get_key_bar(unsigned char *out_key_bar);
void Save_key_data(unsigned long int *data,unsigned int EE_addr);
void rest_LCD_data(void);
void Open_AD_Sampling(void);
void Close_AD_Sampling(void);
void Open_WatchDog(void);
void Close_WatchDog(void);
void Show_AD_Data(void);
void Save_AD_Data(unsigned long int*data,unsigned int EE_addr);
void writetoreg(uchar ad_reg);
extern void ADS1240SendByte(unsigned char Byte);
extern unsigned char send_buffer1[30];
extern unsigned int send_num_data;
extern unsigned char re_buffer1[30];
extern unsigned int receive_num_data;
//========================================================================================
//压力变量变量
//========================================================================================
float Resistance; //时时测量的电阻值
//========================================================================================
//AD变量
//========================================================================================
unsigned char AD_Sampling_num;
float Press_Data;
//========================================================================================
//LCD变量
//========================================================================================
unsigned char Mode;
unsigned char key_data;
unsigned long dataa;
union ulonguintuchar {uchar dat4[4];} ad0;
unsigned char ad_flag;
unsigned long ad1240,ad1240_test[10],ad1240_test1[10];
float adf;
unsigned char AD1240_Reg_Val[15];
unsigned char AD_num=0;
unsigned char WDT_num;
unsigned long int ee_data;
unsigned char KeyDown_flag;
unsigned char DRDY_low_flag,intdata;
//========================================================================================
//LCD变量
//========================================================================================
unsigned char LCD_Cursor_Addr;
unsigned char password[6]={0,1,2,3,4,5};
unsigned char LCD_Key_bar[6]={0,0,0,0,0,0};
unsigned char password_ok_flag;
unsigned char LCD_NUM=6;
//========================================================================================
//校正变量
//========================================================================================
unsigned char Press_Adjust_state;
unsigned char PGA_Plus;
unsigned long Zero_data,Most_data;
unsigned long Zero_Sampling_AD,Most_Sampling_AD;
unsigned char Most_decimal_num;
unsigned char line_modify_num;
unsigned char Most_Flag;
unsigned long int Standard_Press[100],Measure_Press[100];
float line_modify_k[100],Zero_Most_k;
float Initial_Resistance;
unsigned char Zero_modify_ok;
unsigned char Most_modify_ok;
unsigned char line_modify_ok;
unsigned char Zero_Most_Revise_Flag;
//========================================================================================
//函数:long ADS1240ReadData(int fWaitForDataReady)
//功能:读取AD1240积存器
//变量:Byte
//返回:无
//========================================================================================
void Delay(uint value)
{ while(value--);
}
//========================================================================================
//函数:long ADS1240ReadData(int fWaitForDataReady)
//功能:读取AD1240积存器
//变量:Byte
//返回:无
//========================================================================================
ulong Hex_to_BCD(ulong data)
{
uchar i;
ulong data1[10],data2=0,data3,data4;
data3=data;
data4=0;
data2=0;
for(i=0;i<8;i++)
{
data2=data3/10;
data1[i]=data3-data2*10;
data3=data2;
}
data4=data1[7];
for(i=8;i>0;i--)
{
data4=(data4<<4)+data1[i-1];
}
return data4;
}
//========================================================================================
//函数:long ADS1240ReadData(int fWaitForDataReady)
//功能:读取AD1240积存器
//变量:Byte
//返回:无
//========================================================================================
unsigned long AD_Data_Manage(unsigned long *data,unsigned char num)
{
unsigned char i;
unsigned long max_data,min_data,ad_data=0;
unsigned long *data1;
for(i=0;i<num;i++)
{
}
data1=data;
max_data=data1[0];
min_data=data1[0];
for(i=0;i<num;i++)
{
ad_data=ad_data+data[i];
if(data[i]>max_data) max_data=data1[i];
else
if(data[i]<min_data) min_data=data1[i];
}
ad_data=ad_data-max_data-min_data;
ad_data=(unsigned long)(ad_data/(num-2));
return ad_data;
}
//========================================================================================
//函数:long ADS1240ReadData(int fWaitForDataReady)
//功能:读取AD1240积存器
//变量:Byte
//返回:无
//========================================================================================
int main(void)
{
unsigned char i,j;
unsigned char char_bar[4];
unsigned int bar1;
unsigned long int bar2;
float k,press;
//unsigned char ee_data1[2];
//Open_AD_Power();
WDTCTL=WDTPW+WDTHOLD;//Stop WDT
//BCSCTL1 |= DIVA_1; // ACLK/4
//========================================================================================
//读取EE中校正参数
//========================================================================================
Press_Adjust_state=ReadWord(Adjust_state);
// Press_Adjust_state=2;
if(Press_Adjust_state==0x01)
{
PGA_Plus=ReadWord(AD_PGA_Plus);
PGA_Plus=ADS1240_GAIN_8;
//=============================================
//读取零点校正值
//=============================================
for(i=0;i<4;i++)
{
char_bar[i]=ReadWord(Press_Zero+i);
// Zero_data=ReadWord(Press_Zero);
}
Zero_data=0;
Zero_data=(Zero_data+(unsigned long)char_bar[3])<<8;
Zero_data=(Zero_data+(unsigned long)char_bar[2])<<8;
Zero_data=(Zero_data+(unsigned long)char_bar[1])<<8;
Zero_data=(Zero_data+(unsigned long)char_bar[0]);
for(i=0;i<4;i++)
{
char_bar[i]=ReadWord(Press_Zero_Sampling_AD+i);
}
Zero_Sampling_AD=0;
Zero_Sampling_AD=(Zero_Sampling_AD+(unsigned long)char_bar[3])<<8;
Zero_Sampling_AD=(Zero_Sampling_AD+(unsigned long)char_bar[2])<<8;
Zero_Sampling_AD=(Zero_Sampling_AD+(unsigned long)char_bar[1])<<8;
Zero_Sampling_AD=(Zero_Sampling_AD+(unsigned long)char_bar[0]);
//Initial_Resistance=(float)Zero_Sampling_AD/16;
//Initial_Resistance=Initial_Resistance*3000;
// Initial_Resistance=Initial_Resistance/16777216;
//=============================================
//读取满程校正值
//=============================================
for(i=0;i<4;i++)
{
char_bar[i]=ReadWord(Press_Most+i);
// Zero_data=ReadWord(Press_Zero);
}
Most_data=0;
Most_data=(Most_data+(unsigned long)char_bar[3])<<8;
Most_data=(Most_data+(unsigned long)char_bar[2])<<8;
Most_data=(Most_data+(unsigned long)char_bar[1])<<8;
Most_data=(Most_data+(unsigned long)char_bar[0]);
for(i=0;i<4;i++)
{
char_bar[i]=ReadWord(Press_Most_Sampling_AD+i);
}
Most_Sampling_AD=0;
Most_Sampling_AD=(Most_Sampling_AD+(unsigned long)char_bar[3])<<8;
Most_Sampling_AD=(Most_Sampling_AD+(unsigned long)char_bar[2])<<8;
Most_Sampling_AD=(Most_Sampling_AD+(unsigned long)char_bar[1])<<8;
Most_Sampling_AD=(Most_Sampling_AD+(unsigned long)char_bar[0]);
//k=((float)(Most_Sampling_AD-Zero_Sampling_AD))/16;
//k=k*3000;
// k=k/16777216;
//Zero_Most_k=(Most_data-Zero_data)/k;
// Zero_Most_Revise_Flag=1;
//=============================================
//读取满程校正值
//=============================================
Most_decimal_num=ReadWord(Press_Most_decimal);
//=============================================
//读取线性校正值数量
//=============================================
line_modify_num=ReadWord(Press_line_modify_num);
//=============================================
//读取线性校正值
//=============================================
for(i=0;i<line_modify_num;i++)
{
for(j=0;j<4;j++)
{
char_bar[j]=ReadWord(Press_Standard+i*8+j);
// Zero_data=ReadWord(Press_Zero);
}
Standard_Press[i]=0;
Standard_Press[i]=(Standard_Press[i]+(unsigned long)char_bar[3])<<8;
Standard_Press[i]=(Standard_Press[i]+(unsigned long)char_bar[2])<<8;
Standard_Press[i]=(Standard_Press[i]+(unsigned long)char_bar[1])<<8;
Standard_Press[i]=(Standard_Press[i]+(unsigned long)char_bar[0]);
for(j=0;j<4;j++)
{
char_bar[j]=ReadWord(Press_Measure+i*8+j);
// Zero_data=ReadWord(Press_Zero);
}
Measure_Press[i]=0;
Measure_Press[i]=(Measure_Press[i]+(unsigned long)char_bar[3])<<8;
Measure_Press[i]=(Measure_Press[i]+(unsigned long)char_bar[2])<<8;
Measure_Press[i]=(Measure_Press[i]+(unsigned long)char_bar[1])<<8;
Measure_Press[i]=(Measure_Press[i]+(unsigned long)char_bar[0]);
}
Most_Flag=ReadWord(Press_Most_Flag);
}
else
{//各参数的默认值
PGA_Plus=ADS1240_GAIN_8;
Zero_data=0x00;
Most_data=0xbb8;//3000
Most_decimal_num=0x04;
line_modify_num=0x00;
Most_Flag=0x00;
}
//========================================================================================
//给AD初始化参数付值
//========================================================================================
AD1240_Reg_Val[0]=0;//ADS1240_GAIN_32;//PGA_Plus;//SETUP
AD1240_Reg_Val[1]=ADS1240_MUXP_AIN0+ADS1240_MUXN_AIN1;//MUX
AD1240_Reg_Val[2]=0;/BUFEN_BIT+RANGE_BIT;//BUFEN_BIT+RANGE_BIT;//ACR
reset_AD_reg();
//========================================================================================
//初始化系统变量
//========================================================================================
KeyDown_flag=0;
key_data=0;
Mode=0;
LCD_Cursor_Addr=0;
AD_Sampling_num=0x04;
//========================================================================================
//初始化液晶
//========================================================================================
init_lcd();
//========================================================================================
//初始化串口
//========================================================================================
uart_init();
EN_uart();
//========================================================================================
//看门狗初始化
//========================================================================================
WDT_num=0;
WDTCTL =WDT_ADLY_1000; // WDT 1s/4 interval timer
IE1 |= WDTIE; // Enable WDT interrupt
//========================================================================================
//打开全局中断
//========================================================================================
_EINT();
//========================================================================================
//主循环开始
//========================================================================================
star:
init_port();
En_key_INT();
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
_NOP();
stara1:
switch( Mode)
{
case 0://压力测量模式
if(KeyDown_flag==1)
{
mode_check();
KeyDown_flag=0;
goto stara1;
}
if(Press_Adjust_state==1)
{
if(ad_flag==1)
{
if(AD_num>(AD_Sampling_num-1))
{
for(i=0;i<(AD_Sampling_num+1);i++)
ad1240_test1[i]=ad1240_test[i+1];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -