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

📄 ad7705 sensor00.c

📁 P89LPC931操作AD7705的程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
	  EA = 1;
	 }
 if((CommandData[4] == 'G'|CommandData[4] == 'g')&(CommandData[3] == 'O'|CommandData[3] == 'o')&CommandData[2] == 0x0d)
     {
	  Update_temp = 1;//Update;  /*继续输出数据*/ 
	 }
 if(CommandData[4] == '$'&(CommandData[3] == 'Z'|CommandData[3] == 'z')&CommandData[2] == 0x0d)/*将当前位置设为零点*/ 
     {
      ZeroPoint_X_temp = ZeroPoint_X_temp_temp;
      ZeroPoint_Y_temp = ZeroPoint_Y_temp_temp;
	  EA = 0;
      FLASH_WriteByte(&ZeroPoint_X,ZeroPoint_X_temp);
	  FLASH_WriteByte(&ZeroPoint_Y,ZeroPoint_Y_temp);
	  EA = 1;
	 }
 if(CommandData[4] == '$'&(CommandData[3] == 'B'|CommandData[3] == 'b')&CommandData[2] == ','&CommandData[0] == 0x0d)
     {
	  BAUD_temp = CommandData[1];  /*设置波特率命令*/ 
	  switch(BAUD_temp%0x30)
	     {
		  case 1: printf("\nBAUD=1200");TH1 = 0xa0;BAUD_Data_temp = 0xa0; break;  //波特率1200
		  case 2: printf("\nBAUD=2400");TH1 = 0xd0;BAUD_Data_temp = 0xd0; break;  //波特率2400
		  case 3: printf("\nBAUD=4800");TH1 = 0xe8;BAUD_Data_temp = 0xe8; break;  //波特率4800
		  case 4: printf("\nBAUD=9600");TH1 = 0xf4;BAUD_Data_temp = 0xf4; break;  //波特率9600
		  case 5: printf("\nBAUD=19200");TH1 = 0xfa;BAUD_Data_temp = 0xfa; break;  //波特率19200
          case 6: printf("\nBAUD=38400");TH1 = 0xfd;BAUD_Data_temp = 0xfd; break;  //波特率38400
          default:TH1 = BAUD_Data;BAUD_Data_temp = BAUD_Data; break;  //波特率19200
		 }
	  EA = 0;
      FLASH_WriteByte(&BAUD,BAUD_temp);
	  FLASH_WriteByte(&BAUD_Data,BAUD_Data_temp);
	  EA = 1;
	 }
/* if(CommandData[4] == '$'&CommandData[3] == 'U'&CommandData[2] == ','&CommandData[0] == 0x0d)
     {
	  Update_temp = CommandData[1];
	  switch(Update_temp%0x30)
	     {
/*          case 1:   WriteByte7705(0x10);WriteByte7705(0x45);
                    WriteByte7705(0x11);WriteByte7705(0x45);
                    WriteByte7705(0x20);WriteByte7705(0x04);
	                WriteByte7705(0x21);WriteByte7705(0x04); break;  //1.31Hz 输出,-3dB滤波,排序滤波
		  case 2:   WriteByte7705(0x10);WriteByte7705(0x45);
                    WriteByte7705(0x11);WriteByte7705(0x45);
                    WriteByte7705(0x20);WriteByte7705(0x05);
	                WriteByte7705(0x21);WriteByte7705(0x05); break;  //1.57Hz 输出,-3dB滤波,排序滤波
		  case 1:   WriteByte7705(0x10);WriteByte7705(0x44);
                    WriteByte7705(0x11);WriteByte7705(0x44);
                    WriteByte7705(0x20);WriteByte7705(0x04);
	                WriteByte7705(0x21);WriteByte7705(0x04); break;  //5Hz 输出,排序滤波
		  case 2:   WriteByte7705(0x10);WriteByte7705(0x44);
                    WriteByte7705(0x11);WriteByte7705(0x44);
                    WriteByte7705(0x20);WriteByte7705(0x05);
	                WriteByte7705(0x21);WriteByte7705(0x05); break;  //6Hz 输出,排序滤波
		  default:  WriteByte7705(0x10);WriteByte7705(0x44);
                    WriteByte7705(0x11);WriteByte7705(0x44);
                    WriteByte7705(0x20);WriteByte7705(0x04);
	                WriteByte7705(0x21);WriteByte7705(0x04); break;  //5Hz 输出,排序滤波
		 }
	  EA = 0;
      FLASH_WriteByte(&Update,Update_temp);
	  EA = 1;
	 }*/
 if(CommandData[4] == '$'&(CommandData[3] == 'A'|CommandData[3] == 'a')&CommandData[2] == 'X')/*设置报警点命令*/ 
     {
      printf("\nPlease input Alarm Point of +X:");//&(CommandData[2] == 'X'|CommandData[2] == 'x')
	  scanf("%f",&ALARM_X_P_temp);
      printf("\nPlease input Alarm Point of -X:");
	  scanf("%f,",&ALARM_X_N_temp);
	  EA = 0;
      FLASH_WriteByte(&ALARM_X_P,ALARM_X_P_temp);
	  FLASH_WriteByte(&ALARM_X_N,ALARM_X_N_temp);
	  EA = 1;
	  if(ALARM_X_P==ALARM_X_P_temp&ALARM_X_N==ALARM_X_N_temp)
	      printf("ALARMX SET OK.\n");
	      else
		  printf("ALARMX SET FAIL.\n");
	 }
 if(CommandData[4] == '$'&(CommandData[3] == 'A'|CommandData[3] == 'a')&CommandData[2] == 'Y')
     {
	  printf("\nPlease input Alarm Point of +Y:");//(CommandData[2] == 'Y'|CommandData[2] == 'y')
	  scanf("%f",&ALARM_Y_P_temp);
      printf("\nPlease input Alarm Point of -Y:");
	  scanf("%f",&ALARM_Y_N_temp);
	  EA = 0;
	  FLASH_WriteByte(&ALARM_Y_P,ALARM_Y_P_temp);
	  FLASH_WriteByte(&ALARM_Y_N,ALARM_Y_N_temp);
	  EA = 1;
      if(ALARM_Y_P==ALARM_Y_P_temp&ALARM_Y_N==ALARM_Y_N_temp)
	      printf("ALARMY SET OK.\n");
	      else
		  printf("ALARMY SET FAIL.\n");
	 }
 if(CommandData[4] == '$'&(CommandData[3] == 'D'|CommandData[3] == 'd')&CommandData[1] == 0x0d)
     {
	  printf("COMMAND FORMAT:\n");
	  printf("$A\n"); 
	  printf("$Z\n"); 
	  printf("$R\n"); 
	  printf("$B,[1-6]\n"); 
	  printf("C\n"); 
	  printf("GO\n\n"); 
	  printf("DATA:\n");
 	  printf("ALARMX+:%2.3f,ALARMX-:%2.3f",ALARM_X_P_temp,ALARM_X_N_temp);
 	  printf("ALARMY+:%2.3f,ALARMY-:%2.3f\n",ALARM_Y_P_temp,ALARM_Y_N_temp);
	 }
}
//---------------------------------------------------------------------------
//功能:冒泡法排序
//---------------------------------------------------------------------------
void PaiXu()
{     
// uchar a,b;
 uint temp_data;
// for(a=1;a<=3;a++)
//     for(b=1;b<=3-a;b++)
//	     {
		  if(ReceiveData_X[3]<ReceiveData_X[2])
		      {
			   temp_data = ReceiveData_X[3];
               ReceiveData_X[3] = ReceiveData_X[2];
               ReceiveData_X[2] = temp_data;
			  }
			  if(ReceiveData_X[2]<ReceiveData_X[1])
		      {
			   temp_data = ReceiveData_X[2];
               ReceiveData_X[2] = ReceiveData_X[1];
               ReceiveData_X[1] = temp_data;
			  }
		  if(ReceiveData_Y[3]<ReceiveData_Y[2])
		      {
			   temp_data = ReceiveData_Y[2];
               ReceiveData_Y[3] = ReceiveData_Y[2];
               ReceiveData_Y[2] = temp_data;
			  }
			  if(ReceiveData_Y[2]<ReceiveData_Y[1])
		      {
			   temp_data = ReceiveData_Y[1];
               ReceiveData_Y[2] = ReceiveData_Y[1];
               ReceiveData_Y[1] = temp_data;
			  }
//		 }
// for(a=2;a<=9;a++)
//    {
     ReceiveData_X[0] += ReceiveData_X[2];  //*将去掉最大最小值的数据求平均后存放在Receiv
     ReceiveData_Y[0] += ReceiveData_Y[2];
//	}
}
/*void delay20ms()
{
 uchar time1,time2;
 for(time1=150;time1>0;time1--)
     for(time2=200;time2>0;time2--)
	     {
		   ;
		 }
}*/
//---------------------------------------------------------------------------
//功能:主程序开始
//---------------------------------------------------------------------------
void main(void)
{
 uchar f = 3,ChannelFlag = 2;
// Update_temp = Update;
 BAUD_temp = BAUD;
 BAUD_Data_temp = BAUD_Data;
 TMOD = 0x20;
 SCON = 0x52;
 PCON = 0x00;
 TH1 = BAUD_Data_temp;
 TL1 = BAUD_Data_temp;
 TR1 = 1;
 EA = 1;
 ES = 1;
 P2M1 = 0;
 P2M2 = 0;
 P1M1 = 0; //把TXD和RXD设置为准双向
 P1M2 = 0;
 ALARM_X = 0;
 ALARM_Y = 0;
 ZeroPoint_X_temp = ZeroPoint_X;
 ZeroPoint_Y_temp = ZeroPoint_Y;
 ALARM_X_P_temp = ALARM_X_P;
 ALARM_X_N_temp = ALARM_X_N;
 ALARM_Y_P_temp = ALARM_Y_P;
 ALARM_Y_N_temp = ALARM_Y_N;
// Init7705(CH1,UNIPOLAR,1);  //初始化AD7705
// Init7705(CH2,UNIPOLAR,1);
REST = 0;
REST = 1;
 while(1)
     {
	  if(RIFlag)   //如果串收到数据,则转去处理这些命令数据
	      {
		   ArrangeData();
		   RIFlag = 0;
		   i = 4;
		  }
	  if(ArrangeFlag)  //如果整理数据标志为1,也就是收到10次转换结果,则转去处理AD7705数据
		  {
		   PaiXu();
		   SendFlag = 1;  //整理之后将输出数据标志位置位
		   ArrangeFlag = 0;
		  }
//      if(ChannelFlag==2)
//               Init7705(CH1,UNIPOLAR,1);
//      if(ChannelFlag==1)
//               Init7705(CH2,UNIPOLAR,1);
      while(!DRDY)
          {
           if(ChannelFlag==2)
              {
			   Init7705(CH1,UNIPOLAR,1);
               ReceiveData_X[f] = GetData7705(CH1);
              }
           if(ChannelFlag==1)
              {
			   Init7705(CH2,UNIPOLAR,1);
               ReceiveData_Y[f] = GetData7705(CH2);
              }
           ChannelFlag--;
           if(ChannelFlag==0)
		      {
               ChannelFlag = 2;
               f--;
			  }
           if(f==0)
               {
                ArrangeFlag = 1;
                f = 3;
               }
		   DRDY = 1;
          }
	  if(((ZeroPoint_X_temp_temp-ZeroPoint_X_temp)*LSB-ALARM_X_P_temp)>=0|(ALARM_X_N_temp - (ZeroPoint_X_temp_temp-ZeroPoint_X_temp)*LSB)>=0)
		  ALARM_X = 1;
	      else ALARM_X = 0;
      if(((ZeroPoint_Y_temp_temp-ZeroPoint_Y_temp)*LSB-ALARM_Y_P_temp)>=0|(ALARM_Y_N_temp - (ZeroPoint_Y_temp_temp-ZeroPoint_Y_temp)*LSB)>=0)
		  ALARM_Y = 1;
	      else ALARM_Y = 0;
	  if(SendFlag==1&Update_temp)
		  {
		   printf("$%d,X:%2.3f,Y:%2.3f\n",ID,(ReceiveData_X[10]-ZeroPoint_X_temp_temp)*LSB-14,(ReceiveData_Y[10]-ZeroPoint_Y_temp_temp)*LSB-18);
		   ZeroPoint_X_temp_temp = ReceiveData_X[2];
		   ZeroPoint_Y_temp_temp = ReceiveData_Y[2];
		   ReceiveData_X[12] = 0;
		   ReceiveData_Y[2] = 0;
           SendFlag = 0;
		  }
	 }
}

⌨️ 快捷键说明

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